Dzięki za odpowiedź.
A w Gothicu 2 można było porozmawiać z owcą.. Pytanie jak oni to zrobili. Chyba dali npctype friend? Bo przy orkach takie coś działa, ale ma pewien istotny błąd: taki ork nie chce odpowiadać na ciosy, a sam broni bohatera gdy ktoś go zaatakuje. (to ciekawe, bo Diego nas nie broni na przykład: on nie jest orkiem - nie wiem co to miałoby mieć do rzeczy - ale też ma friend)
Nazbierało się nowych pytań:
-jak można zrobić, by postać (chodzi o naszego dzielnego beziego) miała zablokowaną możliwość otwierania własnego ekwipunku (na jakiś czas albo do odblokowania)?
Wiem, że takie coś jest możliwe. Czar kontrola. Przejmujemy sterowanie nad npc, ale nie nad jego itemami. Później jak czar się skończy i nawet kodami wejdziemy w tego npc to ekwipunek jest zablokowany.
oto skrypt czaru z folderu magic
func int Spell_Logic_Control(var int manaInvested)
{
PrintDebugNpc (PD_MAGIC, "Spell_Logic_Control");
if (!Npc_IsInState(other, ZS_Controlled))
{
PrintDebugNpc (PD_MAGIC, "npc is valid...");
PrintDebugNpc (PD_MAGIC, "manainvested 0...starting ZS_PsiDefense on npc");
if (!Npc_IsInState(other, ZS_PsiDefense))
{
B_FullStop (other);
AI_StartState (other, ZS_PsiDefense,1,"" );
};
if (other.flags != NPC_FLAG_IMMORTAL)
{
PrintDebugNpc (PD_MAGIC, "npc is not immortal, sub mana");
// überschreiten die investierten manapunkte level*4, so ist sein wille gebrochen
if ( manaInvested >= other.level*4 )
{
PrintDebugNpc(PD_MAGIC, "controlled success, starting states");
AI_StartState ( self ,ZS_PC_CONTROLLING ,0,"" );
Npc_SetActiveSpellInfo ( self,1 ); // übernommen
return SPL_SENDCAST;
};
return SPL_NEXTLEVEL;
}
else
{
PrintDebugNpc (PD_MAGIC, "npc is immortal");
return SPL_NEXTLEVEL;
};
return SPL_NEXTLEVEL;
}
else
{
PrintDebugNpc (PD_MAGIC, "npc is not valid...");
// other ist kein npc
return SPL_SENDSTOP;
};
return SPL_DONTINVEST;
};
a oto dwa ZSy (controlled i controlling)
// original spieler
func void ZS_PC_Controlling()
{
PrintDebugNpc (PD_ZS_FRAME, "ZS_PC_Controlling");
Npc_PercEnable ( self, PERC_ASSESSMAGIC , B_AssessMagic );
Npc_PercEnable ( self, PERC_ASSESSDAMAGE , ZS_ReactToDamage );
Npc_PlayAni (self, "T_CONSHOOT_2_CONACTIVE" );
};
func void ZS_PC_Controlling_Loop()
{
PrintDebugNpc (PD_ZS_LOOP, "ZS_PC_Controlling_Loop" );
// Npc_PlayAni (self, "S_CONACTIVE" );
};
func void ZS_PC_Controlling_End()
{
PrintDebugNpc( PD_ZS_FRAME, "ZS_PC_Controlling_End" );
Npc_ClearAIQueue ( self ); // alle AI Befehle entfernen
AI_StandUp ( self ); // normale Ani wieder abspielen
AI_ContinueRoutine ( self );
};
// übernommener nsc, den man dann steuert
// zustand wird von programmlogik beendet
// Befehle, die hier stehen werden ignoriert, da der Spieler entweder nur Tastatur- oder Zustandsgesteuert sein kann
// andere NSCs können aber den Zustand des Spielers abfragen
func void ZS_Controlled()
{
PrintDebugNpc (PD_ZS_FRAME, "ZS_Controlled");
};
func void ZS_Controlled_Loop()
{
PrintDebugNpc (PD_ZS_LOOP, "ZS_Controlled_Loop" );
};
func void ZS_Controlled_End()
{
PrintDebugNpc (PD_ZS_FRAME, "ZS_Controlled_End" );
//-------- zu Boden fallen ! --------
B_FullStop (self);
AI_PlayAni (self, "T_PSI_VICTIM");
AI_Wait (self, 3.5);
//-------- fallgelassene Waffe aufheben ! --------
B_RegainDroppedWeapon (self); // Check ob Waffe/Rüstung herumliegt ist leider vom Stand vor der Ani T_PSI_VICTIM und könnte veraltet sein!!!
B_RegainDroppedArmor (self); // dito
//-------- Gegner behandeln ! --------
Npc_SetTarget (self, hero);
Npc_GetTarget (self);
AI_StartState (self, ZS_AssessEnemy, 1, "");
};
Jest tu coś o blokadzie ekwipunku? Powinno być, a jednak ja nic nie widzę...
a i jeszcze inny problem
B_RegainDroppedWeapon (self); ??? To jest podnoszenie broni czy jak? Nie mam tego w skryptach, mimo iż mam gmdk.
A B_RegainDroppedArmor ?
-jak sprawić, by npc w trakcie dialogu wyjął łuk/kuszę/runę? (trochę głupio by wyglądało, gdyby mag groził bohaterowi swoim małym sztyletem...)
-jest jakaś możliwość usunięcia tego, że postać, która nas okradnie ma dwa razy więcej rudy niż nam zabrała?
-jest jakaś możliwość stworzenia npc regeneracji, gdy zaczyna się nowy dzień, lub wyjdziemy poza zasięg widzenia? (tak jak w Gothic 2)