Troll-Brain
You can change this now in User CP.
- Reaction score
- 85
JASS:
library SetTrade initializer init uses DRES
globals
public constant integer ALL = 3
public constant integer GIVE = 4
public constant integer RECEIVE = 5
endglobals
globals
private integer ResourceType
private integer TradeType
private boolean Enable
private force GoldForbiddenReceivers
private force GoldForbiddenDonors
private force LumberForbiddenReceivers
private force LumberForbiddenDonors
endglobals
function SetPlayerTrade takes player p, integer resourceType, integer tradeType , boolean enable returns boolean
if p == null then
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the player p argument for the function SetPlayerTrade is null")
return false
endif
if resourceType == DRES_GOLD then
if tradeType == GIVE then
if enable then
call ForceRemovePlayer(GoldForbiddenDonors,p)
else
call ForceAddPlayer(GoldForbiddenDonors,p)
endif
elseif tradeType == RECEIVE then
if enable then
call ForceRemovePlayer(GoldForbiddenReceivers,p)
else
call ForceAddPlayer(GoldForbiddenReceivers,p)
endif
elseif tradeType == DRES_ALL then
if enable then
call ForceRemovePlayer(GoldForbiddenReceivers,p)
call ForceRemovePlayer(GoldForbiddenDonors,p)
else
call ForceAddPlayer(GoldForbiddenReceivers,p)
call ForceAddPlayer(GoldForbiddenDonors,p)
endif
else
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer tradeType argument for the function SetPlayerTrade is invalid")
return false
endif
elseif resourceType == DRES_LUMBER then
if tradeType == GIVE then
if enable then
call ForceRemovePlayer(LumberForbiddenDonors,p)
else
call ForceAddPlayer(LumberForbiddenDonors,p)
endif
elseif tradeType == RECEIVE then
if enable then
call ForceRemovePlayer(LumberForbiddenReceivers,p)
else
call ForceAddPlayer(LumberForbiddenReceivers,p)
endif
elseif tradeType == DRES_ALL then
if enable then
call ForceRemovePlayer(LumberForbiddenReceivers,p)
call ForceRemovePlayer(LumberForbiddenDonors,p)
else
call ForceAddPlayer(LumberForbiddenReceivers,p)
call ForceAddPlayer(LumberForbiddenDonors,p)
endif
else
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer tradeType argument for the function SetPlayerTrade is invalid")
return false
endif
elseif resourceType == DRES_ALL then
if tradeType == GIVE then
if enable then
call ForceRemovePlayer(LumberForbiddenDonors,p)
call ForceRemovePlayer(GoldForbiddenDonors,p)
else
call ForceAddPlayer(LumberForbiddenDonors,p)
call ForceAddPlayer(GoldForbiddenDonors,p)
endif
elseif tradeType == RECEIVE then
if enable then
call ForceRemovePlayer(LumberForbiddenReceivers,p)
call ForceRemovePlayer(GoldForbiddenReceivers,p)
else
call ForceAddPlayer(LumberForbiddenReceivers,p)
call ForceAddPlayer(GoldForbiddenReceivers,p)
endif
elseif tradeType == DRES_ALL then
if enable then
call ForceRemovePlayer(LumberForbiddenReceivers,p)
call ForceRemovePlayer(LumberForbiddenDonors,p)
call ForceRemovePlayer(GoldForbiddenReceivers,p)
call ForceRemovePlayer(GoldForbiddenDonors,p)
else
call ForceAddPlayer(LumberForbiddenReceivers,p)
call ForceAddPlayer(LumberForbiddenDonors,p)
call ForceAddPlayer(GoldForbiddenReceivers,p)
call ForceAddPlayer(GoldForbiddenDonors,p)
endif
else
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer tradeType argument for the function SetPlayerTrade is invalid")
return false
endif
else
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer resourceType argument for the function SetPlayerTrade is invalid")
return false
endif
return true
endfunction
private function SetPlayerTradeForceEnum takes nothing returns nothing
call SetPlayerTrade(GetEnumPlayer(),ResourceType,TradeType,Enable)
endfunction
function SetForceTrade takes force f, integer resourceType, integer tradeType , boolean enable returns boolean
if f == null then
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the force f argument for the function SetPlayerTradeForGroup is invalid")
return false
endif
if resourceType != DRES_GOLD and resourceType != DRES_LUMBER and resourceType != DRES_ALL then
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer resourceType argument for the function SetPlayerTradeForGroup is invalid")
return false
endif
if tradeType != GIVE and tradeType != RECEIVE and tradeType != DRES_ALL then
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer tradeType argument for the function SetPlayerTradeForGroup is invalid")
return false
endif
set ResourceType = resourceType
set TradeType = tradeType
set Enable = enable
call ForForce(f,function SetPlayerTradeForceEnum)
return true
endfunction
function SetTradeForAll takes integer resourceType, integer tradeType, boolean enable returns boolean
local integer i = -1
if resourceType != DRES_GOLD and resourceType != DRES_LUMBER and resourceType != DRES_ALL then
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer resourceType argument for the function SetPlayerTradeForGroup is invalid")
return false
endif
if tradeType != GIVE and tradeType != RECEIVE and tradeType != DRES_ALL then
debug call BJDebugMsg("library " + SCOPE_PREFIX + " : the integer tradeType argument for the function SetPlayerTradeForGroup is invalid")
return false
endif
loop
exitwhen i == 11
set i = i+1
call SetPlayerTrade(Player(i),resourceType,tradeType,enable)
endloop
return true
endfunction
private function AvoidForbiddenTrades takes nothing returns nothing
local eventid evd = GetTriggerEventId()
local player donor
local player receiver
local integer deal
if evd == PLAYER_STATE_RESOURCE_GOLD then
set receiver = GetGoldReceiver()
set donor = GetGoldDonor()
set deal = GetGoldDeal()
if IsPlayerInForce(receiver,GoldForbiddenReceivers) or IsPlayerInForce(donor,GoldForbiddenDonors) then
call SetPlayerState(receiver,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(receiver,PLAYER_STATE_RESOURCE_GOLD)-deal)
call SetPlayerState(donor,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(donor,PLAYER_STATE_RESOURCE_GOLD)+deal)
endif
elseif evd == PLAYER_STATE_RESOURCE_LUMBER then
set receiver = GetLumberReceiver()
set donor = GetLumberDonor()
set deal = GetLumberDeal()
if IsPlayerInForce(receiver,LumberForbiddenReceivers) or IsPlayerInForce(donor,LumberForbiddenDonors) then
call SetPlayerState(receiver,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(receiver,PLAYER_STATE_RESOURCE_GOLD)-deal)
call SetPlayerState(donor,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(donor,PLAYER_STATE_RESOURCE_GOLD)+deal)
endif
endif
endfunction
private function init takes nothing returns nothing
local trigger trig = CreateTrigger()
local force f = CreateForce()
call ForceEnumPlayers(f,null)
call TriggerRegisterTrade(trig,f,DRES_ALL)
call TriggerAddAction(trig,function AvoidForbiddenTrades)
set GoldForbiddenReceivers = CreateForce()
set GoldForbiddenDonors = CreateForce()
set LumberForbiddenReceivers = CreateForce()
set LumberForbiddenDonors = CreateForce()
call DestroyForce(f)
set f = null
endfunction
endlibrary
I know i must make some comments, but first what you think about the functions and constants names ?
And should i add something else to the code ?
It is to handle gold and lumber trade between players (activate / deactivate).
For some reasons if you don't want to use a custom system for the gold/lumber trade between players, but the original warcraft one (menu ally F11), but you want disable/enable it for the player X during the game, for gold and/or lumber, that is for you.
JASS:
JASS:
JASS:
The constants for the resourceType are :
Code:
DRES_GOLD
DRES_LUMBER
DRES_ALL
The constants for the tradeType are :
Code:
SetTrade_ALL
SetTrade_GIVE
SetTrade_RECEIVE