Inserate / Script für Inventarerhaltung.
ich bräuchte ein script, das die Ausrüstung (das Inventar und das Geld) eines Clonkes speichert und ihm beim start eines neuen szenarios diese gibt. (nein es ist nicht zum cheaten sondern für ein Abenteuerprojekt) ich kann leider nicht mehr als ein großes Dankeschön und bis zu 50 clunker entbehren 25 Kommentare |
Es ließe sich aber jedem Buchstaben eine Zahl zuordnen, die dann per Script gelesen und zusammengesetzt, bis sich daraus die gesuchte ID ergibt.
Int kann nicht zu ID umgewandelt werden, außer die ID besteht nur aus Zahlen.
IDs sind nicht Szenarioabhängig, aber Objektnummern.
Das schreibt CastInt(id) in die ExtraDaten und CastC4ID um wieder umzuwandlen.
Aber dabei kommt auch nur Mist raus. (und ich denke, IDs sind wohl kaum Szenarioabhaengig)
Warum du casten willst, weiß ich nicht. Das Script von Kevda sieht eigentlich besser aus.
Es ist so, dass das Script die Daten schreibt (wie es sie schreiben sollte, es werden Ganzzahlen gespeichert). Aber LoadContents (was dann CastC4ID verwendet) kann sie nicht wieder richtig umwandeln. Ich muss das mal noch genauer testen.
Eine zweite Moeglichkeit waere C4Id zu nehmen, und Strings zu speichern.
Da man Strings aber nicht speichern kann, muesste ich zusaetzlich noch etwas bauen, was die Strings zuverlaessig codiert damit ich sie speichern kann.
Zuletzt geändert: 27.10.2008 22:31
Edit: Ok, hab es ueberarbeitet.
Aber irgendwie failt was bei CastInt(CastC4ID());
was ich bislang mal als Enginefail betitle ;)
Zuletzt geändert: 27.10.2008 19:42
kA, die Onlinedoku will nicht weil ich mal wieder gebannt worden bin .
AchazLord was genau meinst du mit "meiner Quelle"? Vielleicht hat diese Quelle auch die Scripts vertauscht :P
Ich verteile die 50 CLunker so
40 an Feuermonster für das script
10 für Kevda für die mühe
Zuletzt geändert: 27.10.2008 18:06
global func SaveContents(object pClonk,string szPrefix) {
var _len = 0;
for(var i = 0; i < ContentsCount(pClonk);i++) {
var strP = Format("%s%i",szPrefix,i);
SetPlrExtraData(GetOwner(pClonk),strP,Contents(i,pClonk)); ++_len;
}
SetPlrExtraData(GetOwner(pClonk),Format("%s%s",szPrefix,"InvCount"),_len);
}
/* Inventar loeschen */
global func DeleteContents(int iPlayer,szPrefix) {
var _len = GetPlrExtraData(iPlayer,Format("%s%s",szPrefix,"InvCount"));
for(var i = 0; i < _len; i++) {
var strP = Format("%s%i",szPrefix,i);
SetPlrExtraData(GetOwner(pClonk),strP,0));
}
}
/* Laden */
global func LoadContents(int iPlayer,string szPrefix) {
var aResult = []; var i = -1;
while(aResult[(i+1)] = GetPlrExtraData(iPlayer,Format("%s%i",szPrefix,++i)));
return(aResult);
}
Koennte so klappen. Ist jetzt jedoch voellig aus dem Kopf gemacht, da Schule und ich da kein Clonk habe ;)
Zuletzt geändert: 27.10.2008 07:50
Nein.
global func SaveObjInventar(pObj)
{
var pClonk = pObj;
//Alle Inventaritems werden abgeklappert
var strInvData = "";
var iInvCount = ContentsCount ( 0, pClonk);
var pInv;
for(var i=0; i < iInvCount; i++)
{
pInv = Contents (i, pClonk);
strInvData = Format ("%s%i", strInvData, GetID(pInv));
}
//Daten werden gespeichert
SetCrewExtraData (pClonk, "Complete_Inventar_Save", strInvData);
return(1);
}
global func LoadObjInventar(pObj)
{
var pClonk = pObj;
var strInvData = GetCrewExtraData ( pClonk, "Complete_Inventar_Save");
var iStrLength = GetLength(strInvData);
var pNewObj="";
for(var i=0; i < iStrLength; i++)
{
pNewObj = Format ( "%s%s", pNewObj, GetCharString ( GetChar ( strInvData,i));
if ( GetLength(pNewObj)==4)
{
CreateContents ( C4Id (pNewObj), pClonk);
pNewObj="";
}
}
return(1);
}
global func GetCharString(c){return(Format("%c",c));}
Zuletzt geändert: 26.10.2008 12:46