Achievement ( DB or Script )

Indította NevemSenki, 2010 június 16, 03:19:26 DÉLUTÁN

Előző téma - Következő téma

NevemSenki

#15
Nézegetem ezt a dolgot naponta, de nem jutok egyről a kettőre!

Kicsit már mérgesít;D

Van ez a fránya PL:
Item: http://www.wowhead.com/item=43599
Hozzá tartozó 2 Spell,

1, http://www.wowhead.com/spell=58983 ( maga a maci )
2, http://www.wowhead.com/spell=483 ( 3s cast a tanulást emulálva )

Ha ez az Item megvan, akkor kapok rá egy Achievementet http://www.wowhead.com/achievement=415 ( amikor az Invertory-mba kerül )



achievement_criteri_data táblában nincs benne.

Maga az Item:
(`entry`, `class`, `subclass`, `unk0`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `Duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `WDBVerified`) values('43599','15','5','-1','Big Blizzard Bear','59466','3','134250496','0','1','0','0','0','-1','32767','20','20','762','75','0','0','0','0','0','0','1','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','483','0','0','0','-1','330','3000','58983','6','0','0','-1','0','3000','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','1','Teaches you how to summon this mount.','0','0','0','0','0','4','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','-1','0','0','0','0','','0','0','0','0','1');

criteria_id: 6974


Na most jön ami még nem volt!

Hogy kaphatom meg az Achievementet ha semmi nyoma ennek a Fosnak?

Valaki segítene kicsit?  :-\

Vagy kijelentjük hogy jelen tudásunk szerint megoldhatatlan?


NevemSenki

#17
Hát találtam Scriptben ( elég régi ) egy két dolgot: http://pastebin.com/dM5SSrTp
Érdeklődnék hogy jól gondlom-e

Beregisztrálja az elején az Achikat:

Idéz#define ACHIEVEMENT_SHATTERED      2925
#define ACHIEVEMENT_SHATTERED_H      2926

#define ACHIEVEMENT_STOKIN_THE_FURNACE    2930
#define ACHIEVEMENT_STOKIN_THE_FURNACE_H 2929


Ezt nem értem hogy miért van itt, de valami oka biztosan van:

Idéz
   uint32 uiSlagPotInTimer;
   uint32 uiSlagPotChargeTimer;

   Unit* SlagPotTarget;
   Creature *IgnisConstruct;

   bool AchievementShattered;
   bool AchievementStokinTheFurnace;

   bool InSlagPot;

Aztán a Timerek Reste-jében is benne van:
Idéz
      AchievementShattered = false;
      AchievementStokinTheFurnace = true;

Ha jól gondolom, ez úgy működne hogy ha meghal ( void KillConstructor ), és egy bizonyos időn belül hal meg, akkor kapom az Achievementet ( uiShatteredAchievmentTimer=5000; )

Idézvoid KillConstructor()
   {
      if (!AchievementShattered){
         if (uiShatteredAchievmentTimer>0)
            AchievementShattered=true;
         else
            uiShatteredAchievmentTimer=5000;
      }
      me->RemoveAuraFromStack(SPELL_STRENGTH_OF_THE_CREATOR);
   }

Na ezt aztán végképp nem értem:
Idéz
      if (uiStokinTheFurnaceAchievementTimer <= diff)
      {
         AchievementStokinTheFurnace=false;
         uiStokinTheFurnaceAchievementTimer = 0;
      } else uiStokinTheFurnaceAchievementTimer -= diff;

      if (uiShatteredAchievmentTimer <= diff)
      {
         uiShatteredAchievmentTimer = 0;
      } else uiShatteredAchievmentTimer -= diff;


Ez pedig ha jól gondolom akkor az lenne, hogy ha a Player HC-n van bent akkor azokat az Achievementeket kapja meg, amik a HC Instára szólnak:

Idézvoid JustDied(Unit * /*victim*/)
   {
       DoScriptText(SAY_DEATH, me);
       _JustDied();

      //On donne les hf
      if (m_pInstance && AchievementShattered)
         m_pInstance->DoCompleteAchievement(HEROIC(ACHIEVEMENT_SHATTERED, ACHIEVEMENT_SHATTERED_H));

      if (m_pInstance && AchievementStokinTheFurnace)
         m_pInstance->DoCompleteAchievement(HEROIC(ACHIEVEMENT_STOKIN_THE_FURNACE, ACHIEVEMENT_STOKIN_THE_FURNACE_H));

      if (m_pInstance)
           m_pInstance->SetData(TYPE_IGNIS, DONE);
   }

Ha van bármi hozzáfűzni valótok, legyetek szívesek írjátok le, biztosan segítene valamit, mert ez az Achievementes dolog nagyon kemény dió. TC nagyon nagyon szegényes Achievement téren.

Üdv.: Senki

--------------------------------------------------------------------------------------------

Na kezdek rájönni, vagy egy Achievementekhez kacsolódó Script, és a különböző dolgok abban vannak definiálva ( creture_kill, honorable_kill, item_invertory ) hasonlóak.

És ezeket kel használni egy Scriptben, mint Például a feljebb leírtban. ( Ignis Scriptje )
Ahogy néztem, elég sok minden ki van hagyva az alapoknál, vagy ki lett szedve az idők folyamán, Pl.: a City Deffender, az is régen ment, 3.1.3-ban még jó volt, most pedig már nem.

Még nézegetem, de nem egyszerű a dolog.
Kell a Script, kell még mellé a achievement_criteria tábla a DB-ből, plusz azoknak az értékei jól legyenek beírva ( típus, criteria_ID ).

Egy szó mint 100, nagyon nem egyszerű.
Eddigi pályafutásom alapján, ez a  legnehezebb amivel találkoztam, ez nem csak olyan Falusi Boss_Script.  :D :D :D

Ha sikerül többet megtudnom, vagy teljesen megértenem, akkor nyitok neki egy új Topic-ot ahol részletesen elmagyarázom. De lehet hogy ez csak nekem ekkora nagy dolog.  :D

Üdv.: Senki

NevemSenki

Azért RePost-olok, hogy másoknak megjelenjen az Olvasatlanok között.
Hátha tud valaki valamit hozzáfűzni.  :)

AchievementMgr.h

AchievementMgr.cpp

Akkor legjobb belátásom szerint, amikhez tartozik Script ( Mint BG, BossKill... ) azokba be lehet építeni az Achievementet.

De akkor Például ezekkel mi van?  ???

Pilgrim's Peril

Legjobb tudásom szerint ehhez nem tartozik Script, mivel csak le kell ülni a bizonyos ruhában az asztalokhoz.
( While wearing either a Pilgrim's Dress, Robe, or Attire, take a seat at each enemy capital's Bountiful Table )

Van minden asztalhoz egy Spell ( Például: Stormwind ) ha ez a Spell rám kerül, akkor számolná a Stormwind-es részét az Achievementnek.
Kipróbáltam, és hát megkapom a teljes Achievementet, ha a 4 közül bármelyik Spell kerül rám.

Hogyan lehetne azt megoldani, hogy ne az egész Achievementet kapjam meg, hanem a Példa alapján csak a Stormwind-eset?

Üdv.: Senki


Powered by EzPortal