Użycie przedmiotu przez daną grupę NPC 3839 10

O temacie

Autor pawbuj

Zaczęty 22.12.2013 roku

Wyświetleń 3839

Odpowiedzi 10

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
witam. mam item , który  przynosi dodatkowe bonusy dla hero podczas użycia. Chciałbym aby ten efekt obejmował tylko ewentualnie określoną grupę Npc.


próbowałem warunków z self.id == id danego npc lub if npc_isplayer (hero) == true, ale bez skutku.

podpowie ktoś?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

Użycie przedmiotu przez daną grupę NPC
#1 2013-12-22, 17:47(Ostatnia zmiana: 2013-12-22, 18:05)
Możesz też użyć tych funkcji:
FUNC INT     Hlp_IsValidNpc         (VAR C_NPC self)               { return 0; };
FUNC INT    Npc_GetTrueGuild         (VAR C_NPC npc)  { return 0; };
Jeśli można wiedzieć to o jaką grupę npc Ci chodzi?
Edit: Zapomniałem się oraz poprawiłem  to :F

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
@chicken:
Po pierwsze, to nie są warunki, tylko funkcje zewnętrzne. Po drugie, niby co do problemu ma "Hlp_IsValidNpc"?

Pawbuj, napisz konkretniej co oznacza "określona grupa npc". Gildia? Lista npc o konkretnych instancjach? Wszyscy npc którzy mają taki i taki item i o godzinie 12 przebywają w starym obozie? 
Item ma przynosić korzyści postaci gracza wtedy gdy używa go jakiś npc?

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
już mówię o co mi chodzi.

tylko hero dostaje bonusy kiedy używa danego itema.

ale jestem bardzo zainteresowany jak zrobić , aby dany item przy użyciu wywoływał funkcje tylko w grupie:
- dla npc w zakresie id np. od 1 do 100;
- dla danej gildii;
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Cytuj
tylko hero dostaje bonusy kiedy używa danego itema.
W funkcji on_equip i on_unequip dodajesz następujący warunek:
if (npc_isplayer (self))
{
 //tutaj wklepujesz co ma się dziać
}

Cytuj
dany item przy użyciu wywoływał funkcje tylko w grupie
Nie rozumiem co znaczy "wywoływał funkcje w grupie". Jeśli chodzi ci o to, żeby efekt działał tylko jeśli zakładający jest jednym z danych npc, to przykładowo:
if (self.id >= 1 && self.id <= 100)albo
if (self.guild == GIL_KDF)I analogicznie z dowolnymi innymi cechami charakterystycznymi. Postać zakładająca item zawsze będzie "selfem" i to jego właściwości sprawdzasz.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Ja bym zrobił nowy AI_SetNpcsToState (hero, Nazwa_Nowego_ZSa, zasięg); Preferuję 1000, zmienić czas działania na 1 sekundę i dodać w funkcji LOOP, bądź do funkcji startującej
Spoiler
if (self.aivar[AIV_PARTYMEMBER] == TRUE)
{
//Twoje bonusy dla wszystkich z drużyny
};

Jeśli chcesz dodać jeszcze, że zależne od gildii
Spoiler
if ((self.aivar[AIV_PARTYMEMBER] == TRUE) && (self.guild == GIL_NAME))
{
//Twoje bonusy dla wszystkich z danej gildii, ale tylko z drużyny
};
GIL_NAME to nazwa twojej gildii (taka, co ja podałem nie istnieje jak coś...)
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
cały skrypt wywołany przez AI_UseItem   (self, ItmiAlarmHorn);, jednak np. Diego nadal przywołuje monstery .. co jest nie tak?
//---------------------------------------------------------------------
//   Alarmhorn der Orks
//---------------------------------------------------------------------
var int hornused;
var int hornrandom;
var int x; var int y;
INSTANCE ItMiAlarmhorn (C_Item)
{
   name             =   "Róg przywołań";

   mainflag          =   ITEM_KAT_NONE;
   flags            =   ITEM_MISSION;

   value             =   500;

   visual             =   "ItMi_Alarmhorn_01.3DS";
   material          =   MAT_WOOD;

   scemeName         =   "HORN";
   on_state[0]         =   UseHorn;
   description         = name;
   //TEXT[0]         = "";
   ////COUNT[0]      = ;
   //TEXT[1]         = "";
   ////COUNT[1]      = ;
   //TEXT[2]         = "";
   //COUNT[2]         = ;
   //TEXT[3]          = "";
   //COUNT[3]         = ;
   //TEXT[4]         = "";
   ////COUNT[4]      = ;
   TEXT[5]            = NAME_Value;
   COUNT[5]         = value;
   };
   
   FUNC VOID Usehorn()
   {
   if  (hornused > 5)
   {
   PrintScreen ("Róg stracił swą magiczną moc!", 3,77,"FONT_OLD_10_WHITE.TGA",5);//MIECZ   
   //hornused = 100; //teraz róg nie działa
   hornrandom = -10;
   };   
   if (Npc_IsPlayer (self) )
   && ((hornused < 6)
   && (hornused > -1))
      {     
      hornrandom = Hlp_Random (7);
      x = Hlp_Random (10);y = Hlp_Random (10);
      }
      if  (hornrandom == 0)
      {
      Wld_PlayEffect("spellFX_Teleport_RING",self,self,2,0,DAM_FIRE,TRUE);   
      Snd_Play ("WinBattle");     
      Wld_SpawnNpcRange( self,SummonedByPC_MineCrawler,y,500);
      Wld_SpawnNpcRange( self,SummonedByPC_MineCrawlerWarrior,1,500);
      hornused =    hornused +1;
      }
      else if (hornrandom == 1)
      {
      Wld_PlayEffect("spellFX_Teleport_RING",self,self,2,0,DAM_FIRE,TRUE);   
      Snd_Play ("WinBattle");     
      Wld_SpawnNpcRange( self,SummonedByPC_NewScavenger,1,500);   
      Wld_SpawnNpcRange( self,SummonedByPC_YScavenger,x,500);   
      Wld_SpawnNpcRange( self,SummonedByPC_Scavenger,y,500);   
      hornused =    hornused +1;
      }
      else if (hornrandom == 2)
      {
      Wld_PlayEffect("spellFX_Teleport_RING",self,self,2,0,DAM_FIRE,TRUE);   
      Snd_Play ("WinBattle");     
      Wld_SpawnNpcRange( self,SummonedByPC_ShadowBeast,1,500);
      Wld_SpawnNpcRange( self,SummonedByPC_Snapper,y,500);
      hornused =    hornused +1;
      }
      else if (hornrandom == 3)
      {
      Wld_PlayEffect("spellFX_Teleport_RING",self,self,2,0,DAM_FIRE,TRUE);   
      Snd_Play ("WinBattle");     
      Wld_SpawnNpcRange( self,SummonedByPC_BloodFlyFire,1,500);
      Wld_SpawnNpcRange( self,SummonedByPC_BloodFly,x,500);
     
      hornused =    hornused +1;
      }
      else if (hornrandom == 4)
      {
      Wld_PlayEffect("spellFX_Teleport_RING",self,self,2,0,DAM_FIRE,TRUE);   
      Snd_Play ("WinBattle");     
      Wld_SpawnNpcRange( self,SummonedByPC_BigWolf,1,500);   
      Wld_SpawnNpcRange( self,SummonedByPC_Wolf,y,500);
      hornused =    hornused +1;
      }   
      else if  (hornrandom > 4)
      {
      Wld_PlayEffect("spellFX_Teleport_RING",self,self,2,0,DAM_FIRE,TRUE);   
      Snd_Play ("WinBattle");     
      Wld_SpawnNpcRange( self,SummonedByPC_BYDLE2,1,500);   
      Wld_SpawnNpcRange( self,SummonedByPC_Razor,y,500);
      hornused =    hornused +1;   
   };
};
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Bo warunek "czy npc jest postacią gracza" wstawiłeś tak że dotyczy tylko losowania zmiennych. Przywoływanie odpala się nawet jeśli bohater graczem nie jest. Daj go wokół całej reszty kodu, a nie tylko tego kawałka. I we własnym interesie popraw tabulację, wtedy takie rzeczy będziesz widział od razu. Przykładowy poprawiony kawałek:
FUNC VOID Usehorn()
{
    if  (hornused > 5)
    {
        PrintScreen ("Róg stracił swą magiczną moc!", 3, 77, "FONT_OLD_10_WHITE.TGA", 5); //MIECZ   
        hornrandom = -10;
    };   
    if (Npc_IsPlayer(self) && hornused < 6 && hornused > -1)
    {     
        hornrandom = Hlp_Random (7);
        x = Hlp_Random (10);
        y = Hlp_Random (10);
    }
    if  (hornrandom == 0)
    {
        Wld_PlayEffect ("spellFX_Teleport_RING", self, self, 2, 0, DAM_FIRE, TRUE); 
O wiele lepiej widać które warunki dotyczą którego kodu niż w twojej wersji gdzie tabulację zaniedbałeś (przez co masz teraz problemy):
   FUNC VOID Usehorn()
   {
   if  (hornused > 5)
   {
   PrintScreen ("Róg stracił swą magiczną moc!", 3,77,"FONT_OLD_10_WHITE.TGA",5);//MIECZ   
   //hornused = 100; //teraz róg nie działa
   hornrandom = -10;
   };   
   if (Npc_IsPlayer (self) )
   && ((hornused < 6)
   && (hornused > -1))
      {     
      hornrandom = Hlp_Random (7);
      x = Hlp_Random (10);y = Hlp_Random (10);
      }
      if  (hornrandom == 0)
      {
      Wld_PlayEffect("spellFX_Teleport_RING",self,self,2,0,DAM_FIRE,TRUE);

kaczka

kaczka

RaveN Studio
Definitely not kaczka!
posty2280
Propsy2392
NagrodyV
ProfesjaLvl designer
  • RaveN Studio
  • Definitely not kaczka!
Cytat: Avallach
Nie rozumiem co znaczy "wywoływał funkcje w grupie".
Za to ja owszem i nawet domyślam się do czego może to wykorzystać xD
Jebany naoglądał się LoLa, Doty, WarCrafta, Starcrafta i innych WoWów i teraz mu się aury zachciało robić oO Gdyby tak nad tym dłużej pomyśleć to pomysł wcale nie jest głupi, wręcz przeciwnie... sądzę, że ten pomysł miałby całkiem świetlaną przyszłość :lol2:
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Jeśli chodzi o to żeby coś działo się jednocześnie u wszystkich npc na obszarze, to sprawa jest problematyczna. Przed przystąpieniem do wyjaśniania jak się za to zabrać byłoby dobrze jakby autor tematu potwierdził że dokładnie właśnie o to mu chodzi.

kaczka

kaczka

RaveN Studio
Definitely not kaczka!
posty2280
Propsy2392
NagrodyV
ProfesjaLvl designer
  • RaveN Studio
  • Definitely not kaczka!
To była tylko luźna sugestia a może i plan na kiedyś. Z działaniem obszarowym przedmiotu/zaklęcia/whatever można by raczej pokombinować, żeby działało tylko na patry membersów ale również to jest tylko moim głośnym myśleniem, bo nad wykonaniem trzeba by było się ostro nastękać.
 


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