Ciao a tutti. Questo sarà un'appendice in cui spiegherò più dettagliatamente le proprietà delle classi e i possibili valori, cosa che non potevo fare senza dilungarmi troppo nelle lezioni specifiche.
Esse infatti servono per capire quali proprietà sono necessarie per mostri e umani, qui vediamo invece tutti i possibili valori.
C_NPCCODICE
class C_Npc
{
var int id;
var string name[5];
var string slot;
var string effect;
var int npcType;
var int flags;
var int attribute[ATR_INDEX_MAX];
var int HitChance[MAX_HITCHANCE];
var int protection[PROT_INDEX_MAX];
var int damage[DAM_INDEX_MAX];
var int damagetype;
var int guild;
var int level;
var func mission[5];
var int fight_tactic;
var int weapon;
var int voice;
var int voicePitch;
var int bodymass;
var func daily_routine;
var func start_aistate;
var string spawnPoint;
var int spawnDelay;
var int senses;
var int senses_range;
var int aivar[100];
var string wp;
var int exp;
var int exp_next;
var int lp;
var int bodyStateInterruptableOverride;
var int noFocus;
};
id: identificativo ASSOLUTO degli npc. Potete inserire un qualsiasi numero che non sia ripetuto ma è buona norma seguire delle norme: Ogni gilda infatti ha gli identificati che aumentano di uno da un numero iniziale (900 per contadini, 1000 per banditi, ecc..). Uno stesso personaggio presente in più mondi possiede classi diverse per ogni mondo o l'id è lo stesso ma moltiplato per 10 (con uno zero in più alla fine).
name[5]: l'unica posizione dell'array utilizzata è name[0]. Questa indica il nome che comparirà sul personaggio
slot: non usata
effect: non usata
npcType: indica il tipo di npc (generico = senza nome con dialogo standard; principale: con nome e dialoghi personalizzati)
- NPCTYPE_AMBIENT: personaggio generico
- NPCTYPE_MAIN: personaggio principale
- NPCTYPE_FRIEND: amico
- da qui in poi ci sono diverse eccezioni
- NPCTYPE_OCAMBIENT: personaggio generico di campo vecchio
- NPCTYPE_OCMAIN: personaggio principale di campo vecchio
- NPCTYPE_BL_AMBIENT: personaggio generico dentro il campo dei banditi a jharkendar
- NPCTYPE_TAL_AMBIENT: personaggio generico fuori dal campo dei banditi a jharkendar
- NPCTYPE_BL_MAIN: personaggio principale dentro il campo dei banditi a jharkendar
flags: proprietà speciali degli npc
- NPC_FLAG_FRIEND: amico
- NPC_FLAG_IMMORTAL: personaggio immortale
- NPC_FLAG_GHOST: fantasma
attribute[ATR_INDEX_MAX]: attributi degli npc
- ATR_HITPOINTS: vita attuale
- ATR_HITPOINTS_MAX: vita massima
- ATR_MANA: mana
- ATR_MANA_MAX: mana massimo
- ATR_STRENGTH: forza
- ATR_DEXTERITY: destrezza
- ATR_REGENERATEHP: rigenerazione vita al secondo (non usato)
- ATR_REGENERATEMANA: rigenerazione mana al secondo (non usato)
HitChance[MAX_HITCHANCE]: possibilità di critico e di centrare il bersaglio
- NPC_TALENT_UNKNOWN: non usato
- NPC_TALENT_1H: percentuale di critico ad una mano
- NPC_TALENT_2H: percentuale di critico a due mani
- NPC_TALENT_BOW: percentuale di prendere il persaglio con l'arco (dipende anche dalla distanza)
- NPC_TALENT_CROSSBOW: percentuale di prendere il persaglio con la balestra (dipende anche dalla distanza)
protection: varie protezioni
- PROT_BARRIER: protezione dalla barriera suppongo, non usato
- PROT_BLUNT: protezione da colpi contundenti
- PROT_EDGE: protezione da armi da taglio
- PROT_FIRE: protezione dal fuoco
- PROT_FLY: protezione dai colpi che ti fanno volare (golem, troll, ecc..)
- PROT_MAGIC: protezione dalla magia
- PROT_POINT: protezione da frecce e dardi
- PROT_FALL: protezione da caduta
damage: danno di una specifica tipologia di colpi (ne possono essere usati più d'uno se il danno viene da diverse fonti contemporaneamente)
- DAM_INDEX_BARRIER: danni dalla barriera suppongo, non usato
- DAM_INDEX_BLUNT: danni da colpi contundenti
- DAM_INDEX_EDGE: danni da armi da taglio
- DAM_INDEX_FIRE: danni dal fuoco
- DAM_INDEX_FLY: danni dai colpi che ti fanno volare (golem, troll, ecc..)
- DAM_INDEX_MAGIC: danni dalla magia
- DAM_INDEX_POINT: danni da frecce e dardi
- DAM_INDEX_FALL: danni da caduta
damageType: il tipo di danno applicato se non si utilizzano armi (possono essere applicate più tipologie per volta utilizzando l'unione |)
- DAM_BARRIER: danni dalla barriera suppongo, non usato
- DAM_BLUNT: danni da colpi contundenti
- DAM_EDGE: danni da armi da taglio
- DAM_FIRE: danni dal fuoco
- DAM_FLY: danni dai colpi che ti fanno volare (golem, troll, ecc..)
- DAM_MAGIC: danni dalla magia
- DAM_POINT: danni da frecce e dardi
- DAM_FALL: danni da caduta
guild: gilda di appartenenza (con ciò non viene conclusa la lista di mostri perché come noterete alcuni hanno la stessa gilda ma diverso aivar)
- GIL_NONE: nessuna gilda
- GIL_HUMAN: gilda speciale, usata SOLO nel file Species.d per impostare gli stessi valori a tutti gli umani
- GIL_PAL: paladini
- GIL_MIL: miliziani
- GIL_VLK: cittadini
- GIL_KDF: maghi del fuoco
- GIL_NOV: novizi
- GIL_DJG: cacciatori di draghi
- GIL_SLD: mercenari
- GIL_BAU: contadino
- GIL_BDT: banditi
- GIL_STRF: schiavi
- GIL_DMT: cercatori
- GIL_OUT: per chi è fuori dalle zone principali
- GIL_PIR: pirati
- GIL_KDW: maghi dell'acqua
- GIL_EMPTY_D: vuota
- GIL_PUBLIC: utilizzata solo nei portali (cambi di zone esterna/interna) per delimitare le zone pubbliche
- GIL_SEPERATOR_HUM: classe utilizzata dall'IA per delimitare tutte le gilde umane e non
- GIL_MEATBUG: scarafaggi
- GIL_SHEEP: pecore
- GIL_GOBBO: goblin
- GIL_GOBBO_SKELETON: goblin scheletri
- GIL_SUMMONED_GOBBO_SKELETON: goblin scheletri evocati
- GIL_SCAVENGER: saprofagi
- GIL_GIANT_RAT: ratti giganti
- GIL_GIANT_BUG: raziatori dei campi
- GIL_BLOODFLY: sanguimosche
- GIL_WARAN: lucertole
- GIL_WOLF: lupi
- GIL_SUMMONED_WOLF: lupi evocati
- GIL_MINECRAWLER: scavaragni
- GIL_LURKER: predatori
- GIL_SKELETON: scheletri
- GIL_SUMMONED_SKELETON: scheletri evocati
- GIL_SKELETON_MAGE: scheletri maghi
- GIL_ZOMBIE: zombie
- GIL_SNAPPER: squartatori
- GIL_SHADOWBEAST: bestie d'ombra
- GIL_SHADOWBEAST_SKELETON: bestie d'ombra non-morte
- GIL_HARPY: arpie
- GIL_STONEGOLEM: golem di pietra
- GIL_FIREGOLEM: golem di fuoco
- GIL_ICEGOLEM: golem di ghiaccio
- GIL_SUMMONED_GOLEM: golem evocati
- GIL_DEMON: demoni
- GIL_SUMMONED_DEMON: demoni evocati
- GIL_TROLL: troll
- GIL_SWAMPSHARK: squali di palude
- GIL_DRAGON: draghi
- GIL_MOLERAT: ratti talpa
- GIL_ALLIGATOR: alligatori
- GIL_SWAMPGOLEM: golem di palude
- GIL_STONEGUARDIAN: sentinella di pietra
- GIL_GARGOYLE: pantera
- GIL_EMPTY_A: vuota
- GIL_SUMMONEDGUARDIAN: sentinella di pietra evocata
- GIL_SUMMONEDZOMBIE: zombie evocato
- GIL_EMPTY_B: vuota
- GIL_SEPERATOR_ORC: classe utilizzata dall'IA per separare le gilde di mostri e di orchi
- GIL_ORC: orchi
- GIL_FRIENDLY_ORC: orchi amichevoli
- GIL_UNDEADORC: orchi non morti
- GIL_DRACONIAN: uomini lucertola
- GIL_EMPTY_X: vuota
- GIL_EMPTY_Y: vuota
- GIL_EMPTY_Z: vuota
level: livello del npc
mission[MAX_MISSIONS]: non usato
fight_tactic: tattiche di combattimento (i nomi sono gli stessi delle gilde)
- FAI_HUMAN_COWARD
- FAI_HUMAN_NORMAL
- FAI_HUMAN_STRONG
- FAI_HUMAN_MASTER
- FAI_MONSTER_COWARD: i mostri "giovani" all'inizio del gioco
- FAI_NAILED: deprecata usata per umani. Usare invece FAI_HUMAN_XXX
- FAI_GOBBO
- FAI_SCAVENGER
- FAI_GIANT_RAT
- FAI_GIANT_BUG
- FAI_BLOODFLY
- FAI_WARAN
- FAI_WOLF
- FAI_MINECRAWLER
- FAI_LURKER
- FAI_ZOMBIE
- FAI_SNAPPER
- FAI_SHODOWBEAST
- FAI_HARPY
- FAI_STONEGOLEM
- FAI_DEMON
- FAI_TROLL
- FAI_SWAMPSHARK
- FAI_DRAGON
- FAI_MOLERAT
- FAI_ORC
- FAI_DRACONIAN
- FAI_ALLIGATOR
- FAI_GARGOYLE
- FAI_BEAR: ???????
- FAI_STONEGUARDIAN
weapon: non usata
voice: la voce degli npc durante i dialoghi generici non sottotitolati. Ci 17 voci disponibili tranne la 15 che è dell'eroe
voicePitch: non usata
bodymass: non usata
daily_routine: routine giornaliera (quelle con l'asterisco richiedono un mob)
- TA_Announce_Herold: lettura del discorso dal patibolo
- TA_Cook_Cauldron*: cucinare col calderone
- TA_Cook_Pan*: cucinare con la padella
- TA_Dance: ballare
- TA_FleeToWp: scappare verso un waypoint
- TA_Follow_Player: seguire il giocatore
- TA_Guard_Passage: fare le guardia agli ingressi
- TA_Guide_Player: guidare il giocatore
- TA_Pee: fare pipì
- TA_Pick_FP: scavare per terra col piccone
- TA_Pick_Ore: estrarre il metallo dai giacimenti
- TA_Play_Lute: suonare il liuto
- TA_Potion_Alchemy*: miscelare pozioni
- TA_Practice_Magic: fare pratica di magia
- TA_Pratice_Sword: fare pratica con la spada
- TA_Pray_Sleeper_FP: pregare il dormiente
- TA_Pray_Sleeper*: pregare il dormiente
- TA_Pray_Innos_FP: pregare innos
- TA_Pray_Innos*: pregare innos
- TA_Preach_Vatras: omelia di vatras
- TA_Read_Bookstand*: leggere un libro
- TA_Repair_Hut: riparare il rifugio
- TA_Roast_Scavenger: arrostire il saprofago
- TA_RunToWP: correre verso un waypoint
- TA_Sit_Bench*: sedersi su una panchina
- TA_Sit_Campfire: sedersi attorno al fuoco
- TA_Sit_Chair*: sedersi su una sedia
- TA_Sit_Throne*: sedersi sul trono
- TA_Sleep*: dormire
- TA_Smalltalk: chiacchierata
- TA_Smith_Anvil*: battere il metallo sull'incudine
- TA_Smith_Cool*: raffredare il metallo nell'acqua
- TA_Smith_Fire*: riscaldare il metallo nella forgia
- TA_Smith_Sharp*: affilare il metallo sulla pietra
- TA_Smoke_Joint: fumarsi una canna
- TA_Smoke_Waterpipe*: fumare il narghilè
- TA_Spit_Fire: ???
- TA_Stand_ArmsCrossed: stare in piedi a braccia incrociate
- TA_Stand_Drinking: stare in piedi a bere
- TA_Stand_Eating: stare in piedi mangiando
- TA_Stand_Guarding: stare in piede a fare la guardia
- TA_Stand_WP: stare in piedi
- TA_Stomp_Herb*: tritare le erbe nel calderone
- TA_Sweep_FP: pulire con la scopa
- TA_Wash_FP: lavare per terra
- TA_Stand_Sweeping: pulire con la scopa
- TA_Rake_FP: usare la vanga nei campi
- TA_Cook_Stove: cucinare ai fornelli
- TA_Saw*: segare
- TA_Circle: rituale dei maghi
- TA_Stand_Dementor: cercatori in piedi
- TA_Guard_Hammer: fare la guardia al martello di innos
- TA_Study_WP*: studiare
- TA_Concert: concerto
- TA_Sleep_Deep: dormire profondamente
- TA_RangerMeeting: incontro dell'anello dell'acqua
- TA_Ghost: fantasma in piedi
- TA_GhostWusel: fantasma che vaga
start_aistate: stato di partenza. Non usato in genere per gli umani tranne per banditi (ZS_Bandit), e cercatori (ZS_Stand_Dementor), usare quindi solo in questi casi. Per i mostri viene usato
generalmente ZS_MM_AllScheduler
spawnPoint: non usata
spawnDelay: non usata
senses: i sensi con i quali gli npc percepiscono altri (se ne possono utilizzare più d'uno con l'unione |)
- SENSE_SEE: vista
- SENSE_HEAR: udito
- SENSE_SMELL: olfatto
senses_range: l'ampiezza dei sensi
- PERC_DIST_SUMMONED_ACTIVE_MAX: per i mostri evocati
- PERC_DIST_MONSTER_ACTIVE_MAX: per tutti gli altri mostri
- PERC_DIST_ORC_ACTIVE_MAX: per gli orchi
- PERC_DIST_DRAGON_ACTIVE_MAX: per i draghi
aivar[100]: variabili dell'IA tenute in un array. Non posso elencarvele tutte perché sono 89 e molte di queste hanno tanti valori possibili diversi. Sono tutte contenute in AI_Contasts con il prefisso AIV_
exp: l'attuale esperienza
exp_next: l'esperienza per passare di livello. Nel file B_GivePlayerXP, nell'omonia funzioen troverete la formula per calcolarla
lp: gli lp attuali
bodyStateInterruptableOverride: se è impostato su vero l'npc non può essere interrotto in nessun caso
noFocus: se è impostato su vero non compariranno il nome e la vita dell'npc al focus
Passiamo ora gli oggetti:
C_ITEMCODICE
class C_Item
{
var int id;
var string name;
var string nameID;
var int hp;
var int hp_max;
var int mainflag;
var int flags;
var int weight;
var int value;
var int damagetype;
var int damageTotal;
var int damage[DAM_INDEX_MAX];
var int wear;
var int protection[PROT_INDEX_MAX];
var int nutrition;
var int cond_atr[3];
var int cond_value[3];
var int change_atr[3];
var int change_value[3];
var func magic;
var func on_equip;
var func on_unequip;
var func on_state[4];
var func owner;
var int ownerGuild;
var int disguiseGuild;
var string visual;
var string visual_change;
var string effect;
var int visual_skin;
var string scemeName;
var int material;
var int munition;
var int spell;
var int range;
var int mag_circle;
var string description;
var string text[6];
var int count[6];
var int inv_zbias;
var int inv_rotx;
var int inv_roty;
var int inv_rotz;
var int inv_animate;
};
id: non usato per gli oggetti
name: il nome dell'oggetto (apparirà al focus)
nameID: non usato
hp: non usato
hp_max: non usato
mainflag: la tipologia principale principali dell'oggetto
- ITEM_KAT_NONE: varie
- ITEM_KAT_NF: armi corpo a corpo
- ITEM_KAT_FF: armi a distanza
- ITEM_KAT_MUN: munizioni
- ITEM_KAT_ARMOR: armature
- ITEM_KAT_FOOD: cibo
- ITEM_KAT_DOCS: documenti
- ITEM_KAT_POTIONS: pozioni
- ITEM_KAT_LIGHT: sorgenti luminose???
- ITEM_KAT_RUNE: rune
- ITEM_KAT_MAGIC: anelli, amuleti e cinture
- ITEM_KAT_KEYS: non usato (usare ITEM_KAT_NONE per le chiavi)
flags: attributi secndari dell'oggetto
- ITEM_DAG: obsoleto!
- ITEM_SWD: spade ad una mano
- ITEM_AXE: asce ad una mano
- ITEM_2HD_SWD: spade a due mani
- ITEM_2HD_AXE: asce a due mani
- ITEM_SHIELD: scudi (non usato)
- ITEM_BOW: archi
- ITEM_CROSSBOW: balestre
- ITEM_RING: anelli
- ITEM_AMULET: amuleti
- ITEM_BELT: cinture
- ITEM_DROPPED: oggetti caduti a terra (INTERNO NON UTILIZZARE!)
- ITEM_MISSION: oggetti di missione; se un npc che ha un oggetto avente questa flag, dovesse morire, il corpo non scomparirà per non precludere il completamento della missione
- ITEM_MULTI: impilabile (più d'uno nello stesso slot)
- ITEM_NFOCUS: INTERNO NON UTILIZZARE!
- ITEM_CREATEAMMO: crea munizione automaticamente (non usato)
- ITEM_NSPLIT: non impilabile nello stesso slot
- ITEM_DRINK: obsoleto!
- ITEM_TORCH: torcia
- ITEM_THROW: obsoleto!
- ITEM_ACTIVE: INTERNO NON UTILIZZARE!
weight: non usato
value: valore in oro
damageType: il tipo di danno applicato se non si utilizzano armi
- DAM_BARRIER
- DAM_BLUNT
- DAM_EDGE
- DAM_FIRE
- DAM_FLY
- DAM_MAGIC
- DAM_POINT
- DAM_FALL
damageTotal: il danno total dell'arma
damage: danno di una specifica tipologia di colpi (ne possono essere usati più d'uno se il danno viene da diverse fonti contemporaneamente)
- DAM_INDEX_BARRIER
- DAM_INDEX_BLUNT
- DAM_INDEX_EDGE
- DAM_INDEX_FIRE
- DAM_INDEX_FLY
- DAM_INDEX_MAGIC
- DAM_INDEX_POINT
- DAM_INDEX_FALL
wear: l'effetto che si avrà indossando l'oggetto
- WEAR_TORSO: per le armature
- WEAR_HEAD: per gli elmi
- WEAR_EFFECT: per tutti gli altri oggetti equipaggiabili NON ARMI (anelli, cinture, amuleti, pergamene, ecc..)
protection: varie protezioni
- PROT_BARRIER
- PROT_BLUNT
- PROT_EDGE
- PROT_FIRE
- PROT_FLY
- PROT_MAGIC
- PROT_POINT
- PROT_FALL
nutrition: non usato
cond_atr[3]: array di tre elementi che indica gli attributi necessari per l'equippagiamento (se ne può usare uno slo come tutti e tre)
cond_value[3]: ad ogni elemento di cond_atr va specificato un valore
change_atr[3]: probabilmente il cambio di un attributo dopo l'equippaggiamento, non viene mai usato perché ciò avviene in altri modi, non testato!
change_value[3]: rispettivo aumento dell'attributi in change_atr
magic: non usato
on_equip: nome della funzione che viene chiamata all'equipaggiamento (usato anche per modificare gli attributi)
on_unequip: nome della funzione che viene chiamata al disequipaggiamento
on_state[4]: in genere viene utilizzato solo on_state[0], indica la funzione che viene chiamata ad ogni uso
owner: utilizzato solo nel caso del martello sacro indica il possessore dell'oggetto
ownerGuild: indica la gilda posseditrice dell'oggetto (non usato)
disguiseGuild: probabilmente la gilda che rifiuta quell'ogggetto (non usato)
visual: la visuale 3D dell'oggetto, scrivere qui il nome del file .3ds non compilato
visual_change: la visuale 3D dell'armature indossata, scrivere qui il nome del file .asc non compilato
effect: l'effetto che verrà applicato sopra l'oggetto (
qui una lista)
visual_skin: forse (???) se l'oggetto si vede sulla pelle, forse perché tale attributo è usato praticamente sempre ma sempre impostato su 0
scemeName: indica una stringa di riconoscimento dell'oggetto, vedere altri oggetti simili per l'utilizzo
material: indica il materiale dell'oggetto e quindi il suono che farà quando cadrà a terra
- MAT_WOOD: legno
- MAT_STONE: pietra
- MAT_METAL: metallo
- MAT_LEATHER: cuoio
- MAT_CLAY: argilla
- MAT_GLAS: vetro
munition: istanza delle munizioni per le armi a distanza
spell: indica l'incatesimo della pergamena o runa
range: l'ampiezza dell'arma
description: il nome che comparirà nell'inventario (in genere uguale a name)
text[ITM_TEXT_MAX] e count[ITM_TEXT_MAX]: rispettivamente stringa e valore per la descrizione dell'oggetto, ciò che comparirà quando passerete il cursore sopra l'oggetto nell'inventario; massimo 5 valori
inv_zbias: la lontananza della visuale dell'oggetto nell'inventario
inv_rotx e inv_roty e inv_rotxz: la rotazione sullo specifico asse della visuale dell'oggetto nell'inventario
inv_animate: rotazione dinamica della visuale dell'oggetto nell'inventario (non usata e mai testata)
Spero di essere stato abbastanza dettagliato, se avete domande chiedete pure.
Ciao
Torna all'indice delle lezioni
Edited by Frank-95 - 15/10/2015, 13:50