Я решил сделать так, что когда запускается игра и создаются стартовые юниты расе Ночных Эльфов, то все их юниты меняются на стартовых юнитов Алльянса, т.е. Дерево на Town Hall а Духи на Крестьянина. А корни которые оккупируют Gold Mine удаляются. Короче раса игрока полностью должна поменяться на Алльянс. Я раскрыл БЖ которая проверяет расу создаёт юнитов, и изменил там кое что:
Code
function MeleeStartingUnitsConvertHuman takes player whichPlayer, location startLoc, boolean doHeroes, boolean doCamera, boolean doPreload returns nothing local boolean useRandomHero = IsMapFlagSet(MAP_RANDOM_HERO) local real unitSpacing = 64.00 local unit nearestMine local location nearMineLoc local location heroLoc local real peonX local real peonY local unit townHall = null
if (doPreload) then call Preloader( "scripts\\HumanMelee.pld" ) endif
set nearestMine = MeleeFindNearestMine(startLoc, bj_MELEE_MINE_SEARCH_RADIUS) if (nearestMine != null) then set townHall = CreateUnitAtLoc(whichPlayer, 'htow', startLoc, bj_UNIT_FACING)
set heroLoc = Location(peonX, peonY - 2.00 * unitSpacing) endif
if (townHall != null) then call UnitAddAbilityBJ('Amic', townHall) call UnitMakeAbilityPermanentBJ(true, 'Amic', townHall) endif
if (doHeroes) then if useRandomHero then call MeleeRandomHeroLoc(whichPlayer, 'Hamg', 'Hmkg', 'Hpal', 'Hblm', heroLoc) else call SetPlayerState(whichPlayer, PLAYER_STATE_RESOURCE_HERO_TOKENS, bj_MELEE_STARTING_HERO_TOKENS) endif endif
if (doCamera) then call SetCameraPositionForPlayer(whichPlayer, peonX, peonY) call SetCameraQuickPositionForPlayer(whichPlayer, peonX, peonY) endif endfunction
function MeleeStartingUnitsCustom takes nothing returns nothing local integer index local player indexPlayer local location indexStartLoc local race indexRace
call Preloader( "scripts\\SharedMelee.pld" )
set index = 0 loop set indexPlayer = Player(index) if (GetPlayerSlotState(indexPlayer) == PLAYER_SLOT_STATE_PLAYING) then set indexStartLoc = GetStartLocationLoc(GetPlayerStartLocation(indexPlayer)) set indexRace = GetPlayerRace(indexPlayer)
set index = index + 1 exitwhen index == bj_MAX_PLAYERS endloop
endfunction
function Trig_Melee_Initialization_Actions takes nothing returns nothing local integer i = 0 set udg_Hash=InitHashtable() call MeleeStartingVisibility( ) call MeleeStartingHeroLimit( ) call MeleeGrantHeroItems( ) call MeleeStartingResources( ) call MeleeClearExcessUnits( ) call MeleeStartingAI( ) call MeleeInitVictoryDefeat( ) call MeleeStartingUnitsCustom()
loop exitwhen i > 7 if GetPlayerRace( Player(i) ) == RACE_NIGHTELF then call SetPlayerRacePreference( Player(i), RACE_PREF_HUMAN ) endif set i = i + 1 endloop endfunction
//=========================================================================== function InitTrig_Melee_Initialization takes nothing returns nothing set gg_trg_Melee_Initialization = CreateTrigger( ) call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_Melee_Initialization_Actions ) endfunction
Сорри за БЖ, ещё не оптимизировал
Во общем она не работает так как хотелось бы. Да, рабочие только начинают рубить деревья... и всё. Хотя вроде я всё правильно сделал. Помогите плз разобраться
Нет. Я делаю карту с жанром стратегия/мили/развитие, называйте как хотите. Я планирую 3 расы, а в варкрафте их 4. Придумывать ещё 1 расу я не хочу, и поэтому лишняя раса будет заменяться на 1 из сделанных 3-х.
function Trig_Melee_Initialization_Actions takes nothing returns nothing local integer i = 0 set udg_Hash=InitHashtable() call MeleeStartingVisibility( ) call MeleeStartingHeroLimit( ) call MeleeGrantHeroItems( ) call MeleeStartingResources( ) call MeleeClearExcessUnits( ) call MeleeStartingAI( ) call MeleeInitVictoryDefeat( ) call MeleeStartingUnitsCustom()
loop exitwhen i > 7 if GetPlayerRace( Player(i) ) == RACE_NIGHTELF then call SetPlayerRacePreference( Player(i), RACE_PREF_HUMAN ) endif set i = i + 1 endloop endfunction
Мне кажется, или цикл следует поставить до функций инициализации? Кстати, еще возможно, что SetPlayerRacePreference можно использовать только в функции config.
создаются стартовые юниты расе Ночных Эльфов, то все их юниты меняются на стартовых юнитов Алльянса, т.е. Дерево на Town Hall а Духи на Крестьянина. А корни которые оккупируют Gold Mine удаляются. Короче раса игрока полностью должна поменяться на Алльянс.
Сделай все по статье SirNikolas, не всегда смотря какие переменный в условиях используются.