Nie działająca trucizna 4349 10

O temacie

Autor EdekSumo

Zaczęty 6.03.2011 roku

Wyświetleń 4349

Odpowiedzi 10

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Stworzyłem zatrute strzały i dodałem do assess_damege i niby działa ale jak jakiś npc dostaje strzałą to trucizna nie zabiera mu życia co chwilę oto fragmenty skryptów
if trucizna==true
&& czas_zatrucia!=5
{

other.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - zatrucie;


czas_zatrucia = czas_zatrucia+1;
PrintScreen ("  trucizna on", -2, 81, FONT_Screensmall, 1000);// tym testuje że działa i to jest w tick tocku

};

a teraz z assess_damege
func void equip_bow_ammo (var C_NPC oth, var C_NPC slf)
{

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

var c_item equip_bow;
equip_bow = Npc_GetEquippedrangedWeapon(self);
ready = Npc_GetReadiedWeapon(hero);


if (Npc_HasItems(hero, ItRw_Bow_L_01) == TRUE
&& Hlp_IsItem(ready, ItRw_Bow_L_01) == TRUE)
{

if (slf.flags != NPC_FLAG_IMMORTAL)
{
if ogniste == true

{
equip_bow.damagetype = DAM_fire;
B_MagicHurtNpc (other, self, 30);
Wld_PlayEffect("spellFX_Firestorm_SPREAD", other, self, 0, 0, 0, FALSE );

}
else if zatrute==true
{
trucizna=true;
czas_zatrucia=0;
}
else
{
};

};
}
else
{
equip_bow.damagetype = DAM_point;
};
if (Npc_HasItems(hero, ItRw_Bow_L_01) == TRUE
&& Hlp_IsItem(ready, ItRw_Bow_L_01) == TRUE)
{

};
};
};
i czemu życia mu nie zabiera ?
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
A kiedy i gdzie wywoływany jest ten pierwszy kod? W tick tocku?

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Tak tick tock jest uruchamiany przez startup
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
   var c_item weapon; weapon = Npc_GetReadiedWeapon (other);
    if (weapon.munition == instancjaSTRZAŁY)

ponieważ łuk nie zadaje obrażeń lecz zadaje je jego strzała ;)

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
ale ja to inaczej rozwiązałem bo funkcja się uruchamia (po to ten napis) ale nie ma obrażeń zadawanych przez tick tock
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
to zrób zmienną C_NPC i do niej zapisuj kto to jest other w assess_damege
bo już w tick_tock`u już nie wiadomo kto to jest other

spróbuj dać testowo hero. i czy będzie zabierało naszej postaci

albo sprawdź czy stała(?) zatrucie nie jest równa 0 ;)

Spoiler
dobra koniec ostatni post na tym forum jak nie pomogłem to trudno

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Utwórz zmienną
Cytuj
var c_npc otruty;
W assess_damage w
Cytuj
else if zatrute==true
                {
                trucizna=true;
                czas_zatrucia=0;
                }
dodaj
Cytuj
otruty=slf;
czyli ten fragment ma wyglądać tak
else if zatrute==true
                {
                trucizna=true;
                czas_zatrucia=0;
                otruty=slf;
                }
Na koniec zamiast tego w tick tocku
other.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - zatrucie;
daj
otruty.attribute[ATR_HITPOINTS] = otruty.attribute[ATR_HITPOINTS] - zatrucie;

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Nie działająca trucizna
#7 2011-03-06, 20:43(Ostatnia zmiana: 2011-03-06, 20:49)
Nie prześledziłem dokładnie całego tematu, ale tak z ciekawości: czy system opierający się o pojedyncza zmienną npc lub w ogóle o jakiekolwiek takie zmienne nie będzie ściśle ograniczony? (w tym przypadku do jednej osoby na raz). Chodzi mi o to że kiedy zatruty zostałby kto inny, trucizna na pierwszym przestałaby działać.
Żeby temu zapobiec trzeba by albo zrobić tablicę zawierającą dość elementów aby limit nie był zauważalny w grze (albo pokombinować z tym żeby mechanizm działał na każdym npc indywidualnie).

BTW - może to pytanie jest potwornie głupie, ale w tej chwili nie mam czasu żeby to sprawdzić, a może by pomogło. Otóż, ile trwa pojedyncza pętla zs_attack? Wystarczająco krótko żeby dało się jej użyć zamiast tick-tocka?
Okazji do takich dziwacznych dywagacji jest przy moddigu Gothica więcej niż by się wydawało, innym przykładem może być choćby to kiedy właściwie aktywowane są perceptiony jak PERC_ASSESSPLAYER :D

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis

EdekSumo
Wyspa Khorinis

Nie działająca trucizna
#8 2011-03-06, 23:20(Ostatnia zmiana: 2011-03-07, 00:13)
Z tym otruty=slf; nie działa bo wywala błąd o nie znaną funkcje ;/
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Miało być slf, a nie self.

Cytuj
Żeby temu zapobiec trzeba by albo zrobić tablicę zawierającą dość elementów aby limit nie był zauważalny w grze (albo pokombinować z tym żeby mechanizm działał na każdym npc indywidualnie).
Ja bym spróbował rozszerzyć definicję klasy c_npc.

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Źle tu napisałem bo sprawdzałem i w slf i self i dupa
 


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