soweit ich sehe, ist das kein Appento sondern 3 globale funktionen, die aber sehr hilfreich sein können.
Die Gürtelfunktion an sich hab ich jetzt so gemacht, dass wenn der Gürtel angelegt wird, eine locale Variable im benutzendem Clonk gesetzt wird. Und wenn diese gesetzt ist, kann er von dieser bestimmten Munition mehr tragen (wird in der Munition selbst dann geprüft und je nach Variable eine andere Gesamtmenge ausgegeben).
Dafür muss ich bei 9 verschiedenen Munitionsarten und einem Allrounder Gürtel und zusätzlich einer kleinen und großen Variante insg. 20 Gürtel erstellen. Das heißt auch 20 lokale Variablen im Hazardclonk. Man könnte es sicher auch über eine Funktion mit zahlreichen if Verschaltelungen lösen, aber das dauert länger und ist fehleranfälliger.
Oder es geht bestimmt auch mit einem Arraysystem, aber das kann ich noch nicht und noch komme ich so zurecht, auch wenn ich manchmal 100 lokale Variablen in einem Objekt habe :D
Die erwähnten globalen Funktionen brauche ich nun vermutlich, wenn der Gürtel abgelegt wird. Denn angenommen normal ist eine Menge von 300Munition. Mit nem Gürtel kann er sie dann auf 600 aufstocken. Nimmt er den Gürtel wieder ab, bleibt der bestand bei 600 und er könnte mit dem nächsten Gürtel dann letzlich alles aufstocken, was natürlich nicht so geplant ist :D deswegen brauche ich vermutlich im TimerCall UpdateCharge vom Hazardclonk eine Überprüfung wieviel Munition gerade getragen wird und ob das die maximale Menge übersteigt. Mit DoAmmo könnte ich die Munition dann wieder reduzieren und dafür Munitionskisten erscheinen lassen.
Problem ist: Wie überprüfe ich die aktuelle Menge?
Es gibt noch die 2 globalen Funktionen:
global func GetAmmo(id ammoid, object target)
{
// gar keine Munition
if(!(ammoid->~IsAmmo())) return(0);
// Kann 0 sein bei Objektlokalen Aufrufen.
if(!target) target=this();
// Entsprechendes Munitionslagerobjekt suchen
var obj = target ->~ AmmoStoring();
if(!obj) obj = target;
// no ammo rule
if(ObjectCount(NOAM))
if(obj ->~ IsAmmoStorage())
return(0);
var ammo;
if(ammo=FindContents(ammoid, obj))
return(ammo->Local(0));
else
return(0);
}
global func CheckAmmo(id ammoid, int count) {
if(!ammoid) return(false);
// gar keine Munition
if(!(ammoid->~IsAmmo())) return(false);
if(!Par(2)) Par(2) = this();
var iSum = 0;
// search
for(var i=2; i<10 && Par(i); ++i) {
// no ammo rule
var obj = Par(i) ->~ AmmoStoring();
if(!obj) obj = Par(i);
if(ObjectCount(NOAM))
if(obj ->~ IsAmmoStorage())
return(true);
iSum += GetAmmo(ammoid,obj);
}
if(iSum >= count)
return(true);
return(false);
}
Wäre eine der beiden Funktionen hilfreich, um auf die Menge zu kommen? Die zweite gibt ja nur true oder false aus, also vermutlich nicht, oder? Und die erste gibt return(ammo->Local(0)); aus, wobei ich nicht weiß, was das nun tatsächlich heißt...