Guildsystem

From DimensioneX
Jump to navigation Jump to search

How the guild system works - game: Underworld

The guilds system is a small application within the Underworld game, built thanks to two features of DimensioneX: SET support and the SaveSetting/LoadSetting instructions.

This article refers to version 6.9.5 of [Underworld], and to DimensioneX version 6.1.0.

If you have other versions of the software you could meet some inaccuracies. Being this article hosted on a WIKI site, you can correct errors by using the EDIT tab or eave comments by using the DISCUSSION tab.

Good reading.

This article has been translated from Italian by using Google and it is now being corrected by hand. 
The translation is still in progress so if you find some errors in sections below please come back tomorrow

1 the guilds room

Everything starts from a room ( guildroom ), that it is that one where the application is concentrated.

For this I have created this appropriate room (tower the south-west) and an appropriate personage ( Lord Guilford ) that it serves to make to arrive to the customer the messages of error if for case mistakes something.

ROOM guildroom NAME in the Tower Sud-Ovest DESCRIPTION This is the room of the captain of the guards.  It knows all the Gilde.  IMAGE S armoroom2.jpg  PANEL pguilds In this room the gilde will be able to be managed, here why in the definition of the room I have specified that it uses a special panel "pguilds" about which we speak endured

2 the panel

Why it is possible to manage the system of the gilde, I have created an appropriate set of commandos.

In practical it serves to create a new panel of commandos, pguilds , that therefore it is defined:

PANEL pguilds VERSION OF default CR CR BUTTON guildcmd, "I give this:  ", "Guild action", doGuildOperation DROPDOWN guildop, guildOps, join LABEL "" DROPDOWN guildsel, guildnames, 0 Draft, as it is looked at of varying of the panel of default to which they have been added two lists to curtain ( drop-down ). This is a new control that has been introduced in version 6,0,2 of DimensioneX, that it works therefore (we see before the first list):

3 the list to reduction

The first one id, guildop represents the same curtain.

Of this ID ce we do not have any to worry until does not arrive the moment to read the input of the customer.

It follows the name of a SET, guildops . This is fundamental why it will have to contain all the choices available, that is the commandos who I decide to make to use the customers.

4 the commands' set

The set of the commandos guildOps I could define it in section SETS, but it comes me more comfortable to define it in the event onStart , called to the loading of the game. If gone to control you will discover that this event is found in the rows it_underworld.dxw :

guildOps = NewSet("0new=Nuova gilda, to 1edt_logo=Cambiare logo, to èdt_web=Cambiare page web, to 3del=Cancellare the gilda, 4-=------(per all)------, to join=Entrare in this gilda:,  to leave=Abbandonare this gilda:") A SET is an associative Array, and the NewSet function me ago to define with one sintassi much simple one. The elements are separate to you from virgole and are braces chiave=valore.

The key is a mnemonic code in which I have put a number for having a very precise ordering. The value is one tightens that he is that that the customer will see. The key is that one that I will have to control in order to discover that what the customer has chosen.

well, thanks to control DROPDOWN this SET comes automatically transformed in one curtain.

5 the set of the gilde

Returning to the panel pguilds you see that there is a second curtain. This why as an example, if the customer wants to enter in a gilda, he must also dirmi which.

Then I put a second curtain, with the names of the gilde. Here you see that the used SET is called guildnames .

guildnames it is a set that contains the names of the gilde. I have thought to use like keys the names of the founders, inasmuch as every person can found to the maximum one gilda. In this way me he is simple, date a person, to see if it possesses or not one gilda.

guildnames it comes created with this instruction:

 guildnames = NewSet() which always comes recalled from the event onStart.

For pignoli: This instruction the found ones in the rows it_commons.dxw in the sub common_onStart .

This contains all the code of common inzializzazione to the several areas of Underworld. The gilde they are worth in fact for all the areas, while the operations on the gilde I concur to them alone in the area of the castle, here explained why these initializations of set are in various places. But this however does not have much importance.

The instruction of which over it creates an empty set.

The application of the gilde, that we will see between little (but already we say that is found in the event doGuildOperation() ), simply goes to add, behind demand for the customer, new names of gilda to the set.

6 the persistence

In order to avoid that they give you of the gilde, between which the their names contained in guildnames , they vanish in null the every time that the game or the serveur comes riavviato is necessary to save these information in permanent way.

In order to make that, in the procedure that represents the true and own ' application of the gilde ', doGuildOperation() - the found ones within it_underworld.dxw , come used following:

saveSetting "ctx_guildnames", guildnames This saveSetting goes to save the entirety guildnames in a setting relative to the context of the game, than then it will come recharged in case of riavvio. Noticed in fact that in the local event onStart we have:
Call LoadContext() ' Reads game saved status from disk That it is exactly one called to a called function a single time to the start, that series of loadSetting contains one . They will go to reconstruct, between the other, give you of the gilde therefore com' were before the riavvio.

Interesting E' to observe that the saveSetting with they give you of the gilde comes only executed when it is necessary, therefore only when an operation on the gilde has been executed, and not at intervals regular of time. This why, well-known, the saveSetting it implies an operation on disc that slows down the performances of the game, what that we want to avoid.

7 the guilds application

As I said, the application of the management gilde is in an only procedure that is subdivided for the possible operations. This procedure is the event doGuildOperation() that we find in it_underworld.dxw.

This event comes recalled (to see the panel pguilds ) from the push-button guildcmd . This why - at least in the version of used DimensioneX - enough not to select a commando from the list to curtain why they give to you they come sendes you to the serveur. This can be made single through a push-button, here why I have had it to insert.

Finally we see the code:

EVENT doGuildOperation ' Speak guildOps(input("guildOp")) If input("guildOp") = "0new" If input("txtBox") < > "" If guildnames($AGENT.name) < > null Speak guilford,$AGENT," you have already founded one gilda, to messere."  Return End_If If $$AGENT.Esperienza < 14 Speak guilford,$AGENT, "To found a gilda demands greater Experience, getlteman.  Returned later."  Return End_If Dim s = guildSubscribed($AGENT) If s < > null Speak guilford,$AGENT, "You must leave" + guildnames(s) + ", before."  Return End_If SetAdd guildnames, $AGENT.name, input("txtBox") saveSetting "ctx_guildnames", guildnames Else Speak guilford,$AGENT," As it will be called?  Scrivetelo, to messere."  Return End_If End_If If input("guildOp") = "3del" '...  End_If If input("guildOp") = "4 -" Return End_If Call guildroom.onReceive saveSetting "ctx_guildnames", guildnames saveSetting" ctx_guildlogos", guildlogos saveSetting "ctx_guildsubscribers", guildsubscribers saveSetting" ctx_guildwebs", guildwebs saveSetting "ctx_guildkills", guildkills END_EVENT Here we notice as the control to curtain works: the control that calls guildOp me arrives in with from the predefined name that it is called input, that contains all gives sendes to you from the panel commandos to you. The keys of the entirety are the ID of the controls specify to you, and the values are the values immessi - in the case of the curtain, the chosen value.

Always speaking about the curtain, the value that returns to me behind is not the description that the customer has seen, but the code that I have used like key. We go see again section "4" here over for a reference.

8 the management of the set

To this point the management of the gilde is enough simple. To every commando it corresponds an arm of if and a sequence of operations to execute, than they are not granché complex.

Attention but: all they give you relati you to the gilde are in of the SET whose keys are the names of the owners of the gilde.

In this version of DimensioneX (6,0,2) it is not possible to in this way insert a new element in a set:

mioset("nuovachiave") = "new value"

but the SetAdd instruction must be used like is looked at in the source. It can give that to this thing changes in the next versions, but if modified the code you must be remembered some why using the sintassi here over you do not obtain errors but not even no result, and will pass hours to ask to you because it does not work.

After all, the used set from the system gilde is these (found all to them in LoadContext() defined in the rows it_commons.dxl)

guildnames names of the gilde guildlogos loghi of gilde (the URL) guildsubscribers list separated from ";" of the names of the enrolled one for every gilda guildwebs situated web of gilde (the URL) guildkills conteggio of the killings for every gilda This last one, guildkills , comes dawned to every killing and comes saved through saveSetting every 4 minuteren taking advantage of the onTick.

To notice that this modernization makes confidence on the property guild that the customer has to the income, previo control (it is not said that from the last time that you have played the gilda it still exists!) - to see event onNew()

9 Show guilds data

They give you of the gilde are shown through the funzioncina getGuildBox() , defined in it_commons.dxl . To this function enough to say who he is the wished owner of the gilda and if she wants or not to see also the list of the enrolled one with they give you of the killings.

Function getGuildBox(owner, withmembers) Dim txt = "" Dim tmp Dim link1 =" "Dim link0 =" "If guildwebs(owner) < > null link1 =" < To HREF=javascript:top.popupWin(' "+ guildwebs(owner) +" ', -1, -1); > "  link0 = "</To >" End_If If guildlogos(owner) < > "" tmp = link1 +" < IMG SRC = "+ guildlogos(owner) +" WIDTH=32 HEIGHT=32 ALIGN=MIDDLE BORDER=0 > "+ link0 End_If txt = txt + tmp +"  "+ link1 + guildnames(owner) + link0 founded + " from  "+ owner +"  "If withmembers txt = txt +"Members:  "+ guildsubscribers(owner) txt = txt +"Combatt. won:  "+ guildkills(owner) End_If Return txt End_Function Questa funzioncina viene richiamata opportunamente con un bel ciclo ogni volta che si entra nella stanza delle gilde: 

EVENT guildroom.onReceive Dim txt="Questa è la stanza del capitano delle guardie. Lui conosce tutte le Gilde." txt = txt + " " Dim i Dim owner For i = 1 To SetLen(guildnames) owner = SetKey(guildnames,i) txt = txt + " " + getGuildBox(owner,true) Next txt = txt + " " guildroom.description = txt END_EVENT cosicché quando entro ho sempre la situazione aggiornata.

Inoltre la funzione è chiamata anche dal comando Info che restituisce informazioni sul giocatore stesso (definita in it_battlesystem.dxl).

Sub doCheckup() Dim item Dim name Dim s,guild s = guildSubscribed($AGENT) If s=null guild = "Gilda: Nessuna." Else guild = getGuildBox(s,false) End_If Print guild

      ...

Questa prima di tutto tramite la funzione guildSubscribed() va a vedere a quale gilda sei iscritto poi chiama la getGuildBox per stamparne i dati.

La stessa getGuildBox viene usata nell'evento onLook per fornire questa informazione su di te quando uno ti guarda.




10 Conclusions

Il sistema delle gilde è una mini-applicazione costruita dentro Underworld che dimostra efficacemente come usare le seguenti caratteristiche di DimensioneX:

tendine drop-down SET saveSetting/loadSetting in più la cosa è perfettamente compatibile con la struttura multi-area del gioco, quindi può essere applicabile in tutti i contesti. E' fattibile a questo punto aggiungere altri elementi per rendere la gestione più interessante.

In caso di commentie domande, consiglio di postare sul nostro Forum.