napisany skrypt -daje PN po zabiciu 2975 7

O temacie

Autor zmajcek

Zaczęty 22.05.2014 roku

Wyświetleń 2975

Odpowiedzi 7

zmajcek

zmajcek

Użytkownicy
posty49
Propsy99
Profesjabrak
  • Użytkownicy

Wzorując się na misji Isgarotha stworzyłem skrypt w którym po zabiciu potwora (stworzonego przeze mnie) dostaje Punkty nauki

FUNC Void punkty ()
{
piesel = Hlp_GetNpc (szczeniak);

if (Npc_IsDead (piesel))
{


hero.LP = (hero.LP + 5);
PrintScreen  ("+ 5 pkt nauki!", -1,-1,FONT_Screen,3);
Snd_Play ("LEVELUP");
};

};

Nowy potwór działa, wpisałem też do pliku NPC_Globals
   piesel          = Hlp_GetNpc (Szczeniak);
kompilator nie wywala błedów ale skrypt nie działa?
Umieszczałem go w różnych miejscach np ZS_Dead i w innych plikach ale nie działa. Nie mam już pomysłu. Zrobiłem gdzieś błąd?

Również druga sprawa:

Czy mogę do skryptu broni dodać pod efektem graficznym (Wld_PlayEffect) np takie coś dać?:
  Npc_ChangeAttribute (self,ATR_HITPOINTS, +SPL_Heal_LightHeal);
To jest z run leczenia
I tu również błędów nie wywala a niedziała.
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Najlepiej w ZS_DEAD.D porównaj instance. Np.
Cytuj
var C_Npc piesel; piesel =... dalejsz wiesz co
IF (Hlp_GetInstanceID(Tu wpisz zadeklarowaną zmienną C_Npc) == Hlp_GetInstanceID(self))
{
      hero.lp += 5;
      PrintScreen  ("+ 5 pkt nauki!", -1,-1,FONT_Screen,3);
      Snd_Play ("LEVELUP");
};
Co do drugiej sprawy to możesz, ale można również tak:
self.attribute[ATR_HITPOINTS] += SPL_Heal_LightHeal

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Cytuj
Umieszczałem go w różnych miejscach np ZS_Dead i w innych plikach ale nie działa
Umieszczenie skryptu w pliku (np zs_dead.d) niczego nie robi. Dopóki nie wywołasz swojej funkcji... nie będzie ona wywołana. Wywołaj ją z jakiejś funkcji która już jest wywoływana (np funkcji info dialogu czy funkcji zs_dead - ale wtedy trzeba by ją napisać tak jak doradził chicken). Musisz odróżniać funkcję (np "zs_dead") od pliku w którym jest ("zs_dead.d").

zmajcek

zmajcek

Użytkownicy
posty49
Propsy99
Profesjabrak
  • Użytkownicy
Noo:D udało mi się :ok:

Faktycznie Avallach, sam się nawet rano zastanawiałem że chyba nic nie wywołuje tej funkcji:)

Dzięki Kurczak, poprawiłem skrypt i działa tylko musiałem obrócić te instancje

poprawny kod (jakby ktoś nowy kiedyś potrzebował):
 
Spoiler

W ZS_Dead dopisać do funkcji:
Cytuj
if Hlp_GetInstanceID (self) == Hlp_GetInstanceID (piesel)
   {
      hero.lp += 5;
      PrintScreen  ("+ 5 pkt nauki!", -1,-1,FONT_Screen,3);
      Snd_Play ("LEVELUP");
   };
Do tej pory mi nie działało bo moba wywoływałem kodem a on musi być już wcześniej umieszczony w startupie (2 dni mi to zajeło:D)
Wld_InsertNpc (Szczeniak, "NW_XARDAS_TOWER_VIEW_01");
No i w NPC_Globals dopisalem
 var C_NPC piesel;
oraz niżej
piesel          = Hlp_GetNpc (Szczeniak);

 

A co do drugiej sprawy z tym leczeniem:

self.attribute[ATR_HITPOINTS] += SPL_Heal_LightHeal;To nie chce mi to ruszyć. Broń działa dopisuje to pod efektem animacji wld i nic :/
Też nie wiem czemu, będę jeszcze kombinował, jakby ktoś miał jakiś pomysł to mile widziany :)
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Pokaz caly skrypt, w ktorym chcesz leczyc.

zmajcek

zmajcek

Użytkownicy
posty49
Propsy99
Profesjabrak
  • Użytkownicy
Np takie coś:

Problem w tym że leczy przeciwnika a nie mnie

A tak przy okazji nie zabardzo rozumiem co daje (w teorii) to porównywanie instancji mojego npca i przeciwnika.
I jakim cudem sprawdza to czy on nie żyje.


A tu skrypt tego miecza func void B_Spanie (var C_NPC oth, var C_NPC slf)
{

if (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
{
var C_ITEM ready;
var int randomdmg;
var int procent_trafienia;
var int obrazenia;

ready = Npc_GetReadiedWeapon(hero);
randomdmg = Hlp_Random (80);
procent_trafienia = 25;
obrazenia = 0;

if (Npc_HasItems(hero, ItMw_Addon_untamed) == TRUE && Hlp_IsItem(ready, ItMw_Addon_untamed) == TRUE)
&& (randomdmg <= procent_trafienia)
{
if (slf.flags != NPC_FLAG_IMMORTAL)
{
Npc_ClearAIQueue(slf);
Wld_PlayEffect("spellFX_PalHeal", slf, slf, 1, 0, 0, FALSE );

self.attribute[ATR_HITPOINTS] += SPL_Heal_LightHeal;
};

};
};
};
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Zmień
self.attribute[ATR_HITPOINTS] += SPL_Heal_LightHeal;na:
1. Jeśli chcesz żeby leczyło wroga:
slf.attribute[ATR_HITPOINTS] += SPL_Heal_LightHeal;
2. Jeśli chcesz, żeby leczyło osobę noszącą broń:
oth.attribute[ATR_HITPOINTS] += SPL_Heal_LightHeal;

zmajcek

zmajcek

Użytkownicy
posty49
Propsy99
Profesjabrak
  • Użytkownicy
Dzięki wielke, wszystko działa :ok:
 


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