[GIINK] ZS_MAGICFREEZE i premie do ochrony pancerza. 3116 2

O temacie

Autor Elligon

Zaczęty 5.11.2017 roku

Wyświetleń 3116

Odpowiedzi 2

Elligon

Elligon

Użytkownicy
posty38
Propsy18
Profesjabrak
  • Zbanowany
Trafienie kogoś zaklęciem Blok/Fala Lodu więzi większość pacjentów w soplu. Wymyśliłem sobie, że trudniej kogoś uszkodzić w środku bryły lodu, co miałoby znaleźć odzwierciedlenie w mechanice gry poprzez zwiększenie każdej ochrony pancerza (oprócz tej od ognia) o 25 punktów.


func void B_RestartFreeze()
{
if((Npc_GetLastHitSpellID(self) == SPL_IceCube) || (Npc_GetLastHitSpellID(self) == SPL_IceWave))
{
self.protection[PROT_EDGE] += 25;
self.protection[PROT_BLUNT] += 25;
self.protection[PROT_POINT] += 25;
self.protection[PROT_MAGIC] += 25;
Npc_SetStateTime(self,0);
};
};

func void B_StopMagicFreeze()
{
Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagic);
Npc_ClearAIQueue(self);
AI_Standup(self);
if(self.guild < GIL_SEPERATOR_HUM)
{
B_AssessDamage();
}
else
{
Npc_SetTempAttitude(self,ATT_HOSTILE);
};
};

func int ZS_MagicFreeze()
{
Npc_PercEnable(self,PERC_ASSESSMAGIC,B_RestartFreeze);
Npc_StopAni(self,"S_FIRE_VICTIM");
if(!C_BodyStateContains(self,BS_UNCONSCIOUS))
{
AI_PlayAniBS(self,"T_STAND_2_FREEZE_VICTIM",BS_UNCONSCIOUS);
};
self.aivar[AIV_FreezeStateTime] = 0;
};

func int ZS_MagicFreeze_Loop()
{
if(Npc_GetStateTime(self) > SPL_TIME_FREEZE)
{
B_StopMagicFreeze();
return LOOP_END;
};
if(Npc_GetStateTime(self) != self.aivar[AIV_FreezeStateTime])
{
self.aivar[AIV_FreezeStateTime] = Npc_GetStateTime(self);
if(self.attribute[ATR_HITPOINTS] > (self.attribute[ATR_HITPOINTS] - SPL_FREEZE_DAMAGE))
{
if((self.guild == GIL_FIREGOLEM) || (self.aivar[AIV_MM_REAL_ID] == ID_FIREWARAN) || (self.aivar[AIV_MM_REAL_ID] == ID_DRAGON_FIRE))
{
B_MagicHurtNpc(other,self,SPL_FREEZE_DAMAGE * 2);
return LOOP_CONTINUE;
};
if((self.guild == GIL_ICEGOLEM) || (self.aivar[AIV_MM_REAL_ID] == ID_DRAGON_ICE))
{
B_MagicHurtNpc(other,self,SPL_FREEZE_DAMAGE / 2);
return LOOP_CONTINUE;
};
B_MagicHurtNpc(other,self,SPL_FREEZE_DAMAGE);
};
};
return LOOP_CONTINUE;
};

func void ZS_MagicFreeze_End()
{
self.protection[PROT_EDGE] -= 25;
self.protection[PROT_BLUNT] -= 25;
self.protection[PROT_POINT] -= 25;
self.protection[PROT_MAGIC] -= 25;
};




Jak widać, premie startują z początkiem stanu, a znikają z jego końcem. To znaczy - powinny, gdyż w praktyce pojawiają się z początkiem, ale nie znikają z jego końcem, stając się de facto permanentnymi, jak wykazały testy w terenie.

GothicStarter nic nie krzyczał podczas reparsowania skryptów, a GothicSourcer v3.15 też nie wyświetlał żadnych ostrzeżeń (nawet że powinna być zwrócona jakaś wartość [return FALSE/TRUE]).

Czy ktoś wie co jest nie tak?
 

Splash

Splash

Moderator
posty4212
Propsy3414
ProfesjaNierób
  • Moderator
Odejmowanie zbroi dodaj do funkcji B_StopMagicFreeze.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Elligon

Elligon

Użytkownicy
posty38
Propsy18
Profesjabrak
  • Zbanowany
Odejmowanie zbroi dodaj do funkcji B_StopMagicFreeze.

No i działa.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry