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…
SubFromPlayersResources( _id, _gold, _clay, _wood, _stone, _iron, _sulfur )
…wird diese Überprüfung automatisch durchgeführt. Wenn nicht genug Waren da sind, werden passende Warnungen des Mentors ausgegeben, und außerdem eine Message mit der fehlenden Menge der jeweiligen Ressource. Die Funktion gibt als ersten Wert true oder false zurück, je nachdem ob die Transaktion durchgeführt werden konnte. Im Falle von false werden außerdem (in folgender Reihenfolge) die fehlenden Mengen an Talern, Lehm, Holz, Stein, Eisen und Schwefel zurückgegeben.
-- Spieler 1 soll 200 Taler bezahlen: local paid,goldmissing = SubFromPlayersResources( 1, 200, 0, 0, 0, 0, 0 ); -- nicht benötigte Rückgabewerte müssen nicht gespeichert werden if paid then --Wenn true zurückgegeben wurde -> Es war genug Geld vorhanden... CreateSoeldner(); --Beispiel für eine Folgefunktion else Message(goldmissing); --Die fehlenden Taler werden als Message ausgegeben; nicht wirklich nötig, hier nur zur Demonstration end -- Der Spieler soll 100 Taler, 200 Lehm, 300 Holz, 400 Steine, 500 Eisen und 600 Schwefel bezahlen: local paid,goldmissing,claymissing,woodmissing,stonemissing,ironmissing,sulfurmissing = SubFromPlayersResources( 1, 100, 200, 300, 400, 500, 600 ); if paid then StelleHaendlerZufrieden(); else Sound.PlayQueuedFeedbackSound(Sounds.AOVoicesScout_Scout_NO_rnd_01,0); end -- Der Spieler soll 1000 Holz und 379 Steine bezahlen: local paid,_,_,woodmissing,stonemissing = SubFromPlayersResources( 1, 0, 0, 1000, 379, 0, 0 ); -- Die Rückgabewerte für fehlende Taler und fehlenden Lehm werden hier nicht gebraucht, müssen aber gespeichert werden. Daher der Unterstrich als Platzhalter if paid then BaueSchutzwall(); else if woodmissing > 0 then Message("Ohne Holz nix los!"); end if stonemissing > 0 then Message("Rocky Horror - Steine fehlen!"); end end
Das hier muss einfach nur im Skript stehen:
function SubFromPlayersResources( _id, _gold, _clay, _wood, _stone, _iron, _sulfur ) local goldmissing,claymissing,woodmissing,stonemissing,ironmissing,sulfurmissing = 0,0,0,0,0,0; if _gold > 0 then local gold = GetGold(_id); if (gold-_gold) < 0 then goldmissing = (math.floor(_gold)-math.floor(gold)); Message(goldmissing.." Taler fehlen im Säckel!") Sound.PlayQueuedFeedbackSound(Sounds.VoicesMentor_INFO_NotEnoughGold_rnd_01,0); end end if _clay > 0 then local clay = GetClay(_id); if (clay-_clay) < 0 then claymissing = (math.floor(_clay)-math.floor(clay)); Message(claymissing.." Lehm fehlt!") Sound.PlayQueuedFeedbackSound(Sounds.VoicesMentor_INFO_NotEnoughClay_rnd_01,0); end end if _wood > 0 then local wood = GetWood(_id); if (wood-_wood) < 0 then woodmissing = (math.floor(_wood)-math.floor(wood)); Message(woodmissing.." Holz muss noch geschlagen werden!") Sound.PlayQueuedFeedbackSound(Sounds.VoicesMentor_INFO_NotEnoughWood_rnd_01,0); end end if _stone > 0 then local stone = GetStone(_id); if (stone-_stone) < 0 then stonemissing = (math.floor(_stone)-math.floor(stone)); Message(stonemissing.." Stein muss noch beschafft werden!") Sound.PlayQueuedFeedbackSound(Sounds.VoicesMentor_INFO_NotEnoughStone_rnd_01,0); end end if _iron > 0 then local iron = GetIron(_id); if (iron-_iron) < 0 then ironmissing = (math.floor(_iron)-math.floor(iron)); Message(ironmissing.." Eisen fehlt!") Sound.PlayQueuedFeedbackSound(Sounds.VoicesMentor_INFO_NotEnoughIron_rnd_01,0); end end if _sulfur > 0 then local sulfur = GetSulfur(_id); if (sulfur-_sulfur) < 0 then sulfurmissing = (math.floor(_sulfur)-math.floor(sulfur)); Message(sulfurmissing.." Schwefel wird noch benötigt!") Sound.PlayQueuedFeedbackSound(Sounds.VoicesMentor_INFO_NotEnoughSulfur_rnd_01,0); end end if not (goldmissing == 0) or not (claymissing == 0) or not (woodmissing == 0) or not (stonemissing == 0) or not (ironmissing == 0) or not (sulfurmissing == 0) then return false,goldmissing,claymissing,woodmissing,stonemissing,ironmissing,sulfurmissing; else AddGold(_id,-(_gold)); AddClay(_id,-(_clay)); AddWood(_id,-(_wood)); AddStone(_id,-(_stone)); AddIron(_id,-(_iron)); AddSulfur(_id,-(_sulfur)); return true; end end