Czar. 2384 3

O temacie

Autor Podgladacz

Zaczęty 24.03.2012 roku

Wyświetleń 2384

Odpowiedzi 3

Podgladacz

Podgladacz

Użytkownicy
posty14
Propsy1
  • Użytkownicy
Cześć, mam pytanie;
Co mam zrobić jeśli chce, aby dany czar wywoływał na zaznaczonym NPC animacje, np tańczenia, cokolwiek ?
Gdzie szukać, i jak się za to zabrać.
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel

Sawik
Moderator działu

Czar.
W efekcie czaru daj playani na other/target?
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

Podgladacz

Podgladacz

Użytkownicy
posty14
Propsy1
  • Użytkownicy
Możesz jaśniej, wiem że to dla Ciebie wielki trud, i marnowanie czasu :D .

Z tego co wiem, w skrypcie czaru , można tylko i wyłącznie chyba dać wywołanie efektu, bo sprawdzałem skrypty i bawiłem się w próby i błędy.

Chyba że chodzi o inne pliki, foldery do których nie dotarłem.
 

Godefroy93

Godefroy93

Rzeka
posty289
Propsy196
NagrodyV
Profesjabrak
  • Rzeka
Skrypty odpowiedzialne za czary są w Content - AI - Magic. W Spells znajdują się skrypty czarów. W ZS_Magic Różne efekty, które wywołują animacje, lub np nastawienie npc do nas. Przykładowo

Cytuj
// **************************************
// B_StopMagicSleep
// ----------------
// wird aus ZS_MAgicSleep_loop aufgerufen
// wenn SPL_Time_Sleep vorbei ist
// **************************************

func int B_StopMagicSleep()
{
   Npc_PercDisable   (self,   PERC_ASSESSDAMAGE); //weil Wahrnehmung unten auf B_StopMagicSleep verweist

   B_Say_Overlay      (self,   other,   $WHATWASSTHAT);
   AI_PlayAni         (self, T_VICTIM_SLE_2_STAND);
   
   // nach Aufruf dieses Befehles wird die Loop über return LOOP_END beendet (weiter im TA)
};      


// **********************
// B_AssessMagicSleepTalk
// **********************

func void B_AssessMagicSleepTalk()
{
   B_Say (self, other, $YOUDISTURBEDMYSLUMBER);
   
   AI_StartState (self, ZS_ObservePlayer, 1, );
};


// *************
// ZS_MagicSleep
// *************

func void ZS_MagicSleep ()
{
   // der ZS_MagicSleep beendet sich selbst im loop, daher ist keine perception PERC_ASSESSSTOPMAGIC nötig, und darf
   // auch nicht gesetzt werden, ansonsten wird der diesen zustand aktivierende effekt wenn er beendet ist (z.B. weil
   // der partikeleffekt stirbt) ein assessstopmagic senden, und dadurch illegalerweise vorzeitig den zustand beenden
   // mit anderen worten: der pfx triggert diesen zustand, und der zustand beendet sich selbst
   
   Npc_PercEnable      (self,   PERC_ASSESSDAMAGE,       B_StopMagicSleep);
   Npc_PercEnable     (self,    PERC_ASSESSMAGIC,      B_AssessMagic);
   Npc_PercEnable     (self,    PERC_ASSESSTALK,      B_AssessMagicSleepTalk);
   

   // ------ Guardpassage resetten ------
   self.aivar[AIV_Guardpassage_Status] = GP_NONE;
   
   // ------ RefuseTalk Counter resetten -----
   Npc_SetRefuseTalk(self,0);
   
   // ------ Temp_Att (upset) resetten ------
   Npc_SetTempAttitude(self, Npc_GetPermAttitude(self,hero));

   // ------ Bewegungs-Overlays resetten ------   
   B_StopLookAt   (self);
   AI_StopPointAt   (self);
   
      
   if (!Npc_HasBodyFlag(self, BS_FLAG_INTERRUPTABLE))
   {
      AI_StandUp (self);
   }
   else
   {
      AI_StandUpQuick (self);
   };

   AI_PlayAniBS (self,   T_STAND_2_VICTIM_SLE, BS_LIE );
};

func int ZS_MagicSleep_Loop ()
{   
   if (Npc_GetStateTime(self) > SPL_Time_Sleep)
   {
      Npc_ClearAIQueue(self);
      B_StopMagicSleep();
      return LOOP_END;
   };
};

func void ZS_MagicSleep_End()
{

};



To jest przykładowy skrypt snu. Na niebiesko animacja, która jest wywoływana podczas rzucania czarów. Może ją zmieniać



Cytuj
*********
// SPL_Sleep
// *********

const int SPL_Cost_Sleep            = 30;   
const int SPL_TIME_Sleep            = 30;   // in ZS_MagicSleep


instance Spell_Sleep (C_Spell_Proto)
{
   time_per_mana         = 0;               //Wert wird nicht gebraucht - Spell wirkt INSTANT
   spelltype             = SPELL_NEUTRAL;
   targetCollectAlgo      = TARGET_COLLECT_FOCUS;
};

func int Spell_Logic_Sleep (var int manaInvested) //Parameter manaInvested wird hier nicht benutzt
{
   if ((Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll)))
   || (self.attribute[ATR_MANA] >= SPL_Cost_Sleep)
   {
      if (Npc_GetActiveSpellIsScroll(self))
      {
         self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
      }
      else
      {
         self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Sleep;
      };
      
      if (!C_BodyStateContains(other, BS_SWIM))
      && (!C_BodyStateContains(other, BS_DIVE))
      && (!C_NpcIsDown(other))
      && (other.guild < GIL_SEPERATOR_HUM)
      //&& (other.level - self.level <= 3) //EGAL, sonst Spell witzlos (Klau-Wachen)
      && (other.flags != NPC_FLAG_IMMORTAL)
      && (Npc_GetDistToNpc (self,other) <= 1000)
      //&& (C_NpcIsGateGuard (self) == FALSE) //EGAL, weil PAL oder Kdf kritische Wachen sind
      && (other.guild != GIL_KDF)
      && (other.guild != GIL_DMT)
      && (other.guild != GIL_PAL)
      {      
         Npc_ClearAIQueue   (other);
         B_ClearPerceptions   (other);
         AI_StartState      (other, ZS_MagicSleep, 0, );
      };
      return SPL_SENDCAST; //Spell wird auch gecasted, wenn keine Auswirkungen (other geht nicht in ZS) Mana is dann weg - Pech gehabt! (soll so sein!)
   }
   else //nicht genug Mana
   {
      return SPL_SENDSTOP;
   };
};


func void Spell_Cast_Sleep()
{
   //self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Sleep;         // nicht drin, wegen Kommentar oben
   
   self.aivar[AIV_SelectSpell] += 1;
};







To jest skrypt czaru snu  AI_StartState (other, ZS_MagicSleep, 0, );

W tej linijce Znajduje się odwołanie do skryptu ZS_MagicSleep. Czyli po rzuceniu tego czaru npc zaśnie. Dopiero poznaję te czary, narazie głownie testuję, np żeby npc po rzuceniu czaru zmienił nastawienie z HOSTILE na NEUTRAL itp. lub żeby wypijał miksturkę.
 
"Pierre is enjoying his new bicycle!"



Spoiler
1.Co to są ryry?

Ryrami płynie woda

2.Obrybiacie bonk?

Tak! Obrybiamy bonk.

To nie zgydne z prywem!

3.Pierre lubi swój nowy rower!

Bardzo mnie to cieszy, a co to za Pierre?

To taki chłopak z wioski.

4.Ładna kurtka!

My alpiniści nazywamy to wiatrochronem.

Niech jej Pan pod żadnym pozorem nie zdejmuje!

Allo!,allo!


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