Trucizna nie zatruwa przeciwnika 3647 8

O temacie

Autor Splash

Zaczęty 29.07.2013 roku

Wyświetleń 3647

Odpowiedzi 8

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator

Splash
Moderator

Trucizna nie zatruwa przeciwnika
2013-07-29, 16:13(Ostatnia zmiana: 2013-07-29, 16:30)
Napisałem skrypt zatrutej strzały. Sam skrypt działa prawidłowo, ale tylko wtedy gdy w skrypcie odbierania dam hero. Skrypt jest wstawiony w triggerze i tu jest cały problem. Jak każdy wie trigger nie potrafi wybrać właściwego npc jeśli ustawię na self lub other. I teraz pora na oczywiste pytanie. Co trzeba zrobić aby po trafieniu strzałą przeciwnik został zatruty. Wpisanie instancji każdego npc nie wchodzi w grę  :lol2:  

Skrypty :

Trigger :
func void Poison_Func () {

if (poisoned == true)
{
poisontime = poisontime +1;
other.attribute[atr_hitpoints] -= 10;
};
if (poisontime == 10)
&& (poisoned == true)
{
poisontime = 0;
poisoned = false;
};
};

Trafienie strzałą :
func void B_PoisonMunition (var C_NPC oth, var C_NPC slf)
{

if (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
{
var C_ITEM ready;
ready = Npc_GetReadiedWeapon(hero);

if (Npc_HasItems(hero, ItRw_Bow_L_01) == TRUE && Hlp_IsItem(ready, ItRw_Bow_L_01) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_L_02) == TRUE && Hlp_IsItem(ready, ItRw_Bow_L_02) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_L_03) == TRUE && Hlp_IsItem(ready, ItRw_Bow_L_03) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_L_04) == TRUE && Hlp_IsItem(ready, ItRw_Bow_L_01) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_m_01) == TRUE && Hlp_IsItem(ready, ItRw_Bow_m_01) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_m_02) == TRUE && Hlp_IsItem(ready, ItRw_Bow_m_02) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_m_03) == TRUE && Hlp_IsItem(ready, ItRw_Bow_m_03) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_m_04) == TRUE && Hlp_IsItem(ready, ItRw_Bow_m_01) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_h_01) == TRUE && Hlp_IsItem(ready, ItRw_Bow_h_01) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_h_02) == TRUE && Hlp_IsItem(ready, ItRw_Bow_h_02) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_h_03) == TRUE && Hlp_IsItem(ready, ItRw_Bow_h_03) == TRUE)
|| (Npc_HasItems(hero, ItRw_Bow_h_04) == TRUE && Hlp_IsItem(ready, ItRw_Bow_h_01) == TRUE)
|| (Npc_HasItems(hero, ItRw_sld_bow) == TRUE && Hlp_IsItem(ready, ItRw_sld_bow) == TRUE)
|| (Npc_HasItems(hero, deathbringer) == TRUE && Hlp_IsItem(ready, deathbringer) == TRUE)
|| (Npc_HasItems(hero, fearbow) == TRUE && Hlp_IsItem(ready, fearbow) == TRUE)
|| (Npc_HasItems(hero, bow_arabic) == TRUE && Hlp_IsItem(ready, bow_arabic) == TRUE)
&& ((poisonarrow == true) || (poisonbolt == true))
{
poisoned = true;
poisontime = 0;
};
};
};

Edit :
Od razu mówię, że gdy wpiszę do funkcji trafienia funkcję trucizny odbierze hp tylko raz przy trafieniu.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

kaczka

kaczka

RaveN Studio
Definitely not kaczka!
posty2280
Propsy2392
NagrodyV
ProfesjaLvl designer
  • RaveN Studio
  • Definitely not kaczka!
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Trucizna nie zatruwa przeciwnika
#2 2013-07-29, 17:02(Ostatnia zmiana: 2013-07-29, 17:06)
Co ty tu robisz to ja nie wiem xD
Jeśli chcesz to robić triggerem, to pierwsze rozwiązanie które mi przychodzi do głowy to tablica zawierająca zatrutych npc. Z tym że w daedalusie nie można iterować po indeksach tablicy, więc musiałbyś zrobić naprawdę długaśne ciągi ifów (zależnie od tego ilu max npc chcesz zatruwać na raz). Przykładowo dla 10 (w miejsce ... wstaw brakujące linijki):

var int zatruciNpc [10];

func void Zatruj (var int npcId) //wywołujesz przez perc_assessdamage
{
    if (zatruciNpc[0] == 0) { zatruciNpc[0] = npcId; return; };
    ...
    if (zatruciNpc[9] == 0) { zatruciNpc[9] = npcId; return; };
};

func void Update () // wywołujesz przez triggera z onFireTick
{
    if (zatruciNpc[0] != 0) { EfektTrucizny(Hlp_GetNpc(zatruciNpc[0])); };
    ...
    if (zatruciNpc[9] != 0) { EfektTrucizny(Hlp_GetNpc(zatruciNpc[9])); };
};

func void EfektTrucizny (var c_npc npc)
{
//co tam tylko chcesz
};


Jakbyś korzystał z Ikarusa, można by to zrobić pętlą.

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator

Splash
Moderator

Trucizna nie zatruwa przeciwnika
#3 2013-07-29, 17:14(Ostatnia zmiana: 2013-07-29, 17:17)
Kaczka, czytałem ten temat i lekko nie kumałem co tam napisano, więc napisałem po swojemu skrypt.

Avallach, korzystam z Ikarusa, ale moje umiejętności korzystania z Ikarusa są bardzo małe i takiego skryptu raczej nie potrafiłbym napisać, więc sobie odpuszczę. Pokombinuję i zobaczę co z tego wyjdzie  :D . Co z tego wyjdzie, dam znać dopiero wieczorem, bo muszę spadać.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Przepraszam za posta pod postem  :lol:  

Jest problem. Podczas reparsowania skryptów, Gothic wywala błąd "expected ')' line 8". Czyli wymaga zamkniętego nawiasu w linijce
   if (zatruciNpc[0] != 0) { EfektTrucizny(Hlp_GetNpc(zatruciNpc[0])); };Jednak nie wiem o co mu chodzi. Próbowałem wstawić w wiele miejsc nawias, ale on cały czas pokazuje ten sam błąd w tej samej linijce.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie


Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Zrobiłem tak jak powiedziałeś i już nie wywala. Teraz zostaje kwestia Triggera z OnFireTick. Czy ta funkcja znajduje się w TriggerScript?
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie


Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Czyli trigger, którego użyłem wcześniej  :D
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie


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