[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
Ich habe mittlerweile [[utilfunctions:subfromplayersresources|diese]] Alternative erfunden, die kürzer und unproblematischer ist und obendrein noch etwas mehr leistet (kombinierte Bezahlungen unterschiedlicher Rohstoffe können leichter realisiert werden).\\
\\
====== Beschreibung ======
Wenn man dem Spieler per Skript Ressourcen abziehen will, muss man meistens erstmal einen umständlichen Check einbauen, ob denn genug Rohstoffe da sind. Mit...
ActivateAddResourcesExpansion()
...im Skript wird dieser Check beim Verwenden von AddGold, AddWood, AddClay, AddStone, AddIron oder AddSulfur automatisch durchgeführt. Wenn nicht genug Waren da sind, wird eine passende Warnung des Mentors ausgegeben, und außerdem eine Message mit der fehlenden Menge. Die 6 Funktionen geben nun außerdem 2 Werte zurück, zum Einen true oder false, je nach dem ob die Transaktion durchgeführt werden konnte, und zum Anderen die Menge der fehlenden Rohstoffe (bei true natürlich 0).
--Beispiel:
local hasDone,missing = AddGold(-500);
if not hasDone then
Message(missing);
end
===== Code =====
function ActivateAddResourcesExpansion()
AddGold_OrigExp = AddGold;
AddClay_OrigExp = AddClay;
AddWood_OrigExp = AddWood;
AddStone_OrigExp = AddStone;
AddIron_OrigExp = AddIron;
AddSulfur_OrigExp = AddSulfur;
AddGold = function(id,res)
if res then assert((type(id)=="number") and (id>=1) and (id<=8));
else res = id; id = nil; end
assert(type(res)=="number");
if (not id or id == 1) then
id = 1;
local gold = GetGold(id);
if (gold+res) < 0 then
local goldmissing = -(gold+res);
Message( goldmissing.." Taler fehlen im Säckel!" )
Sound.PlayQueuedFeedbackSound( Sounds.VoicesMentor_INFO_NotEnoughGold_rnd_01, 0 );
return false,goldmissing;
else
AddGold_OrigExp(id,res);
return true,0;
end
else
AddGold_OrigExp(id,res);
end
end
AddClay = function(id,res)
if res then assert((type(id)=="number") and (id>=1) and (id<=8));
else res = id; id = nil; end
assert(type(res)=="number");
if (not id or id == 1) then
id = 1;
local clay = GetClay(id);
if (clay+res) < 0 then
local claymissing = -(clay+res);
Message( claymissing.." Lehm fehlt!" )
Sound.PlayQueuedFeedbackSound( Sounds.VoicesMentor_INFO_NotEnoughClay_rnd_01, 0 );
return false,claymissing;
else
AddClay_OrigExp(id,res);
return true,0;
end
else
AddClay_OrigExp(id,res);
end
end
AddWood = function(id,res)
if res then assert((type(id)=="number") and (id>=1) and (id<=8));
else res = id; id = nil; end
assert(type(res)=="number");
if (not id or id == 1) then
id = 1;
local wood = GetWood(id);
if (wood+res) < 0 then
local woodmissing = -(wood+res);
Message( woodmissing.." Holz muss noch geschlagen werden!" )
Sound.PlayQueuedFeedbackSound( Sounds.VoicesMentor_INFO_NotEnoughWood_rnd_01, 0 );
return false,woodmissing;
else
AddWood_OrigExp(id,res);
return true,0;
end
else
AddWood_OrigExp(id,res);
end
end
AddStone = function(id,res)
if res then assert((type(id)=="number") and (id>=1) and (id<=8));
else res = id; id = nil; end
assert(type(res)=="number");
if (not id or id == 1) then
id = 1;
local stone = GetStone(id);
if (stone+res) < 0 then
local stonemissing = -(stone+res);
Message( stonemissing.." Stein muss noch beschafft werden!" )
Sound.PlayQueuedFeedbackSound( Sounds.VoicesMentor_INFO_NotEnoughStone_rnd_01, 0 );
return false,stonemissing;
else
AddStone_OrigExp(id,res);
return true,0;
end
else
AddStone_OrigExp(id,res);
end
end
AddIron = function(id,res)
if res then assert((type(id)=="number") and (id>=1) and (id<=8));
else res = id; id = nil; end
assert(type(res)=="number");
if (not id or id == 1) then
id = 1;
local iron = GetIron(id);
if (iron+res) < 0 then
local ironmissing = -(iron+res);
Message( ironmissing.." Eisen fehlt!" )
Sound.PlayQueuedFeedbackSound( Sounds.VoicesMentor_INFO_NotEnoughIron_rnd_01, 0 );
return false,ironmissing;
else
AddIron_OrigExp(id,res);
return true,0;
end
else
AddIron_OrigExp(id,res);
end
end
AddSulfur = function(id,res)
if res then assert((type(id)=="number") and (id>=1) and (id<=8));
else res = id; id = nil; end
assert(type(res)=="number");
if (not id or id == 1) then
id = 1;
local sulfur = GetSulfur(id);
if (sulfur+res) < 0 then
local sulfurmissing = -(sulfur+res);
Message( sulfurmissing.." Schwefel wird noch benötigt!" )
Sound.PlayQueuedFeedbackSound( Sounds.VoicesMentor_INFO_NotEnoughSulfur_rnd_01, 0 );
return false,sulfurmissing;
else
AddSulfur_OrigExp(id,res);
return true,0;
end
else
AddSulfur_OrigExp(id,res);
end
end
end