mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
Locks
* reworked how an dwhen locks on GameObjects and Items are displayed * added structure for LockType.dbc
This commit is contained in:
@@ -481,6 +481,10 @@ define('TEAM_ALLIANCE', 0);
|
|||||||
define('TEAM_HORDE', 1);
|
define('TEAM_HORDE', 1);
|
||||||
define('TEAM_NEUTRAL', 2);
|
define('TEAM_NEUTRAL', 2);
|
||||||
|
|
||||||
|
// Lock Types
|
||||||
|
define('LOCK_TYPE_ITEM', 1);
|
||||||
|
define('LOCK_TYPE_SKILL', 2);
|
||||||
|
|
||||||
// Lock-Properties (also categorizes GOs)
|
// Lock-Properties (also categorizes GOs)
|
||||||
define('LOCK_PROPERTY_FOOTLOCKER', 1);
|
define('LOCK_PROPERTY_FOOTLOCKER', 1);
|
||||||
define('LOCK_PROPERTY_HERBALISM', 2);
|
define('LOCK_PROPERTY_HERBALISM', 2);
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class GameObjectList extends BaseType
|
|||||||
if (isset($this->curTpl['lockId']))
|
if (isset($this->curTpl['lockId']))
|
||||||
if ($locks = Lang::getLocks($this->curTpl['lockId']))
|
if ($locks = Lang::getLocks($this->curTpl['lockId']))
|
||||||
foreach ($locks as $l)
|
foreach ($locks as $l)
|
||||||
$x .= '<tr><td>'.$l.'</td></tr>';
|
$x .= '<tr><td>'.sprintf(Lang::game('requires'), $l).'</td></tr>';
|
||||||
|
|
||||||
$x .= '</table>';
|
$x .= '</table>';
|
||||||
|
|
||||||
|
|||||||
@@ -918,8 +918,8 @@ class ItemList extends BaseType
|
|||||||
$x .= sprintf(Lang::game('requires'), '<a class="q1" href="?faction='.$reqFac.'">'.FactionList::getName($reqFac).'</a> - '.Lang::game('rep', $this->curTpl['requiredFactionRank'])).'<br />';
|
$x .= sprintf(Lang::game('requires'), '<a class="q1" href="?faction='.$reqFac.'">'.FactionList::getName($reqFac).'</a> - '.Lang::game('rep', $this->curTpl['requiredFactionRank'])).'<br />';
|
||||||
|
|
||||||
// locked or openable
|
// locked or openable
|
||||||
if ($locks = Lang::getLocks($this->curTpl['lockId'], true))
|
if ($locks = Lang::getLocks($this->curTpl['lockId'], $arr, true, true))
|
||||||
$x .= '<span class="q0">'.Lang::item('locked').'<br />'.implode('<br />', $locks).'</span><br />';
|
$x .= '<span class="q0">'.Lang::item('locked').'<br />'.implode('<br />', array_map(function($x) { return sprintf(Lang::game('requires'), $x); }, $locks)).'</span><br />';
|
||||||
else if ($this->curTpl['flags'] & ITEM_FLAG_OPENABLE)
|
else if ($this->curTpl['flags'] & ITEM_FLAG_OPENABLE)
|
||||||
$x .= '<span class="q2">'.Lang::item('openClick').'</span><br />';
|
$x .= '<span class="q2">'.Lang::item('openClick').'</span><br />';
|
||||||
|
|
||||||
|
|||||||
@@ -525,21 +525,21 @@ class Util
|
|||||||
if ($short)
|
if ($short)
|
||||||
{
|
{
|
||||||
if ($_ = round($d / 364))
|
if ($_ = round($d / 364))
|
||||||
return $_." ".Lang::timeUnits('ab', 0);
|
return $_." ".Lang::timeUnits('ab', 0);
|
||||||
if ($_ = round($d / 30))
|
if ($_ = round($d / 30))
|
||||||
return $_." ".Lang::timeUnits('ab', 1);
|
return $_." ".Lang::timeUnits('ab', 1);
|
||||||
if ($_ = round($d / 7))
|
if ($_ = round($d / 7))
|
||||||
return $_." ".Lang::timeUnits('ab', 2);
|
return $_." ".Lang::timeUnits('ab', 2);
|
||||||
if ($_ = round($d))
|
if ($_ = round($d))
|
||||||
return $_." ".Lang::timeUnits('ab', 3);
|
return $_." ".Lang::timeUnits('ab', 3);
|
||||||
if ($_ = round($h))
|
if ($_ = round($h))
|
||||||
return $_." ".Lang::timeUnits('ab', 4);
|
return $_." ".Lang::timeUnits('ab', 4);
|
||||||
if ($_ = round($m))
|
if ($_ = round($m))
|
||||||
return $_." ".Lang::timeUnits('ab', 5);
|
return $_." ".Lang::timeUnits('ab', 5);
|
||||||
if ($_ = round($s + $ms / 1000, 2))
|
if ($_ = round($s + $ms / 1000, 2))
|
||||||
return $_." ".Lang::timeUnits('ab', 6);
|
return $_." ".Lang::timeUnits('ab', 6);
|
||||||
if ($ms)
|
if ($ms)
|
||||||
return $ms." ".Lang::timeUnits('ab', 7);
|
return $ms." ".Lang::timeUnits('ab', 7);
|
||||||
|
|
||||||
return '0 '.Lang::timeUnits('ab', 6);
|
return '0 '.Lang::timeUnits('ab', 6);
|
||||||
}
|
}
|
||||||
@@ -547,19 +547,19 @@ class Util
|
|||||||
{
|
{
|
||||||
$_ = $d + $h / 24;
|
$_ = $d + $h / 24;
|
||||||
if ($_ > 1 && !($_ % 364)) // whole years
|
if ($_ > 1 && !($_ % 364)) // whole years
|
||||||
return round(($d + $h / 24) / 364, 2)." ".Lang::timeUnits($d / 364 == 1 && !$h ? 'sg' : 'pl', 0);
|
return round(($d + $h / 24) / 364, 2)." ".Lang::timeUnits($d / 364 == 1 && !$h ? 'sg' : 'pl', 0);
|
||||||
if ($_ > 1 && !($_ % 30)) // whole month
|
if ($_ > 1 && !($_ % 30)) // whole month
|
||||||
return round(($d + $h / 24) / 30, 2)." ".Lang::timeUnits($d / 30 == 1 && !$h ? 'sg' : 'pl', 1);
|
return round(($d + $h / 24) / 30, 2)." ".Lang::timeUnits($d / 30 == 1 && !$h ? 'sg' : 'pl', 1);
|
||||||
if ($_ > 1 && !($_ % 7)) // whole weeks
|
if ($_ > 1 && !($_ % 7)) // whole weeks
|
||||||
return round(($d + $h / 24) / 7, 2)." ".Lang::timeUnits($d / 7 == 1 && !$h ? 'sg' : 'pl', 2);
|
return round(($d + $h / 24) / 7, 2)." ".Lang::timeUnits($d / 7 == 1 && !$h ? 'sg' : 'pl', 2);
|
||||||
if ($d)
|
if ($d)
|
||||||
return round($d + $h / 24, 2)." ".Lang::timeUnits($d == 1 && !$h ? 'sg' : 'pl', 3);
|
return round($d + $h / 24, 2)." ".Lang::timeUnits($d == 1 && !$h ? 'sg' : 'pl', 3);
|
||||||
if ($h)
|
if ($h)
|
||||||
return round($h + $m / 60, 2)." ".Lang::timeUnits($h == 1 && !$m ? 'sg' : 'pl', 4);
|
return round($h + $m / 60, 2)." ".Lang::timeUnits($h == 1 && !$m ? 'sg' : 'pl', 4);
|
||||||
if ($m)
|
if ($m)
|
||||||
return round($m + $s / 60, 2)." ".Lang::timeUnits($m == 1 && !$s ? 'sg' : 'pl', 5);
|
return round($m + $s / 60, 2)." ".Lang::timeUnits($m == 1 && !$s ? 'sg' : 'pl', 5);
|
||||||
if ($s)
|
if ($s)
|
||||||
return round($s + $ms / 1000, 2)." ".Lang::timeUnits($s == 1 && !$ms ? 'sg' : 'pl', 6);
|
return round($s + $ms / 1000, 2)." ".Lang::timeUnits($s == 1 && !$ms ? 'sg' : 'pl', 6);
|
||||||
if ($ms)
|
if ($ms)
|
||||||
return $ms." ".Lang::timeUnits($ms == 1 ? 'sg' : 'pl', 7);
|
return $ms." ".Lang::timeUnits($ms == 1 ? 'sg' : 'pl', 7);
|
||||||
|
|
||||||
|
|||||||
@@ -227,9 +227,10 @@ class Lang
|
|||||||
return $tmp;
|
return $tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getLocks($lockId, $interactive = false)
|
public static function getLocks(int $lockId, ?array &$ids = [], bool $interactive = false, bool $asHTML = false) : array
|
||||||
{
|
{
|
||||||
$locks = [];
|
$locks = [];
|
||||||
|
$ids = [];
|
||||||
$lock = DB::Aowow()->selectRow('SELECT * FROM ?_lock WHERE id = ?d', $lockId);
|
$lock = DB::Aowow()->selectRow('SELECT * FROM ?_lock WHERE id = ?d', $lockId);
|
||||||
if (!$lock)
|
if (!$lock)
|
||||||
return $locks;
|
return $locks;
|
||||||
@@ -240,47 +241,71 @@ class Lang
|
|||||||
$rank = $lock['reqSkill'.$i];
|
$rank = $lock['reqSkill'.$i];
|
||||||
$name = '';
|
$name = '';
|
||||||
|
|
||||||
if ($lock['type'.$i] == 1) // opened by item
|
if ($lock['type'.$i] == LOCK_TYPE_ITEM)
|
||||||
{
|
{
|
||||||
$name = ItemList::getName($prop);
|
$name = ItemList::getName($prop);
|
||||||
if (!$name)
|
if (!$name)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ($interactive)
|
if ($interactive && $asHTML)
|
||||||
$name = '<a class="q1" href="?item='.$prop.'">'.$name.'</a>';
|
$name = '<a class="q1" href="?item='.$prop.'">'.$name.'</a>';
|
||||||
|
else if ($interactive && !$asHTML)
|
||||||
|
{
|
||||||
|
$name = '[item='.$prop.']';
|
||||||
|
$ids[TYPE_ITEM][] = $prop;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if ($lock['type'.$i] == 2) // opened by skill
|
else if ($lock['type'.$i] == LOCK_TYPE_SKILL)
|
||||||
{
|
{
|
||||||
// exclude unusual stuff
|
|
||||||
if (!in_array($prop, [1, 2, 3, 4, 9, 16, 20]))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$name = self::spell('lockType', $prop);
|
$name = self::spell('lockType', $prop);
|
||||||
if (!$name)
|
if (!$name)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ($interactive)
|
// skills
|
||||||
|
if (in_array($prop, [1, 2, 3, 20]))
|
||||||
{
|
{
|
||||||
$skill = 0;
|
$skills = array(
|
||||||
switch ($prop)
|
1 => SKILL_LOCKPICKING,
|
||||||
|
2 => SKILL_HERBALISM,
|
||||||
|
3 => SKILL_MINING,
|
||||||
|
20 => SKILL_INSCRIPTION
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($interactive && $asHTML)
|
||||||
|
$name = '<a href="?skill='.$skills[$prop].'">'.$name.'</a>';
|
||||||
|
else if ($interactive && !$asHTML)
|
||||||
{
|
{
|
||||||
case 1: $skill = 633; break; // Lockpicking
|
$name = '[skill='.$skills[$prop].']';
|
||||||
case 2: $skill = 182; break; // Herbing
|
$ids[TYPE_SKILL][] = $skills[$prop];
|
||||||
case 3: $skill = 186; break; // Mining
|
|
||||||
case 20: $skill = 773; break; // Scribing
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($skill)
|
if ($rank > 0)
|
||||||
$name = '<a href="?skill='.$skill.'">'.$name.'</a>';
|
$name .= ' ('.$rank.')';
|
||||||
}
|
}
|
||||||
|
// Lockpicking
|
||||||
if ($rank > 0)
|
else if ($prop == 4)
|
||||||
$name .= ' ('.$rank.')';
|
{
|
||||||
|
if ($interactive && $asHTML)
|
||||||
|
$name = '<a href="?spell=1842">'.$name.'</a>';
|
||||||
|
else if ($interactive && !$asHTML)
|
||||||
|
{
|
||||||
|
$name = '[spell=1842]';
|
||||||
|
$ids[TYPE_SPELL][] = 1842;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// exclude unusual stuff
|
||||||
|
else if (User::isInGroup(U_GROUP_STAFF))
|
||||||
|
{
|
||||||
|
if ($rank > 0)
|
||||||
|
$name .= ' ('.$rank.')';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$locks[$lock['type'.$i] == 1 ? $prop : -$prop] = sprintf(self::game('requires'), $name);
|
$locks[$lock['type'.$i] == LOCK_TYPE_ITEM ? $prop : -$prop] = $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $locks;
|
return $locks;
|
||||||
|
|||||||
@@ -101,20 +101,22 @@ class ObjectPage extends GenericPage
|
|||||||
break;
|
break;
|
||||||
default: // requires key .. maybe
|
default: // requires key .. maybe
|
||||||
{
|
{
|
||||||
$locks = Lang::getLocks($this->subject->getField('lockId'));
|
$locks = Lang::getLocks($this->subject->getField('lockId'), $ids, true);
|
||||||
$l = '';
|
$l = [];
|
||||||
foreach ($locks as $idx => $_)
|
|
||||||
{
|
|
||||||
if ($idx < 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$this->extendGlobalIds(TYPE_ITEM, $idx);
|
foreach ($ids as $type => $typeIds)
|
||||||
$l = Lang::gameObject('key').Lang::main('colon').'[item='.$idx.']';
|
$this->extendGlobalIds($type, ...$typeIds);
|
||||||
|
|
||||||
|
foreach ($locks as $idx => $str)
|
||||||
|
{
|
||||||
|
if ($idx > 0)
|
||||||
|
$l[] = Lang::gameObject('key').Lang::main('colon').$str;
|
||||||
|
else if ($idx < 0)
|
||||||
|
$l[] = sprintf(Lang::game('requires'), $str);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no propper item is found use a skill
|
if ($l)
|
||||||
if ($locks)
|
$infobox[] = implode('[br]', $l);
|
||||||
$infobox[] = $l ?: array_pop($locks);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ class DBC
|
|||||||
'itemsubclass' => 'iixxxxxxxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
'itemsubclass' => 'iixxxxxxxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
||||||
'lfgdungeons' => 'nsxsssxsxsxxxxxxxxiiiiiiixiixixixxxxxxxxxxxxxxxxx',
|
'lfgdungeons' => 'nsxsssxsxsxxxxxxxxiiiiiiixiixixixxxxxxxxxxxxxxxxx',
|
||||||
'lock' => 'niiiiixxxiiiiixxxiiiiixxxxxxxxxxx',
|
'lock' => 'niiiiixxxiiiiixxxiiiiixxxxxxxxxxx',
|
||||||
|
'locktype' => 'nsxsssxsxsxxxxxxxxsxsssxsxsxxxxxxxxsxsssxsxsxxxxxxxxs',
|
||||||
'mailtemplate' => 'nsxsssxsxsxxxxxxxxsxsssxsxsxxxxxxxx',
|
'mailtemplate' => 'nsxsssxsxsxxxxxxxxsxsssxsxsxxxxxxxx',
|
||||||
'map' => 'nsixisxsssxsxsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiffxixi',
|
'map' => 'nsixisxsssxsxsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiffxixi',
|
||||||
'mapdifficulty' => 'niixxxxxxxxxxxxxxxxxxis',
|
'mapdifficulty' => 'niixxxxxxxxxxxxxxxxxxis',
|
||||||
@@ -195,6 +196,7 @@ class DBC
|
|||||||
'itemsubclass' => 'class,subClass,weaponSize',
|
'itemsubclass' => 'class,subClass,weaponSize',
|
||||||
'lfgdungeons' => 'id,name_loc0,name_loc2,name_loc3,name_loc4,name_loc6,name_loc8,levelMin,levelMax,targetLevel,targetLevelMin,targetLevelMax,mapId,difficulty,type,faction,expansion,groupId',
|
'lfgdungeons' => 'id,name_loc0,name_loc2,name_loc3,name_loc4,name_loc6,name_loc8,levelMin,levelMax,targetLevel,targetLevelMin,targetLevelMax,mapId,difficulty,type,faction,expansion,groupId',
|
||||||
'lock' => 'id,type1,type2,type3,type4,type5,properties1,properties2,properties3,properties4,properties5,reqSkill1,reqSkill2,reqSkill3,reqSkill4,reqSkill5',
|
'lock' => 'id,type1,type2,type3,type4,type5,properties1,properties2,properties3,properties4,properties5,reqSkill1,reqSkill2,reqSkill3,reqSkill4,reqSkill5',
|
||||||
|
'locktype' => 'id,name_loc0,name_loc2,name_loc3,name_loc4,name_loc6,name_loc8,state_loc0,state_loc2,state_loc3,state_loc4,state_loc6,state_loc8,process_loc0,process_loc2,process_loc3,process_loc4,process_loc6,process_loc8,strref',
|
||||||
'mailtemplate' => 'id,subject_loc0,subject_loc2,subject_loc3,subject_loc4,subject_loc6,subject_loc8,text_loc0,text_loc2,text_loc3,text_loc4,text_loc6,text_loc8',
|
'mailtemplate' => 'id,subject_loc0,subject_loc2,subject_loc3,subject_loc4,subject_loc6,subject_loc8,text_loc0,text_loc2,text_loc3,text_loc4,text_loc6,text_loc8',
|
||||||
'map' => 'id,nameINT,areaType,isBG,name_loc0,name_loc2,name_loc3,name_loc4,name_loc6,name_loc8,parentMapId,parentX,parentY,expansion,maxPlayers',
|
'map' => 'id,nameINT,areaType,isBG,name_loc0,name_loc2,name_loc3,name_loc4,name_loc6,name_loc8,parentMapId,parentX,parentY,expansion,maxPlayers',
|
||||||
'mapdifficulty' => 'id,mapId,difficulty,nPlayer,nPlayerString',
|
'mapdifficulty' => 'id,mapId,difficulty,nPlayer,nPlayerString',
|
||||||
|
|||||||
Reference in New Issue
Block a user