Name | Type | is_array | initial_value |
PRM_Change | integer | No | |
PRM_EVENT | real | No | |
PRM_FireEvent | boolean | No | |
PRM_GoldLevel | integer | Yes | |
PRM_LumberLevel | integer | Yes | |
PRM_MonitorPlayer | boolean | Yes | |
PRM_Player | player | No |
//TESH.scrollpos=48
//TESH.alwaysfold=0
//===============================================
// Player Resources Monitoring ver 1.01
// fires an event when gold/lumber has changed
// Use Event: "Game PRM_EVENT becomes Equal to 1.00" to detect gold changes
// Use Event: "Game PRM_EVENT becomes Equal to 2.00" to detect lumber changes
// Use "PRM_Player" to filter who's resource changed
// "PRM_Change" is the amount of gold (or lumber) player gain or lose on event
// (can be positive or negative).
// If boolean "PRM_MonitorPlayer[gui-player-number]" is set to false then corresponding
// player will not be monitored, anyway by default all (16) players are monitored.
// If you want to add/subtract/set resource *inside* PRM_EVENT trigger then:
// 1. set boolean "PRM_FireEvent" to false
// 2. add/subtract/set resource
// 3. set boolean "PRM_FireEvent" to true
// --------------------------------------
// happy mapping;] ZibiTheWand3r3r
//================================================
function PRM_Monitor takes nothing returns boolean
local player p = GetTriggerPlayer()
local integer id = GetPlayerId(p)
local integer g = GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD)
local integer l = GetPlayerState(p, PLAYER_STATE_RESOURCE_LUMBER)
if not udg_PRM_MonitorPlayer[id+1] then // keep up-to date player's resources:
set udg_PRM_GoldLevel[id] = g
set udg_PRM_LumberLevel[id] = l
return false
endif
set udg_PRM_Player = p
if g != udg_PRM_GoldLevel[id] then //gold change detected
set udg_PRM_Change = g - udg_PRM_GoldLevel[id]
set udg_PRM_GoldLevel[id] = g
if udg_PRM_FireEvent then
set udg_PRM_EVENT = 0.00
set udg_PRM_EVENT = 1.00
endif
elseif l != udg_PRM_LumberLevel[id] then // lumber change detected
set udg_PRM_Change = l - udg_PRM_LumberLevel[id]
set udg_PRM_LumberLevel[id] = l
if udg_PRM_FireEvent then
set udg_PRM_EVENT = 0.00
set udg_PRM_EVENT = 2.00
endif
endif
return false
endfunction
//================================================
//================================================
function InitTrig_PRM takes nothing returns nothing
local integer id=0
set gg_trg_PRM = CreateTrigger( )
set udg_PRM_EVENT = 0.00
set udg_PRM_Change = 0
set udg_PRM_FireEvent = true
set udg_PRM_Player = Player(0)
loop
set udg_PRM_GoldLevel[id] = GetPlayerState(Player(id), PLAYER_STATE_RESOURCE_GOLD)
set udg_PRM_LumberLevel[id] = GetPlayerState(Player(id), PLAYER_STATE_RESOURCE_LUMBER)
set udg_PRM_MonitorPlayer[id+1] = true // for gui use range: 1-16
call TriggerRegisterPlayerStateEvent(gg_trg_PRM, Player(id), PLAYER_STATE_RESOURCE_GOLD, NOT_EQUAL, 0.00)
call TriggerRegisterPlayerStateEvent(gg_trg_PRM, Player(id), PLAYER_STATE_RESOURCE_GOLD, EQUAL, 0.00)
call TriggerRegisterPlayerStateEvent(gg_trg_PRM, Player(id), PLAYER_STATE_RESOURCE_LUMBER, NOT_EQUAL, 0.00)
call TriggerRegisterPlayerStateEvent(gg_trg_PRM, Player(id), PLAYER_STATE_RESOURCE_LUMBER, EQUAL, 0.00)
set id=id+1
exitwhen id == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition(gg_trg_PRM, Condition(function PRM_Monitor))
endfunction