liczenie zabójstw 4307 11

O temacie

Autor Markool

Zaczęty 26.05.2012 roku

Wyświetleń 4307

Odpowiedzi 11

Markool

Markool

Użytkownicy
posty39
Propsy1
  • Użytkownicy
Witam potrzebuję fukcji dzięki której będzie liczyć zabójstwa przyzywanego potwora czyli w momencie jak zada śmietelny cios będzie dodawać 1 do zmiennej i gdzie ją umieścić(pewnie w np mst_scavenger gdzie jest owy potwór zadeklarowany ale pytam w razie czego) albo inaczej jak zrobić by temu potworowi normalnie naliczało doświadczenie jak herosowi, oczywiście te doświadczenie się nie resetowało po zabiciu go, no i jak zrobić by w jakimś dokumencie wyświetlało zmienne, dobra na razie tyle:)
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Zmienna może być jakakolwiek, najlepiej wolny aivar, to każdy "gatunek" będzie miał osobny licznik. W zs_dead inkrementuj ją jeśli other to właśnie przyzwany potwór. Do wyświetlenia tej zmiennej użyj normalnych funkcji pisania w dokumencie (bodajże PrintDoc) i IntToString. Żeby potwór dostawał doświadczenie, w tym samym warunku dodaj other.exp += xp_cośtam (ta sama zmienna która określa ilość którą dostaje hero). Nie musisz.nic robić żeby się nie resetowało, bo każdy przyzwany stwór tego samego rodzaju to po prostu kolejna instancja w świecie tego samego obiektu c_npc.  Za to nie będzie się levelował, to już troszkę bardziej złożone, a piszę z telefonu.

Markool

Markool

Użytkownicy
posty39
Propsy1
  • Użytkownicy
a więc co tu dokładnie w pliku wpisać by liczyło zabójstwa?
func void ZS_Dead ()
{
// ------ aivars resetten ------
self.aivar[AIV_RANSACKED] = FALSE;
self.aivar[AIV_PARTYMEMBER] = FALSE;

B_StopLookAt (self);
AI_StopPointAt (self);

// ------ XP ------
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;
};


// ------ Sumpfdrohne -------
if (self.aivar[AIV_MM_REAL_ID] == ID_SWAMPDRONE)
{
if (Npc_GetDistToNpc(self, other) < 300)
{
other.attribute[ATR_HITPOINTS] -= 50;
//Npc_ChangeAttribute(other, ATR_HITPOINTS, -50);
};

zrobiłem coś takiego ale nie działa, a co do aivarów to jaki mógły być i jak zadeklarowany jeszcze się w nie tak nie zagłębiałem ale też by się przydało do innych potworków
if      (Npc_IsDead  (self))
&&(other == SummonedScavenger)
{
exp_Scavenger += 1;
};

A co do tej zmiennej wyświetlaej w dokumencie to działa z jedną wadą że po każdym włączeniu dokumentu cyfra piszę się obok a nie ją zastępuje np otworzę 5 razy zrzędu a zabić jest zero to coś takiego piszę 00000 a po zabiciu jednego po 6 sprawdzeniu 000001
var string carryx;carryx = IntToString (carry);
var string carren ;
carren = ConcatStrings(carren, carryx);

Doc_PrintLines ( nDocID,  0, carren);
a co do zdobywania doświadczenia to też coś zrobiłem
w pliku b_giveplayerxp
func void B_GivePlayerXP_scavenger (var int add_xp)
{
if (level_scavenger == 0)
{
exp_next_scavenger = 500;
};
//----------------------------------------------------------------------------
exp_Scavenger = exp_Scavenger + add_xp;

//----------------------------------------------------------------------------
var string concatText;
concatText = PRINT_XPGained;
concatText = ConcatStrings (concatText, IntToString(add_xp));
PrintScreen (concatText, -1, YPOS_XPGained, FONT_ScreenSmall, 2);

//----------------------------------------------------------------------------
if ( exp_Scavenger >= exp_next_scavenger )
{
level_scavenger = level_scavenger+1;
exp_next_scavenger = exp_next_scavenger +((level_scavenger+1)*500);

ATR_HITPOINTS_MAX_scavenger = ATR_HITPOINTS_MAX_scavenger + HP_PER_LEVEL;
ATR_HITPOINTS_scavenger = ATR_HITPOINTS_scavenger + HP_PER_LEVEL;



PrintScreen (PRINT_LevelUp, -1, YPOS_LevelUp, FONT_Screen, 2);
Snd_Play ("Ścierwojad LevelUp");
};
B_Checklog ();
a to owej bestii;)
INSTANCE SummonedScavenger (Mst_Default_Scavenger)
{
name = "Przywołany Ścierwojad ";
guild = GIL_SUMMONED_WOLF;
aivar[AIV_MM_REAL_ID] = 10000;
level = level_scavenger;
Npctype = NPCTYPE_MAIN;
// ------ XP Setup ------
exp = exp_Scavenger ;

exp_next = exp_next_Scavenger ;
exp_next_Scavenger = 500;
//----- Attribute ----

attribute [ATR_STRENGTH] = 35;
attribute [ATR_DEXTERITY] = 35;
if (level_scavenger == 0)
{
ATR_HITPOINTS_MAX_scavenger =70;
}
else
{
attribute [ATR_HITPOINTS_MAX] = ATR_HITPOINTS_MAX_scavenger;
};
if (level_scavenger == 0)
{
ATR_HITPOINTS_scavenger =70;
}
else
{
attribute [ATR_HITPOINTS] = ATR_HITPOINTS_scavenger;
};
attribute [ATR_MANA_MAX] = 0;
attribute [ATR_MANA] = 0;

aivar[AIV_PARTYMEMBER] = true;
B_SetAttitude (self, ATT_FRIENDLY);

start_aistate = ZS_MM_Rtn_Summoned;

B_SetVisuals_Scavenger();

Npc_SetToFistMode(self);

 

};
może trochę przekombinowałem;) a może działa gdybym wywołał to by naliczało mu zabijanie, ten skrypt levelowania zacząłem właśnie podstosowywać pod ilość zabić czyli exp jako liczba zabójstw a nie doświadczenie z konkretnego potwora bo kompletnie niewiedziałem gdzie wstawić by jak heros otrzymywał expa, obie metody wolałbym znać, i co właśnie z levelowaniem. Oczywiście nie musi być to widoczne gdy w grze po wpisaniu marvina klikam
  • i patrze staty potwora wszystko ze zmiennych będzie specjalny dokument który będzie wyświetlał lv, exp i ogólne statystki;) i na ekranie by się pojawił napis że potwór zlevelował tak samo jak normalnie u herosa.
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

liczenie zabójstw
#3 2012-05-26, 19:11(Ostatnia zmiana: 2012-05-26, 19:16)
robisz w ZS_dead wykonuje sie to jak postać umrze więc sprawdzanie
if      (Npc_IsDead  (self)) nie jest potrzebne ;)

other to cholera wie kto bo to self wykonuje czynność a czynnością jest ZS_dead (śmierć)
if (self.id == SummonedScavenger.id)
{
   exp_Scavenger += 1;
};

lepiej porównywać ID same instance z C_NPC mogą się źle porównywać.


Co do tekstu

               var string carryx; carryx = IntToString (carry);//zapisujesz liczbe jako tekst
                var string carren;            
                carren = ConcatStrings(carren, carryx);//łączysz zmienną carren z liczbą tyko po co ???
       
                                        Doc_PrintLines  ( nDocID,  0, carren);
zrób tak

               var string carryx; carryx = IntToString (carry);
       
                Doc_PrintLines  ( nDocID,  0, carryx);

muzyczka ?

               Snd_Play ("Ścierwojad LevelUp");
to jest ten dźwięk przy zdobywaniu lewela. Zrobiłeś nowy dźwięk ze to zmieniłeś ??

Markool

Markool

Użytkownicy
posty39
Propsy1
  • Użytkownicy
if (self.id == SummonedScavenger.id)
{
   exp_Scavenger += 1;
};

jak wrzucam na koniec błąd wyskakuje(syntax error : if) i za nim seria, chyba że to w jakimś konkretnym miejscu umieścić?

Z dokumentem ok;)
           
yyyy coś mi odwaliło że to napis przy zdobywaniu lv XD
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

liczenie zabójstw
#5 2012-05-26, 20:31(Ostatnia zmiana: 2012-05-26, 20:31)
other to cholera wie kto bo to self wykonuje czynność a czynnością jest ZS_dead (śmierć)
Źle, źle, źle ;p
Other to zabijający, czyli przykładowo nasz przyzwany ścierwojad (przynajmniej tak powinno być, jak nie to trzeba będzie to sprawdzać już przy zabójczym trafieniu).
Nasz pupilek ma dostawać punkty i expa nie kiedy ON będzie ginął, ale kiedy KTOŚ będzie ginął za jego sprawą ;p

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

liczenie zabójstw
#6 2012-05-26, 20:44(Ostatnia zmiana: 2012-05-26, 20:49)
other to cholera wie kto bo to self wykonuje czynność a czynnością jest ZS_dead (śmierć)

Aaa dobra sorry ale w takim razie ten if z other nie może być w ZS_dead. Nie wiadomo czy po drodze other nie zmieni właściciela ;) prawda ?


EDIT : za godzinkę ci powiem gdzieś w rutynie ataku będzie trzeba dodać pewnie ;)
ZS_attack lub ZS_MM_Atack
1 dla ludzi 2 dla zwierzaków wiec chyba w 2 pogrzebać trzeba ;)

Markool

Markool

Użytkownicy
posty39
Propsy1
  • Użytkownicy
ymmm czyli co i gdzie wpisać?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

liczenie zabójstw
#8 2012-05-26, 21:17(Ostatnia zmiana: 2012-05-27, 11:36)
Rafał, to jak najbardziej może i powinno być w zs_dead. Przecież na tej zasadzie działa przydzielanie expa, other to na 100% zabójca:
if Npc_IsPlayer   (other)
|| (C_NpcIsHuman  (other) && other.aivar[AIV_PARTYMEMBER])
|| (C_NpcIsMonster(other) && other.aivar[AIV_MM_PARTYMEMBER])
{
B_DeathXP(); // vergibt XP an SC
};
Jak widzisz, ten oryginalny fragment kodu przydziela expa graczowi jeśli zabił on, lub jego sojusznik, lub jego potworek. Najprostszy możliwy do napisania dodatkowy warunek to:
if (C_NpcIsMonster(other) && other.aivar[AIV_MM_PARTYMEMBER]))
{
other.aivar[AIV_MMPT_POINTS] +=1;
other.exp += self.level * XP_PER_LEVEL_DEAD;
};
Przy czym AIV_MMPT_POINTS może równać się np 43 (pierwszy wolny aivar, miejsca są do 49). Zauważ że bez względu na ilość expa zwierzaczek nie będzie się levelował, od tego musisz napisać całkiem własną funkcję.

BTW, spróbowałbyś chociaż najpierw samemu ogarnąć podstawy i spróbować to skleić, a nie oczekujesz że dostaniesz coś gotowego :|

Markool

Markool

Użytkownicy
posty39
Propsy1
  • Użytkownicy

Markool

liczenie zabójstw
#9 2012-05-27, 11:10(Ostatnia zmiana: 2012-05-27, 11:13)
pewnie to zadziała na g1 ale na g2nk się nie widzi tu orginalny skrypt to
   // ------ XP ------
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;
};
nie czyta npcismonster nawet
   if (NpcIsMonster(other) && other.aivar[AIV_MM_PARTYMEMBER])
        {
        other.aivar[AIV_MMPT_POINTS] +=1;
        other.exp += self.level * XP_PER_LEVEL_DEAD;
        };
wszystko działa oprucz aivaru nawet levelowanie zrobiłem i działa ;)chociaż nie zapisuje stat:/ błąd na aivarze pewnie dlatego ze w g2nk inne są puste.

if (other.guild == GIL_SUMMONED_WOLF && other.aivar[AIV_PARTYMEMBER])
        {
        other.aivar[AIV_MMPT_POINTS] +=1;
        other.exp += self.level * XP_PER_VICTORY;
        };
Cytuj
BTW, spróbowałbyś chociaż najpierw samemu ogarnąć podstawy i spróbować to skleić, a nie oczekujesz że dostaniesz coś gotowego :|

Prubuje ale bez punktu zaczepienia nie wiem co sklejać;)

Dobra 2 ostatnie pytania
-co zrobic/wpisać by zdobyty exp się zapisał, razem z resztą statystyk ? bo po każdym odesłaniu/zginięciu staty po ponownym wezwaniu mają początkową wartość;/
-a które w g2nk aivary są puste?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
W G2NK wolne są aivary 89-99. To że się nie zapisuje, zdecydowanie jest dziwne. Próbowałeś zmieniać inne parametry i sprawdzać czy się zapisują? Jeśli nie, to zapis w aivarach też nie będzie działał, a to oznacza sporą komplikację jeśli chcesz mieć te staty dla każdego rodzaju przyzwanego potwora (np wilk, ścierwojad itd) osobne.

Markool

Markool

Użytkownicy
posty39
Propsy1
  • Użytkownicy

Markool

liczenie zabójstw
#11 2012-05-27, 11:53(Ostatnia zmiana: 2012-05-27, 11:54)
już naprawiłem wszystko, levelowanie stworzyłem w zs_dead parę zmiennych które przeniosłem na instance bestii i wszystko zapisuje;) na razie mi to wystarczy dzięki za pomoc:p

edit temat do zamknięcia.
 


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