RPG Zone, Italian Forum & Community for role playing video games - ex Gothic Zone

[Tutorial] Introduzione allo scripting, Lezione 3

« Older   Newer »
  Share  
view post Posted on 3/6/2017, 20:19     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


Avevo provato a registrarmi si WoG, ma non ci sono proprio riuscito a creare un nuovo topic. Cmq ecco lo script del girarrosto:
CITAZIONE
func void ZS_RoastScavenger()
{
PrintDebugNpc(PD_TA_FRAME,"ZS_RoastScavenger");
B_SetPerception(self);
if(!C_BodyStateContains(self,BS_MOBINTERACT))
{
AI_SetWalkMode(self,NPC_WALK);
B_StartUseMob(self,"BARBQ");
};
};

func void ZS_RoastScavenger_Loop()
{
var int randomizer;
PrintDebugNpc(PD_TA_LOOP,"ZS_RoastScavenger_Loop");
randomizer = Hlp_Random(20);
if(Npc_GetStateTime(self) >= (100 + randomizer))
{
B_InterruptMob("BARBQ");
};
AI_Wait(self,1);
};

func void ZS_RoastScavenger_End()
{
PrintDebugNpc(PD_TA_FRAME,"ZS_RoastScavenger_End");
AI_UseMob(self,"BARBQ",-1);
};

Forse lo shemename è quello presente in AI_UseMob(self,"BARBQ",-1); ...Cos'è precisamente quello che si mette nelle virgolette? Da dove si prende?
 
Top
view post Posted on 4/6/2017, 09:31     +1   -1

Gothic Modder

Group:
Moderatore
Posts:
1,391
Rpg Point:
+83
Location:
L'Urbe!

Status:


Eh te l'ho detto, dovrebbe essere la parte prima del primo underscore "BED_aaa" -> "BED", "BARBQ_aaa" -> "BARBQ"

Comunque devi entrare sul wog tedesco, quello inglese è chiuso
 
Top
view post Posted on 4/6/2017, 14:21     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


Ah capito. Cmq ho risolto entrambi i problemi. Quello del letto, come ho letto, si tratta di un bug presente anche nella versione normale di gothic e si genera casualmente. Ho modificato il file ZS_Sleep.d e ora funziona. Invece, per quanto riguarda il girarrosto, aveva qualche problema il file BARDQ_SCAV.MDS anche se lo avevo preso direttamente dal vdf e quindi originale. Praticamente mancava l'omino nella mesh chiamato ZS_POS0. Ho dovuto prendere questo file dall'unofficial patch sempre per gothic 1 e ora funziona tutto alla perfezione. Grazie per il tempo Frank.

Vorrei farti una domanda: ma come si fa ad avviare una funzione allo scoccare di un nuovo giorno? Cioè inizia il giotno 2 e viene chiamata la funzione. E poi, come si fa a far funzionare sempre una funzione in background in loop fino al verificarsi di un'azione? Ad esempio come il costrutto while

Edit:
Ho trovato il motivo per cui non parte l'animazione alla bacheca...praticamente non riesce a trovare le animazioni, tipo t_board_stand_2_s0. Quindi come risolvo? Devo duplicare e rinominare lanimazioni delle braccia conserte?

Edited by Mr.Slash - 4/6/2017, 15:53
 
Top
view post Posted on 4/6/2017, 19:46     +1   -1

Gothic Modder

Group:
Moderatore
Posts:
1,391
Rpg Point:
+83
Location:
L'Urbe!

Status:


Figurati ;)

Per la prima cosa devi usare i pacchetti ikarus e lego (non mi ricordo se già li stavi usando). In particolare le funzioni in FrameFunctions sono quelle che cerchi. Per queste serve lego e dovrebbero averlo portato anche su g2 anche se non l'ho mai testo e su wog è stato fatto praticamente solo su g2. Praticamente sono funzioni che possono essere chiamate ogni tot millisecondi, ogni frame, infinite volte o per un numero di volte. link

Per il secondo punto è strano visto che l'hai appena aggiunte. Avevi eliminato il file humans.mdh no? Ora ce ne sta uno nuovo con la data di creazione più recente? Al file anims.vdf (o come si chiama) hai cambiato l'estensione?
 
Top
view post Posted on 4/6/2017, 20:54     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


Si, si e si.

Edit:
Ho notato che, prendendo per esempio una sedia chiamata BENCH_1_OC, nella cartella _compiled ha 3 file rispetto anzichè 1 come la bacheca. Questi file hanno l'estensione MDH,MDL e MDM. Invece la bacheca ha solo il file MDL. Come mai? Eppure anche la sedia è come la bacheca, cioè non ha un'armatura come per esempio il girarrosto. Forse ci siamo dimenticati di fare qualcosa?

Edited by Mr.Slash - 4/6/2017, 22:11
 
Top
view post Posted on 4/6/2017, 23:44     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


Frank, sono riuscito a risolvere. Praticamente per sbaglio non avevo notato le parentesi graffe alla fine del file mds e quindi avevo inserito le righe per le animazioni fuori. Ora le ho inserite dentro e aggiustato qualcosina perche mi crashava il gioco e ora va alla grande. Grazie mille di nuovo frank.

Se ti interessano le modifiche che ho fatto alle animazioni, ti metto in citazione il codice...
CITAZIONE
ani ("t_Board_Stand_2_S0" 1 "s_Board_S0" 0.1 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 1 1)
ani ("s_Board_S0" 1 "s_Board_S0" 0.0 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 1 1)
aniAlias ("t_Board_S0_2_Stand" 1 "" 0.0 0.1 M. "t_Board_Stand_2_S0" R)

ani ("t_Board_S0_2_S1" 1 "s_Board_S1" 0.0 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 1 24 FPS:10)
ani ("s_Board_S1" 1 "s_Board_S1" 0.0 0.0 M. "Hum_Guard_Ambient_B_Jue01.asc" F 25 74 FPS:5)
aniAlias ("t_Board_S1_2_S0" 1 "s_Board_S0" 0.0 0.0 M. "t_Board_S0_2_S1" R)

Edit:
Un'altra domanda frank, io vorrei passare come parametro ad una funzione il nome dell'istanza di un'arma (ad esempio itmw_1h_hatchet_01) e quindi uso il comando Hlp_GetInstanceID(itmw_1h_hatchet_01). Quanto inserisco la variabile contenete questo ID nel comando CreateInvItem, mi compare l'errore "invalid item (no name, no instance) put into inventory. Deleting it", però con la funzione Npc_RemoveInvItems funziona. Cosa sto sbagliando?

EditEdit: Ho fatto dei test e ho scoperto che funziona se ho gia nell'inventario quell'arma.

Edited by Mr.Slash - 5/6/2017, 12:46
 
Top
view post Posted on 5/6/2017, 18:36     +1   -1

Gothic Modder

Group:
Moderatore
Posts:
1,391
Rpg Point:
+83
Location:
L'Urbe!

Status:


Va bene hai fatto tutto da solo XD

Comunque ecco gli errori di digitatura sono i più frequenti... Occhio ;)
 
Top
view post Posted on 6/6/2017, 16:21     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


Il problema dell'errore non l'ho risolto, ho solo trovato il modo per evitarlo. Cmq, vorrei creare delle pozioni temporanee come per esempio aumentare la forza per 2 minuti, ma il problema è che non trovo una funzione che mi permetta di mettere in pausa una funzione...per esempio come AI_Wait. Come posso fare?
 
Top
view post Posted on 11/6/2017, 17:02     +1   -1

Gothic Modder

Group:
Moderatore
Posts:
1,391
Rpg Point:
+83
Location:
L'Urbe!

Status:


Che cosa dovresti mettere in pausa?
 
Top
view post Posted on 11/6/2017, 17:46     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


Cioè che, per esempio, applichi +10 di forza e metti in pausa la funzione per 2 minuti. Quando scadono questi 2 minuti vengono sottratti i 10 pt forza assegnati prima. Praticamente vorrei creare delle pozioni temporanee
 
Top
view post Posted on 11/6/2017, 19:38     +1   -1

Gothic Modder

Group:
Moderatore
Posts:
1,391
Rpg Point:
+83
Location:
L'Urbe!

Status:


Ho capito che vuoi fare ma non ho capito che c'entra la pausa XD

Comunque quello che vuoi sta nel pacchetto LeGo, si chiamano FrameFunctions. Praticamente permettono di chiamare funzioni con al massimo un parametro (intero) dopo tot tempo per x volte.
Quindi tu aumenteresti la forza la prima volta, poi chiami una framefunction che chiamerà la funzione per togliere gli attributi dopo tot tempo
 
Top
25 replies since 16/2/2015, 20:54   331 views
  Share