44 lines
3.0 KiB
Python
44 lines
3.0 KiB
Python
"""Execute production recruitment admission against native bracket adapters."""
|
|
from pathlib import Path
|
|
import subprocess,tempfile
|
|
root=Path(__file__).resolve().parents[2]
|
|
s=(root/'src/server/game/World/AdventureGroupMgr.cpp').read_text();a=s.index('bool BattlegroundCompatible(');b=s.index('{',a);end=b+1;depth=1
|
|
while depth:
|
|
depth+=(s[end]=='{')-(s[end]=='}');end+=1
|
|
c=s.index('bool BrowserOfferEnabled(');d=s.index('{',c);ce=d+1;depth=1
|
|
while depth:
|
|
depth+=(s[ce]=='{')-(s[ce]=='}');ce+=1
|
|
code=r'''
|
|
#include <cassert>
|
|
constexpr unsigned BATTLEGROUND_WS=2,BATTLEGROUND_RB=32;
|
|
struct Player{unsigned level;unsigned getLevel(){return level;}};
|
|
struct BG{unsigned GetMapId(){return 489;}};
|
|
struct Mgr{bool available=true;unsigned selected=0;BG bg;BG*GetBattlegroundTemplate(unsigned id){selected=id;return available?&bg:nullptr;}}manager;auto sBattlegroundMgr=&manager;
|
|
struct Bracket{unsigned id;unsigned GetBracketId()const{return id;}};
|
|
struct DB{Bracket brackets[5]={{0},{1},{2},{3},{4}};Bracket const*GetBattlegroundBracketByLevel(unsigned map,unsigned level){assert(map==489);if(level<10)return nullptr;return &brackets[level<18?0:level<30?1:level<45?2:level<85?3:4];}}sDBCManager;
|
|
'''+s[a:end]+r'''
|
|
namespace lfg{constexpr unsigned LFG_TYPE_RAID=2,LFG_OPTION_ENABLE_RAID_BROWSER=2,LFG_OPTION_ENABLE_DUNGEON_FINDER=1;struct LFGDungeonData{unsigned type;bool raidMap;};}
|
|
struct LfgMgr{unsigned options=1;bool isOptionEnabled(unsigned value){return (options&value)!=0;}}lfgManager;auto sLFGMgr=&lfgManager;
|
|
'''+s[c:ce]+r'''
|
|
int main(){
|
|
lfg::LFGDungeonData dragonSoul{1,true},legacyRaid{2,true},dungeon{1,false};
|
|
assert(BrowserOfferEnabled(dragonSoul)&&BrowserOfferEnabled(dungeon)&&!BrowserOfferEnabled(legacyRaid));
|
|
lfgManager.options=2;assert(!BrowserOfferEnabled(dragonSoul)&&!BrowserOfferEnabled(dungeon)&&BrowserOfferEnabled(legacyRaid));
|
|
lfgManager.options=0;assert(!BrowserOfferEnabled(dragonSoul)&&!BrowserOfferEnabled(legacyRaid));
|
|
Player a{10},b{10};assert(BattlegroundCompatible(&a,&b)&&manager.selected==BATTLEGROUND_WS);
|
|
a.level=9;assert(!BattlegroundCompatible(&a,&b));
|
|
a.level=17;b.level=18;assert(!BattlegroundCompatible(&a,&b)); // custom native boundary, not a hardcoded five-level formula
|
|
a.level=30;b.level=34;assert(BattlegroundCompatible(&a,&b));
|
|
a.level=44;b.level=45;assert(!BattlegroundCompatible(&a,&b));
|
|
a.level=45;b.level=44;assert(!BattlegroundCompatible(&a,&b));
|
|
a.level=45;b.level=46;assert(BattlegroundCompatible(&a,&b)&&manager.selected==BATTLEGROUND_RB);
|
|
a.level=85;b.level=84;assert(!BattlegroundCompatible(&a,&b));
|
|
b.level=85;assert(BattlegroundCompatible(&a,&b));manager.available=false;assert(!BattlegroundCompatible(&a,&b));
|
|
}
|
|
'''
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
p=Path(directory);(p/'brackets.cpp').write_text(code)
|
|
subprocess.run(['g++','-std=c++17',str(p/'brackets.cpp'),'-o',str(p/'brackets')],check=True)
|
|
subprocess.run([str(p/'brackets')],check=True)
|
|
print('Production BG recruitment uses native brackets, minimum levels, random eligibility and available templates; native Type1 LFR and legacy Type2 browser options.')
|