YourCityMUD
Da MontelLUG WIKI.
Cos'è un MUD?
Un MUD è un sostanzialmente un gioco di ruolo multiutente. Ogni giocatore ha un personaggio con determinate caratteristiche e abilità da guidare e far interagire con gli altri personaggi in una ambientazione virtuale. Classicamente i MUD hanno ambientazione fantasy, del tipo: Sei un elfo chierico con forza 52, difesa 36, capacità di volare ecc. ecc.
Cos'è in breve YourCityMud?
YourCityMUD (nome provvisorio) sarà (o quantomeno vorremmo fosse) un MUD molto flessibile ed efficiente, rilasciato sotto la GPL. Chi costruirà le ambientazioni potrà scegliere più o meno tutto: potrà scegliere gilde del tipo Fighetti, Reppettoni, Punkabestia ecc... abilità come "Resistenza all'alcool" ed ambientare il tutto nella sua città, provincia, mondo immaginario. Si potranno ideare quest sia automatiche sia scritte di pugno dai creatori dell'ambientazione.
Realizzazione
YourCityMUD sarà scritto in C++, appoggiandosi un po' sul PostgreSQL. Il C++ è stato scelto perché il codice sarà pesantemente ad oggetti e per assicurare efficienza al programma. Ci appoggeremo al PostgreSQL (che gestisce l'ereditarietà tra tabelle) per tenere memoria delle ambientazioni e per gestirle e crearle facilmente via web. YourCityMUD sarà costituito da un server e un numero imprecisato di client (telnet, grafici, via web, ecc.) che comunicheranno direttamente col server in XML o con un modulo che gestirà le comunicazioni in XML col server (per il telnet, per es.).
Stato del progetto
Il progetto è per buona parte chiaro nelle nostre menti :) Stiamo scrivendo le interfacce delle varie classi C++ e definendo le tabelle SQL. Probabilmente riprenderemo a lavorare in modo serio a settembre, dopo le vacanze.
Progetto delle Classi
- dialog(Dumpable, Restorable)
id_dialog mHaveSkills mHotHaveSkills lHaveFeats lNotHaveFeats lHaveRace lNotHaveRace lHaveClass lNotHaveClass lHaveObject lNotHaveObject lHaveQuestCompleted lNotHaveQuestCompleted lHaveCurrentQuest lNotHaveCurrentQuest pStartingPhrase >canHear(*pg char) // valuta se il personaggio può sentire il dialogo
- phrase(Dumpable, Restorable)
id_dialog id_phrase pPngSpeaking //personaggio che stà parlando in questo momento mHaveSkills mHotHaveSkills lHaveFeats lNotHaveFeats lHaveRace lNotHaveRace lHaveClass lNotHaveClass lHaveObject lNotHaveObject lHaveQuestCompleted lNotHaveQuestCompleted lHaveCurrentQuest lNotHaveCurrentQuest sFrase sResponse1 //risposta che viene mostrata come possibilità iAction1 //azione che intraprende il png se si sceglie questa risposta pId_frase1 //frase cui si rimanda se questa risposta viene scelta sResponse2 iAction2 pId_frase2 sResponse3 iAction3 pId_frase3 >nextStep(char* risposta)
- connection
id_connection mHaveSkills mHotHaveSkills lHaveFeats lNotHaveFeats lHaveRace lNotHaveRace lHaveClass lNotHaveClass lHaveObject lNotHaveObject pToLocation >canPass(character* char) // verifica se il personaggio può passare
- spell(Dumpable, Restorable)
id_spell sName iSpellContainer TYPE_AREA //incantesimo ad area TYPE_TARGET //incantesimo a targhet TYPE_PERSONAL //incantesimo personale iType //uno dei valori sopra mHaveSkills mHotHaveSkills lHaveFeats lNotHaveFeats lHaveRace lNotHaveRace lHaveClass lNotHaveClass iHaveObject //oggetto magico, compoonente materiale, etc.. sLongDesc iDuration lAddFeats lLoseFeats mAddSkills mLoseSkills lAddItems lLoseItems iAddPF iLosePF iNewLocation iRandomPercentage //percentuale di variazione casuale intensit >cast() >cast(character* target)
- character(Container)
id_character sName sDescription lRace mClass //lista delle classi con livello pLocation mSkills lFeats mTempSkills //mSkills modificate da magie etc. lTempFeats //lFeats piu' modifiche per magie etc lSpells mActiveSpells /spells attivi e loro durata residua lObjects iPf iPx pOnHand1 //puntatore all'oggetto dell'inventario in mano destra pOnHand2 pOnHead pOnNeck pOnFinger1 pOnFinger2 pOnBody1 pOnBody2 >fight(character* target) >flee() >move(connection* destination) //vai in un'altra location >give(object* item)
- character>>pg (Dumpable, Restorable)
sPassword iPlayedTime mLocationVisited //mappa di location visitate e numero di visite iPx //punti di esperienza iInactivityTime //tempo di inattività lQuestCompleted lCurrentQuest >talk(pg* target) //chat >shout() //manda messaggio a tutti i pg nella tua stessa location >talk(png* target) //start dialog
- character>>png(Dumpable, Restorable)
lKnownPG //lista dei pg conosciuti lDialog //lista ordinata dei dialoghi da tentare di fare pDefaultDialog //Dialogo da fare nel caso nessuno nella lista possa essere fatto
- object(Dumpable, Restorable, Container, Magical, Wearable)
id_object sName sDescription iWeight mMagic //magie contenute con loro numero di cariche lWearingPlaces //lista di posti in cui e' possibile indossarlo (se ha magie possono funzionare solo se indossato) iWeared //indica se e' indossato o no l'oggetto WEARED_YES WEARED_NO LOC_HEAD LOC_NECK LOC_BODY1 LOC_BODY2 LOC_FINGER1 LOC_FINGER2 LOC_HAND1 LOC_HAND2 >dump() >restore() >cast(spell* id_spell) >isWearableOn(int wearLocation)
- object>>usable
iMagicItem MAGICITEM_YES MAGICITEM_NO iDuration lAddFeats lLoseFeats mAddSkills mLoseSkills lAddItems lLoseItems iAddPF iLosePF iNewLocation //dove fa spostare il target l'uso dell'oggetto iRandomPercentage //percentuale di variazione casuale intensit iNumCharges >use(character* target)
- object>>container(Container)
lContainedObject iMaxContainedWeight >addObject(object* object) >removeObject(object* object) >removeObject(object* nomeOggetto) >containedWeight()
- fakeLocation
id_fakeLocation pN //puntatori alle altre connection che puntano alle alre fake location pNE pE pSE pS pSW pW pNW pUP pDW pLocation //puntatore alla location associata alla fakeLocation lPg //lista dei pg presenti nella location iEmptyTime //tempo da quando nessun pg è nella location
- location
id_location sName sShortDescription sLongDescription lObjects lPng >locationMsg(char* msg) //messaggio da mandare a tutti i pg nella location
- quest
...
Convenzioni
CONVENZIONI NEI NOMI DELLE VARIABILI
La prima lettera indica il tipo: p=>puntatore i=>intero m=>map, hash l=>lista s=>stringa Le parole che compongono la variabile vanno in minuscole con l'iniziale di ogni parola maiuscola.
La seconda lettera va maiuscola.
CONVENZIONE NEI NOMI DELLE COSTANTI
Vanno tutte in maiuscole.
CONVENZIONI NEI NOMI DEI METODI
Sono preceduti da > che non fa parte del nome