Informatikai Barkács Fórum

WORLD OF WARCRAFT SZERVER => Általános => A témát indította: NevemSenki Dátum 2010 június 16, 03:19:26 DÉLUTÁN

Cím: Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 június 16, 03:19:26 DÉLUTÁN
Hali.

Minap nézegetem az Achievement-ekhez vonatkozó Dolgokat/leírásokat, de sajnos semmi használhatót nem találtam.  :-[
Találtam egy Topic-ot, de... semmi. ( http://infobarkacs.hu/index.php?topic=3135.0 (http://infobarkacs.hu/index.php?topic=3135.0) )

Ha jól tudom DB-ben két tábla kapcsolódik az Achievement-ekhez.

1. achievement_revard
2. achievement_criteria_data

Sajnos nem tudtam megérteni, hogy miként és hogyan kapok meg egy adott Achievementet.  :-[
( Zárójelben megjegyeznék 1-2 Linket:
http://trinitycore.info/index.php/Achievement_Criteria.dbc_tc2 (http://trinitycore.info/index.php/Achievement_Criteria.dbc_tc2)
http://trinitycore.info/index.php/Achievement_criteria_data_tc2 (http://trinitycore.info/index.php/Achievement_criteria_data_tc2)
http://trinitycore.info/index.php/Achievement_reward_tc2 (http://trinitycore.info/index.php/Achievement_reward_tc2)

Achievement_Criteria ( dbc ) http://pastebin.com/qmvC8afM (http://pastebin.com/qmvC8afM))

Az achievement_revard tábla úgy ahogy világos, de azt valószínű még a mai nap folyamán átnézem.
De az achievement_criteri_data-át teljesen nem értem.

Most jönne a Scriptes oldala.

Úgy tudom, hogy ez megoldható lenne Script megírásával is, de lehet hogy tévedek.
Miként, hogyan írják bele egy adott Scripte ezeket? ( Bossok, hasonlóakra gondolok )
Ezt is nézegettem, de ez még homályosabb.

Mondanék egy Példát: http://ptr.wowhead.com/achievement=1277 (http://ptr.wowhead.com/achievement=1277)
Ez amint látható is, egy Quest végeztével kapnánk meg.
De nem jövök rá hogy hogyan.

Ha valaki tudja a nyitját, és lenne egy kis ideje vagy bármi ötlete, legyen szíves írja le.

Üdv.: Senki
Cím: Re:Achievement ( DB or Script )
Írta: Szilárd Dátum 2010 június 16, 03:33:03 DÉLUTÁN
Egy timerrel rendelkező scriptelt quest után kapnád meg(3 perc alatt kell megvédeni).

Ha egy achievementet szeretnél valamelyik karakternek adni, akkor az a

`characters`.`character_achievements` vagy valami hasonló táblában van.
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 június 16, 06:09:59 DÉLUTÁN
Igen, ezt a részt én is megtaláltam, de ez így nekem olyan 'nem az igazi'

Hogyan tudnám azt kivitelezni, hogy Például leadom ezt a küldit ( http://ptr.wowhead.com/quest=2161 (http://ptr.wowhead.com/quest=2161) )
És megkapjam ezt az Achievementet ( http://ptr.wowhead.com/achievement=4597 (http://ptr.wowhead.com/achievement=4597) )

Most ez nagyon hülyén néz ki, de az elkészítés lényege lenne a fontos.
Cím: Re:Achievement ( DB or Script )
Írta: Skyne Dátum 2010 június 16, 06:23:48 DÉLUTÁN
Ha jól értelmezem ezt: http://trinitycore.info/index.php/Achievement_criteria_data_tc2 (http://trinitycore.info/index.php/Achievement_criteria_data_tc2)

akor az `achievement_criteria_data` táblában belövöd az achi ID-jét (dbcből: link (http://trinitycore.info/index.php/Achievement_Criteria.dbc_tc2))

aztán beállítod az értkéket, és ha  a beálított értéknek megfelelő "event" bekövetkezik adott player megkapja az achi-t, adott esetben célszerű egy aurát beállítani (id: 5), value kettőben pedig megadni az aura spelljéne ID-jét, a quest végén meg ráadni a playerre ezt az aurát.

Ha tévednék sorry most néztem át félálomba  leírásokat  :-[
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 június 23, 11:49:52 DÉLELŐTT
Nagyából értem, de még sok minden nem világos.  :(

Vannak Achievementek, amik nekem bonyolultnak tűnnek.
Mint Például: http://www.wowhead.com/achievement=603 (http://www.wowhead.com/achievement=603)
                  http://www.wowhead.com/achievement=1006 (http://www.wowhead.com/achievement=1006)

Nem tudok rájönni, hogy ezekre miként írhatnék javítást, mert akárhogy csináltam eddig, nem volt jó.
Ennek némely része azért még nem világos.

value1

    * TYPE_T_CREATURE
          o The target here must be a valid entry from creature_template

    * TYPE_T_PLAYER_CLASS_RACE
          o The value here is a valid class (paste class list). value2 must also be set

    * TYPE_T_PLAYER_LESS_HEALTH
          o The percentage of health that the target must reach.

    * TYPE_T_PLAYER_DEAD
          o The faction of the target player (must match player attempting achievement).

    * TYPE_S_AURA
          o The spell ID of the aura that must be on the player. value2 must also be set.

    * TYPE_S_AREA
          o Area ID from AreaTable.dbc

    * TYPE_T_AURA
          o The spell ID of the aura that must be on the target. value2 must also be set.

    * TYPE_VALUE
          o Minimum value needed to attain achievement. This value is used in conjunction with another type.

    * TYPE_T_LEVEL
          o The minimum level that the target can be.

    * TYPE_T_GENDER
          o Gender: 0=Male, 1=Female

    * TYPE_DISABLED
          o Used to disable an achievement if all requirements are not defined. Would usually be used if not all are known.

    * TYPE_MAP_DIFFICULTY
          o Map difficulty: Normal = 0, Heroic = 1

    * TYPE_MAP_PLAYER_COUNT
          o The number of other players that must be in the zone. (not sure if it is minimum or maximum).

    * TYPE_T_TEAM
          o The target must be on this team: Alliance = 469, Horde = 67

    * TYPE_S_DRUNK
          o How drunk the player must be: DRUNKEN_SOBER = 0, DRUNKEN_TIPSY = 1, DRUNKEN_DRUNK = 2, DRUNKEN_SMASHED = 3

    * TYPE_HOLIDAY
          o Holiday ID from Holiday.dbc and game_event. Must be an active holiday.

    * TYPE_BG_LOSS_TEAM_SCORE
          o Player's team win bg and opposition team have team score in range. // Min. score

value2

    * TYPE_T_PLAYER_CLASS_RACE
          o The value here is a valid race (paste race list)

    * TYPE_S_AURA
          o Effect Index of the aura

    * TYPE_T_AURA
          o Effect Index of the aura

    * TYPE_BG_LOSS_TEAM_SCORE
          o Max. score


Az előzőleg említett 2 Achievementet ti hogyan javítanátok?   ???
Cím: Re:Achievement ( DB or Script )
Írta: Szilárd Dátum 2010 június 23, 01:36:06 DÉLUTÁN
Ezeket inkább scripttel, mint db-ben.
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 június 23, 09:52:26 DÉLUTÁN
Utána nézek hogy Scriptel hogy lehet, hátha találok valamit.  :)
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 június 25, 05:23:12 DÉLUTÁN
Kész, feladom.
Nem értem meg sem a Scripeset/sem a DB-set.
Lehet csak túl bonyolultan állok hozzá, vagy nem tudom.

Na mind1...  :-\
Cím: Re:Achievement ( DB or Script )
Írta: ident Dátum 2010 június 25, 07:17:41 DÉLUTÁN
Nem a kettő együtt a nyerő? :)

scriptben megadod mire, db-ben pedig hogy mit. Próbálj kinézni 1-2 boss scriptet ami achi-t ad.
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 július 01, 01:24:45 DÉLUTÁN
Mostanában van egy érdekes hiba TC-nél, hogy bemegyek mondjuk ToTc-ba, 10 fős Norm-on, és megkapom a végén a 10 és a 25 fős ToTc-ra is az Achievementet.

Ez miért van vajon?
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 július 03, 12:36:26 DÉLUTÁN
Hát ez nekem sajnos nem sikerült, valamiért nem értem ezt az egészet.. :(

Pedig jó lenne ha megérteném, mert én PvE-s vagyok, és az Achievement a mindenem!  :D
Cím: Re:Achievement ( DB or Script )
Írta: Athmor Dátum 2010 július 03, 01:23:56 DÉLUTÁN
ICC-ben is ez van ha már itt tartunk. Ráadásul Heroic 25 embereset és HC 10-est is
Cím: Re:Achievement ( DB or Script )
Írta: MrBab Dátum 2010 július 03, 09:49:14 DÉLUTÁN
Kb. úgy mint amikor funon megveszel egy fegyót és megkapod a 10 meg 25 achievementet ahoz az instához,amelyikben droppolják a fegyót
Cím: Re:Achievement ( DB or Script )
Írta: ident Dátum 2010 július 03, 11:23:52 DÉLUTÁN
Idézetet írta: NevemSenki Dátum 2010 július 01, 01:24:45 DÉLUTÁN
Mostanában van egy érdekes hiba TC-nél, hogy bemegyek mondjuk ToTc-ba, 10 fős Norm-on, és megkapom a végén a 10 és a 25 fős ToTc-ra is az Achievementet.

Ez miért van vajon?

Mert a boss/insta scriptben nincs lekezelve az achi. Pár commitot látni olykor ha egy instát pofozgatnak, hogy "25 mode achievement fixed" pl. Na az ilyen commitokat kell előkotorni és megnézni mit csináltak benne.

@Athmor és MrBab: ez nem a bug jelentő topic :D
Cím: Re:Achievement ( DB or Script )
Írta: MrBab Dátum 2010 július 04, 02:06:04 DÉLUTÁN
Csak érdekességként írtuk ki :D Jobb kint mint bent
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 július 04, 04:59:17 DÉLUTÁN
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 (http://www.wowhead.com/item=43599)
Hozzá tartozó 2 Spell,

1, http://www.wowhead.com/spell=58983 (http://www.wowhead.com/spell=58983) ( maga a maci )
2, http://www.wowhead.com/spell=483 (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 (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?
Cím: Re:Achievement ( DB or Script )
Írta: ident Dátum 2010 július 10, 06:57:15 DÉLUTÁN
Talán segít:

http://code.google.com/p/trinitycore/source/detail?r=c0f66ca23c5a9dad38d5feebf1d773d7150d3fe2
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 július 12, 06:29:14 DÉLUTÁN
Hát találtam Scriptben ( elég régi ) egy két dolgot: http://pastebin.com/dM5SSrTp (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
Cím: Re:Achievement ( DB or Script )
Írta: NevemSenki Dátum 2010 augusztus 07, 11:02:04 DÉLELŐTT
Azért RePost-olok, hogy másoknak megjelenjen az Olvasatlanok között.
Hátha tud valaki valamit hozzáfűzni.  :)

AchievementMgr.h (http://pastebin.com/BHffqeM5)

AchievementMgr.cpp (http://pastebin.com/XYUZYgZi)

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 (http://www.wowhead.com/achievement=3581)

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 (http://www.wowhead.com/spell=65403) ) 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