package LumberAndCoinSystem import Creep import Assets import GameTimer public var WOOD_REDISTRIBUTE_THRESHOLD = 15 var WOOD_BOUNTY = 1 public constant COIN_ID = 'I00F' public constant WOOD_ID = 'I00H' var killcount = 0 var killcap = 18. var coinCount = GetRandomInt(-2, 3) var coinCap = 16 var coinsSpawned = 0 constant WOOD_REDISTRIBUTE_MIN_WAIT = 60. var lastRedistribute = 0. /** Add `amt` lumber to each player's pool. If `redistribute`, players with too much lumber will be forced to share. This is gated on having waited at east `WOOD_REDISTRIBUTE_MIN_WAIT` seconds since the last redistribute event. */ public function LinkedList.addLumber(int amt, bool redistribute) for pd in this pd.p.addLumber(amt) if (redistribute and this.size() > 1 and getElapsedGameTime() > (lastRedistribute + WOOD_REDISTRIBUTE_MIN_WAIT)) for pd in this if pd.p.getLumber() > WOOD_REDISTRIBUTE_THRESHOLD lastRedistribute = getElapsedGameTime() let val = (pd.p.getLumber() / allPlayers.size()).toInt() let remainder = pd.p.getLumber() mod allPlayers.size() pd.p.setLumber(remainder) allPlayers.addLumber(val, false) printTimedToPlayer( "Due to inactivity, your lumber has been dispersed amongst your teammates!", 10., pd.p) public function shouldSpawnCoin() returns boolean coinCount++ if coinCount >= coinCap coinCount = 0 coinCap += 4 + GetRandomInt(-1, 2) + (coinsSpawned/4.).round() if bigArena coinCap += 2 coinsSpawned++ return true return false function getExtraBounty() let victim = GetDyingUnit().getOwner() let killer = GetKillingUnit().getOwner() if victim == CREEP_OWNER and killer != CREEP_OWNER pDatas[killer.getId()].kills++ killcount++ if killcount >= killcap killcap += 1 if bigArena killcap += 3 killcap *= 1.015 killcount = 0 let itm = createItem(WOOD_ID, GetDyingUnit().getPos()) doAfter(45.) -> if itm != null and itm.getLife() > .405 itm.remove() function grantCoinsAndLumber() let itm = GetManipulatedItem() if itm.getTypeId() == COIN_ID let gold = itm.getUserData() flashEffect(UI.goldCredit, GetManipulatingUnit().getPos()) printTimed("|cffFFCC00>> " + GetManipulatingUnit().getOwner().getNameColored() + " picked up a coin!", 10.) for p in allPlayers p.p.addGold(gold) if p.builder.actor != null and p.builder.actor.isAlive() createFText(p.builder.getPos() - vec2(16,0), "+" + gold.toString(), 0.024 / 0.0023) ..setDynamic(vec2(0., .03), 3.) .tt..setFadepoint(2.) ..setColor(255, 220, 0, 255) flashEffect(Abilities.resourceEffectTarget, p.builder.getPos()) if itm.getTypeId() == WOOD_ID flashEffect(Objects.entBirthTarget, GetManipulatingUnit().getPos()) printTimed("|cffFFCC00>> " + GetManipulatingUnit().getOwner().getNameColored() + " picked up a lumber bundle!", 10.) allPlayers.addLumber(WOOD_BOUNTY, true) for pd in allPlayers if pd.builder.actor != null and pd.builder.actor.isAlive() createFText(pd.builder.getPos() - vec2(16,0), "+" + WOOD_BOUNTY.toString(), 0.024 / 0.0023) ..setDynamic(vec2(0., .03), 3.) .tt..setFadepoint(2.) ..setColor(0, 200, 80, 255) public function initLumberSystem() if allPlayers.size() <= 2 WOOD_BOUNTY = 2 if bigArena killcap = 32 coinCap = 54 + GetRandomInt(-6,6) EventListener.add(EVENT_PLAYER_UNIT_DEATH, () -> getExtraBounty()) EventListener.add(EVENT_PLAYER_UNIT_PICKUP_ITEM, () -> grantCoinsAndLumber())