[[http://www.siedler-games.de|{{:sg-link.jpg|}}]]
====== Einleitung ======
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.\\
===== Beispiel =====
-- 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
===== Code =====
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