aowow/includes/game/loot/loot.class.php
Sarjuuk a5051c9bf5 Loot/Modes
* work against more correctly assigning instance mode to entities and loot
    - added manually collected data for difficulty versions of gameobjects, just boss chests for now.
      update setup/source to default object source to base difficulty version if able
    - update spelldifficulty table to contain the (likely) mapmode it will be used in
  * refactored class loot
    - implement loot mode indicators on listview for creature and gameobject loot
    - show 'drops' listview tab on instance zone page
    - fixes against tribute chest systems (toc / ulduar)
    - fix icc gunship battle chest ownership
2025-11-19 20:22:33 +01:00

71 lines
3.6 KiB
PHP

<?php
namespace Aowow;
if (!defined('AOWOW_REVISION'))
die('illegal access');
/* NOTE!
*
* TrinityCore uses "mode", a bitmask in a loot template, to distinguish dynamic properties of the template. i.e. entries get enabled if the boss fight progresses in a certain way.
* WH/we uses "mode", different loot templates, to describe the raid/dungeon difficulty
*
* try to not mix this shit up
*/
abstract class Loot
{
// Loot handles
public const FISHING = 'fishing_loot_template'; // fishing_loot_template (no relation entry is linked with ID of the fishing zone or area)
public const CREATURE = 'creature_loot_template'; // creature_loot_template entry many <- many creature_template lootid
public const GAMEOBJECT = 'gameobject_loot_template'; // gameobject_loot_template entry many <- many gameobject_template data1 (see its lockType for mining, herbing, fishing or generic looting)
public const ITEM = 'item_loot_template'; // item_loot_template entry many <- one item_template entry
public const DISENCHANT = 'disenchant_loot_template'; // disenchant_loot_template entry many <- many item_template DisenchantID
public const PROSPECTING = 'prospecting_loot_template'; // prospecting_loot_template entry many <- one item_template entry
public const MILLING = 'milling_loot_template'; // milling_loot_template entry many <- one item_template entry
public const PICKPOCKET = 'pickpocketing_loot_template'; // pickpocketing_loot_template entry many <- many creature_template pickpocketloot
public const SKINNING = 'skinning_loot_template'; // skinning_loot_template entry many <- many creature_template skinloot (see the creatures flags for mining, herbing, salvaging or actual skinning)
public const MAIL = 'mail_loot_template'; // mail_loot_template entry quest_template RewMailTemplateId (quest + achievement)
public const SPELL = 'spell_loot_template'; // spell_loot_template entry many <- one spell.dbc id
public const REFERENCE = 'reference_loot_template'; // reference_loot_template entry many <- many *_loot_template reference
protected const TEMPLATES = [self::REFERENCE, self::ITEM, self::DISENCHANT, self::PROSPECTING, self::CREATURE, self::MILLING, self::PICKPOCKET, self::SKINNING, self::FISHING, self::GAMEOBJECT, self::MAIL, self::SPELL];
public array $jsGlobals = [];
protected array $results = [];
/**
* builds stack info string for listview rows
* issue: TC always has an equal distribution between min/max
* and yes, it wants a string .. how weired is that..
*
* @param int $min min amount
* @param int $max max amount
* @return ?string stack info or null on error
*/
protected static function buildStack(int $min, int $max) : ?string
{
if (!$min || !$max || $max <= $min)
return null;
$stack = [];
for ($i = $min; $i <= $max; $i++)
$stack[$i] = round(100 / (1 + $max - $min), 3);
// do not replace with Util::toJSON !
return json_encode($stack, JSON_NUMERIC_CHECK);
}
/**
* @param array $data js global data to store
* @return void
*/
protected function storeJSGlobals(array $data) : void
{
Util::mergeJsGlobals($this->jsGlobals, $data);
}
}
?>