Ich habe mittlerweile 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