Zabójca,arena i takie niby zawody. 8211 34

O temacie

Autor Drake

Zaczęty 11.08.2009 roku

Wyświetleń 8211

Odpowiedzi 34

Drake

Drake

Użytkownicy
posty93
Propsy3
  • Użytkownicy
Jest błąd w linijce w której jest ACTIVE_WEAPON.
 

Mr Prezesinho

Mr Prezesinho

Użytkownicy
posty162
Propsy1
  • Użytkownicy
Bo To pewnie jest napisana zmienna

Wpisz gdzieś wyżej var int ACTIVE_WEAPON
 
89% graczy uważa, że najważniejsza jest grafika, jeśli uważasz, że te sygnatury nie mają sensu wklej to do podpisu.


Drake

Drake

Użytkownicy
posty93
Propsy3
  • Użytkownicy
Hehe teraz to mi wyszedł błąd jakiego jeszcze nie widziałem:

U: PAR: Func does not return an int (line 30)
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Zabójca,arena i takie niby zawody.
#23 2009-08-16, 12:21(Ostatnia zmiana: 2009-08-16, 12:33)
Faktycznie, Rasarus ma rację, zapomniałem wcześniej zadeklarować zmiennej bo wcześniej używałem jej już w swoich skryptach i u mnie od razu była zadeklarowana gdzie indziej. Błąd jaki ci się pokazał polegał pewnie na tym, że zadeklarowałeś zmienną typu int a nie c_item.
Jeszcze raz podaję funkcję morderstwa: var c_item active_weapon;
active_weapon = Npc_GetReadiedWeapon(hero);
if(Hlp_IsItem(active_weapon,sztylet_mordercy)&&!(Npc_CanSeeNpc(self, hero)))
{
Npc_ChangeAttribute(self,ATR_HITPOINTS, - 9999);
PrintScreen ("Zamordowałeś go!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
};
Jeśli dokładnie skopiujesz to co napisałem, MUSI działać. Aha, żeby nie było nieporozumień, instance (kod) obiektu to "sztylet_mordercy" ale nazwa to "sztylet skrytobójcy", zrobiłem tak bo w instance chyba nie można używać polskich znaków. Gdybyś chciał sam grzebać w skrypcie, pamiętaj o tym.

Mr Prezesinho

Mr Prezesinho

Użytkownicy
posty162
Propsy1
  • Użytkownicy
Dlatego instance najlepiej jest pisać w języku angielskim <_<
 
89% graczy uważa, że najważniejsza jest grafika, jeśli uważasz, że te sygnatury nie mają sensu wklej to do podpisu.


Drake

Drake

Użytkownicy
posty93
Propsy3
  • Użytkownicy
Dziękuje wszytkim,a w szczególności Avallachowi.Sztylet śmiga.

W sumie jeśli chodzi o zabójce i arene to są już rozwiązane,gdyby tylko ktoś jescze poradził z zawodami to by było super.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Zabójca,arena i takie niby zawody.
#26 2012-02-08, 21:14(Ostatnia zmiana: 2012-02-08, 21:15)
Po latach napisano do mnie z pytaniem dlaczego skrypt nie działa poprawnie w g2nk. Trochę odkop, ale dodaję na wypadek gdyby podobny problem miało więcej osób które chcą go wykorzystać :D
Odpowiedź jest prosta - w tej części gry wykorzystywany perception jest przeniesiony na inną funkcję. Zamiast do _Work\Data\Scripts\Content\AI\ZS_Human\ZS_ReactToDamage.d funkcjęvar c_item active_weapon;
active_weapon = Npc_GetReadiedWeapon(hero);
if(Hlp_IsItem(active_weapon,sztylet_mordercy)&&!(Npc_CanSeeNpc(self, hero)))
        {
        Npc_ChangeAttribute(self,ATR_HITPOINTS, - 9999);
        PrintScreen ("Zamordowałeś go!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
        };
trzeba wkleić do _Work\data\Scripts\Content\AI\Human\B_Human\B_AssessDamage.d.

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt

diegomez
Labirynt

Zabójca,arena i takie niby zawody.
#27 2012-02-08, 22:25(Ostatnia zmiana: 2012-02-08, 22:25)
To ja jeszcze dodam, że w pliku B_AssessDamage.d
skrypt podany przez Avallacha należy umieścić pod liniką

B_Attack (self, other, AR_ReactToDamage, 0);
I, żeby nie było błędów w wyglądzie broni trzeba jej zmienić visual na jakąś broń z G2NK np.

 visual   = "Itmw_005_1h_dagger_01.3DS";
...to visual zwykłego sztyleta.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To ja jeszcze dodam, że w pliku B_AssessDamage.d
skrypt podany przez Avallacha należy umieścić pod liniką

B_Attack (self, other, AR_ReactToDamage, 0);
Eee... Nie. Może być właściwie gdziekolwiek gdzie zostanie poprawnie wykonane, ja zaleciłem bezpośrednio NAD
var C_NPC Quarho; Quarho = Hlp_GetNpc (NONE_ADDON_111_Quarhodron);
var C_NPC Rhadem; Rhadem = Hlp_GetNpc (NONE_ADDON_112_Rhademes);
i otrzymałem potwierdzenie że działa.

HerrKlebstoff

HerrKlebstoff

Użytkownicy
posty165
Propsy48
Profesjabrak
  • Użytkownicy
Wszystko fajnie, jednak ma to swoją słabą stronę - za ubicie w ten sposób przeciwnika nie nalicza doświadczenia...
PS: Dałoby się zrobić coś podobnego, ale nie żeby zabijało przeciwnika, tylko ogłuszało?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Zabójca,arena i takie niby zawody.
#30 2012-02-12, 16:35(Ostatnia zmiana: 2012-02-12, 16:39)
Nie jestem pewien dlaczego nie daje doświadczenia, ale można uwzględnić je samodzielnie dodając:
if ( Npc_IsPlayer(other) || (other.aivar[AIV_PARTYMEMBER]==TRUE) )
&& (self.aivar[AIV_VictoryXPGiven] == FALSE)
{
B_GivePlayerXP (self.level * XP_PER_VICTORY);

self.aivar[AIV_VictoryXPGiven] = TRUE;
};
Właściwie to nie ma w Gothicu "zwyczajnego" ogłuszenia prowadzącego do nieprzytomności bez utraty punktów życia, ale możnaby spróbować coś takiego dodać:
Npc_ClearAIQueue (self);
AI_PlayAniBS (self, "T_STAND_2_LIGHTNING_VICTIM", BS_UNCONSCIOUS);  
AI_StartState (self, ZS_Uncoscious, 0, "");
Animkę można wymienić na inną gdyby ta nie pasowała.

HerrKlebstoff

HerrKlebstoff

Użytkownicy
posty165
Propsy48
Profesjabrak
  • Użytkownicy
Jeśli chodzi o to doświadczenie... Kiedy dodałem to do pliku, wyskoczył mi problem "missing", mianowicie nawias. Nie wiem tylko, czy ułożyłem wszystko w dobrej kolejności, tak to jakoś wygląda...

var c_item active_weapon;
active_weapon = Npc_GetReadiedWeapon(hero);
if(Hlp_IsItem(active_weapon,Sztylet_Mordercy)
||(Hlp_IsItem(active_weapon,SztyletAsasyna2)
if ( Npc_IsPlayer(other) || (other.aivar[AIV_PARTYMEMBER]==TRUE) )//To tutaj. Kiedy próbowałem na początku zamiast "if" wstawic "&&", odczytywało AIV_PARTYMEMBER jako nieistniejąca zmienna...
        && (self.aivar[AIV_VictoryXPGiven] == FALSE)
        {
                B_GivePlayerXP (self.level * XP_PER_VICTORY);
               
                self.aivar[AIV_VictoryXPGiven] = TRUE;
        };
&&!(Npc_CanSeeNpc(self, hero))))
        {
        Npc_ChangeAttribute(self,ATR_HITPOINTS, - 99999);
        PrintScreen ("Zabiłeś go!", -1,-1,"FONT_OLD_20_WHITE.TGA",1);
        };

A co do ogłuszenia... Jak wyżej. To co podałeś, wkleiłem na końcu. Czyli tak:

var c_item active_weapon;
active_weapon = Npc_GetReadiedWeapon(hero);
if(Hlp_IsItem(active_weapon,Zelazna_palka)
||(Hlp_IsItem(active_weapon,Ciezka_Palka)
&&!(Npc_CanSeeNpc(self, hero))))
        {
        Npc_ChangeAttribute(self,ATR_HITPOINTS, - 9999);
        PrintScreen ("Ogłuszyłeś go!", -1,-1,"FONT_OLD_20_WHITE.TGA",1);
Npc_ClearAIQueue (self);
AI_PlayAniBS (self, "T_STAND_2_LIGHTNING_VICTIM", BS_UNCONSCIOUS);  
AI_StartState (self, ZS_Uncoscious, 0, "");
        };
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Zabójca,arena i takie niby zawody.
#32 2012-02-12, 21:11(Ostatnia zmiana: 2012-02-12, 21:20)
Źle. O ile nic nie pokręciłem w składni warunku (od daaawna nic nie pisałem w Daedalusie), to powinno być tak:
var c_item active_weapon; active_weapon = Npc_GetReadiedWeapon(other);
if((Hlp_IsItem(active_weapon,Zelazna_palka) || Hlp_IsItem(active_weapon,Ciezka_Palka)) && !Npc_CanSeeNpc(self, other))
{
if (Npc_IsPlayer(other) || (other.aivar[AIV_PARTYMEMBER]==TRUE)) && (self.aivar[AIV_VictoryXPGiven] == FALSE)
{
B_GivePlayerXP (self.level * XP_PER_VICTORY);
self.aivar[AIV_VictoryXPGiven] = TRUE;
};
Npc_ClearAIQueue (self);
AI_PlayAniBS (self, "T_STAND_2_LIGHTNING_VICTIM", BS_UNCONSCIOUS);  
AI_StartState (self, ZS_Uncoscious, 0, "");
};
Ten skrypt jest przy okazji poprawiony, teraz mogą z tej broni korzystać także npc lub członkowie drużyny. Będą mieli jednak wyjątkowego farta jeśli uda im się akurat przypadkiem zajść niepostrzeżenie kogokolwiek i go zaatakować :D

HerrKlebstoff

HerrKlebstoff

Użytkownicy
posty165
Propsy48
Profesjabrak
  • Użytkownicy
Cytuj
Ten skrypt jest przy okazji poprawiony, teraz mogą z tej broni korzystać także npc lub członkowie drużyny
O - to się przyda.:-)

Ale... Wygląda to tak:

var c_item active_weapon; active_weapon = Npc_GetReadiedWeapon(other);
if((Hlp_IsItem(active_weapon,Zelazna_palka) || Hlp_IsItem(active_weapon,Ciezka_Palka)) && !Npc_CanSeeNpc(self, other))
        {
        if (Npc_IsPlayer(other) || (other.aivar[AIV_PARTYMEMBER]==TRUE)) && (self.aivar[AIV_VictoryXPGiven] == FALSE) //AIV_VictoryXPGiven - "Nieistniejąca funkcja".
                {
                B_GivePlayerXP (self.level * XP_PER_VICTORY);
                self.aivar[AIV_VictoryXPGiven] = TRUE;
                };
        Npc_ClearAIQueue (self);
        AI_PlayAniBS (self, "T_STAND_2_LIGHTNING_VICTIM", BS_UNCONSCIOUS);  
        AI_StartState (self, ZS_Uncoscious, 0, "");
        };
&&!(Npc_CanSeeNpc(self, hero))))
        {
        Npc_ChangeAttribute(self,ATR_HITPOINTS, - 99999);
        PrintScreen ("Zabiłeś go!", -1,-1,"FONT_OLD_20_WHITE.TGA",1);
        };

Chwila, a czy funkcje nie siedzą w Story Globals...?  :|

@down: No to prawda, niezbyt jarzę skrypty. :)
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Zabójca,arena i takie niby zawody.
#34 2012-02-13, 19:05(Ostatnia zmiana: 2012-02-13, 19:36)
Człowieku, co ty robisz z tym skryptem? To co ci dałem jest gotowe, nic tam nie dodawaj (bo dodajesz źle, wywali ci błędy)! Widzę że totalnie nie masz pojęcia o skryptach, więc nie kombinuj tylko zrób dokładnie co napisałem, znam się na tym :D

Po prostu wklej do funkcji:
G1: _Work\Data\Scripts\Content\AI\ZS_Human\ZS_ReactToDamage.d
G2: _Work\data\Scripts\Content\AI\Human\B_Human\B_AssessDamage.d.
Ważne tylko żeby było to faktycznie wewnątrz funkcji (po func cośtam (cośtamcośtam) {) i najlepiej na jej początku, poza jakimikolwiek warunkami czy returnami.


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