Mach nen Sekundentimer der selbst iteriert.
Das sagt mir jetzt nicht viel.
Mach nen Sekundentimer der selbst iteriert.
Das sagt mir jetzt nicht viel.
Moin. Ich schraube gerade am Actor System ein wenig rum und möchte einen Timer einbauen,
welcher ausgelesen wird. Genauer gesagt möchte ich wissen bei welcher Sekunde der Timer
gerade ist und in der Sekunde möchte ich etwas machen. Das Problem: das passiert nicht.
Er kommt nicht dazu, es zu machen.
public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float: amount, weaponid, bodypart)
{
//================================>
ApplyActorAnimation(damaged_actorid,"SHOP","SHP_Rob_GiveCash",4.1,0,0,0,0,30000);
SetPVarInt(playerid,"rdyForBreak", 1);
angeschossenMsg[playerid] = true;
actorAttacked[damaged_actorid] = 1;
SetTimerEx("RobBreak", 240000, 0, "i", playerid);
//================================>
timerobac = 30;
AcRobTimerb = SetTimerEx("IsDoingACRob", 3000, 1, "i", playerid);
}
return 1;
}
forward IsDoingACRob(playerid);
public IsDoingACRob(playerid)
{
timerobac = 30;
if(timerobac == 27)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 24)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 21)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 18)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 15)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 12)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 9)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 6)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 3)
{
SendClientMessage(playerid, -1, "x");
}
else if(timerobac == 0)
{
SendClientMessage(playerid, -1, "xD");
KillTimer(IsDoingACRob(playerid));
}
return 1;
}
Das passiert, wenn du einen Actor in einem Interior (VirtualWorld 0) hast und keiner in dem Interior ist und InteriorID > 0.
Am besten du machst eine Art Actor Streamer...wenn jemand betritt, erstellst du den Actor..wenn der letzte den Interior verlässt (bzw keiner mehr in der Nähe ist evtl einfacher zu checken) zerstörst du den Actor
Dann verrutscht der Actor auch nicht o.ä. xD
Das mit dem Actor Streamer verstehe ich nicht so ganz bzw. würde mir glaube ich schwer fallen es umzusetzen, aber ich und ein Kollege
hatten die Idee, dass wir es so machen könnten, dass die Actors, sobald niemand in der Nähe ist bzw. diese von keinem überfallen werden,
einfach ihre Position per SetActorPos erneut gesetzt bekommen, sodass sie auch wieder bzw. immer auf dieser Position sind. Die Frage
ist halt, ob das sehr zulasten sein wird. Ansonsten wäre es nett, wenn du mir per Beispiel-Code zeigen würdest, wie du dein Vorschlag
genau meinst.
Moin. Kurze Frage:
Kann man Actors irgendwie freezen, denn wenn ich in der Nähe eines Actors ist, zu ihm heranfahre, sehe ich, dass
er wie aus dem Himmel bzw. von irgendwo(aus der Luft) runterfällt. Ich habe keine Ahnung wieso. Ist nicht bei
allen Actors bei mir so, aber bei vielen.
Und eine weitere Frage wäre, wie ich abfragen kann, ob er einen von denn 40 Actors, die ich in meinem Skript habe,
anvisiert hat und keine riesen Abfragen wie solche hier machen muss:
if(actorid == ActorSTRIPAMMU || actorid == ActorLINDENSIDEAMMU || actorid == ActorELQUEAMMU || actorid == ActorQUEENSAMMU || actorid == ActorANGLEAMMU || actorid == ActorLSMARKETAMMU
|| actorid == ActorLSWILLOWAMMU || actorid == ActorELQUEAMMU || actorid == ActorELQUEAMMU || actorid == ActorELQUEAMMU || actorid == ActorELQUEAMMU || actorid == ActorELQUEAMMU
|| actorid == ActorELQUEAMMU || actorid == ActorLSRODEOAMMU || actorid == ActorBLUEAMMU || actorid == ActorLSMULLHBSN || actorid == ActorLSMARKETDONUT || actorid == ActorCIBMARKET
|| actorid == ActorIDLEPIZZA || actorid == ActorCIBANGLE || actorid == ActorBSNSFFINANCIAL || actorid == ActorBSSJUNIPERHOLLOW || actorid == ActorDONUTSFPALISADES || actorid == ActorBSSSFGARCIA
|| actorid == ActorCIBFORTCARSON || actorid == ActorDONUTFORTCARSON || actorid == ActorCIBBARRANCAS || actorid == ActorBSNLVWESTSIDE || actorid == ActorBSNLVMIDDLE || actorid == ActorCIBLVEAST
|| actorid == ActorBSNLVEAST || actorid == ActorPIZZAMONTGOMERY || actorid == ActorPIZZABLUEBERRY || actorid == ActorDILLIPD || actorid == ActorCIBWILLOWFIELD || actorid == ActorBINCOGS
|| actorid == ActorLSDOWNTOWNSUBURBAN || actorid == ActorZIPSFFINANCIAL || actorid == ActorPIZZASFESPLANADE || actorid == ActorCIBLVPD || actorid == ActorBINCOLVPD || actorid == ActorCIBSFCITYHALL
|| actorid == ActorAnwaltLS || actorid == ActorAnwaltSF || actorid == ActorBauernhof|| actorid == ActorPNSSANTA || actorid == ActorDONUTLS || actorid == ActorDILLIEINFAHRT
|| actorid == ActorZOLLLS || actorid == ActorBSNLS || actorid == ActorBANKKREUZUNGLS || actorid == ActorLSBAMMU || actorid == ActorLSGROVEKREUZUNG || actorid == ActorLSSTADTHALLE
|| actorid == ActorLSRGNSPAWNSTREET1 || actorid == ActorLSRGNSPAWNSTREET2 || actorid == AcotrLSVERONASTREET || actorid == ActorLSUNITYSTATION || actorid == ActorLSGARBAGE || actorid == ActorRGNHITMAN
|| actorid == ActorLASCOLINAS || actorid == ActorSFTUNNELEND || actorid == ActorCRANBERRYSTATION || actorid == ActorCHINATOWN
|| actorid == ActorSFBASEBALLFIELD || actorid == ActorCHINATOWNOBEN || actorid == ActorPARADISO || actorid == ActorSFCITYHALL
|| actorid == ActorSFOCEANFLATS || actorid == ActorSFRIFA)
Alles anzeigen
Sondern das ganze irgendwie vereinfachen kann, indem ich eine Schleife oder so machen kann oder ein Stock. Komme irgendwie nicht drauf.
ocmd:materials(playerid,params[])
{
new string[128], befehl[25];
if(sscanf(params, "s[30]",befehl)) return SendClientMessage(playerid, COLOR_GREY, "Benutze /materials [get/deliver]");
if(strcmp(befehl, "get", true) == 0)
{
new menge;
if(IsPlayerInRangeOfPoint(playerid, 3.0, 597.0846,-1248.3699,18.2641))
{
//if(sscanf(params, "i", menge))return SendClientMessage(playerid, COLOR_GREY, "Benutze /getpaket [1-15]");
if(menge<1||menge>15)return SendClientMessage(playerid, COLOR_GREY, "Wähle eine Menge zwischen 1 bis 15 aus!");
if((pPacketsWD[playerid]+menge) > 15)return SendClientMessage(playerid, COLOR_GREY, "Soviele Pakete kannst du nicht mitnehmen.");
new preis = (menge*200);
if(GetMoney(playerid) < preis)return SendClientMessage(playerid, COLOR_GREY, ERROR_MONEY);
pPacketsWD[playerid] += menge;
GiveMoney(playerid, -preis);
format(string, sizeof(string), "Du hast %d Pakete für $%d gekauft. Bringe diese nun schnell nach San Fierro!", menge, preis);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
SetPlayerCheckpointEx(playerid, -2109.5037,-0.4467,34.8972, 4.0, CP_GETPAKET_WD, INVALID_CHECKPOINT_TYPE);
}
}
else if(strcmp(befehl, "deliver", true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, -2109.5037,-0.4467,34.8972))
{
if(pPacketsWD[playerid] == 0)return SendClientMessage(playerid, COLOR_GREY, "Du hast keine Pakete zum abgeben.");
new mats = (pPacketsWD[playerid]*50);
format(string, sizeof(string), "Du hast %d Pakete abgegeben und %d Materialien dafür erhalten.", pPacketsWD[playerid], mats);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
pPacketsWD[playerid] = 0;
Spieler[playerid][pEisen] += mats;
return 1;
}
}
else
{
SendClientMessage(playerid, -1, "Du hast zwei Optionen. Entweder get oder deliver.");
}
if(IsPlayerInRangeOfPoint(playerid, 3.0, 330.8236,-40.1749,2.2255))
{
new preis = (2*1000);
if(GetMoney(playerid) < preis)return SendClientMessage(playerid, COLOR_GREY, ERROR_MONEY);
if((Spieler[playerid][pDrogenSamen]+2) > 2)return SendClientMessage(playerid, COLOR_GREY, "So viele Samen kannst du nicht mitnehmen.");
Spieler[playerid][pDrogenSamen] = 2;
GiveMoney(playerid, -preis);
format(string, sizeof(string), "Du hast 2 Samen für $%d gekauft. Du kannst deine Samen nun in ganz San Andreas anpflanzen. (/seed)", preis);
SendClientMessage(playerid, COLOR_GREEN, string);
SendClientMessage(playerid, COLOR_GREEN, "Beachte: Marihuana darf nur auf normalem Boden angepflanzt werden, nicht auf Straßen, in der Luft oder ähnliches.");
SendClientMessage(playerid, COLOR_GREEN, "Beachte: Dies wird vom System geloggt und ein Regelverstoß führt zu einer Strafe.");
return 1;
}
return 1;
}
Alles anzeigen
Versuchs mal so.
Hätte ich keinen asi-Loader, so würde sensfix nicht funktionieren. Hat sich übrigens auch schon erledigt, wie
man am Hacken, welchen grün markiert ist, oben sieht. Danke dennoch.
Habe mich mal an mein Interface hingesetzt und ein wenig Änderungen eingebracht, aber irgendwie ist
InGame mein Name nicht zu sehen, welchen ich statt der Uhrzeit eingesetzt habe. Habe diese Datei
direkt im GTA SAMP Ordner drinne:
Ich danke schon mal im Voraus für die Hilfe. Und ja, wie gesagt: Es hat sich nichts verändert. Nichtmal die Farbe.
Hab'n bisschen rumgespielt, konnte aber nur eine Lösung für ocmd:getpakete finden. für ocmd:deliverpakete habe ich nichts scripten können Klappte bei mir einfach nicht.
ocmd:getpakete(playerid, params[])
{
//if(!IsPlayerInRangeOfPoint(playerid,5.0,-91.8772,-40.3565,6.4844))return SendClientMessage(playerid,-1,"Du bist nicht am Paketekaufpunkt!");
new Materialss;
if(sscanf(params, "d", Materialss))return SendClientMessage(playerid,-1,"Verwendung: /getpakete [Anzahl der Pakete]");
new string[128];
if(Materialss < 0 || Materialss > 15) { SendClientMessage(playerid, -1, "*Die anzahl an Pakete darf nicht unter 0 und über 15 sein."); return 1; }
if(Materialss +sSpieler[playerid][sMatsPack] < 16)
{
new Paketpreis = Materialss*150;
sSpieler[playerid][sMatsPack] += Materialss;
GivePlayerMoney(playerid, -Paketpreis);
format(string,sizeof(string), "Du hast dir %i Materialspakete für %d$ gekauft!", Materialss, Paketpreis);
SendClientMessage(playerid,-1,string);
SendClientMessage(playerid,-1,"Fahre nun schnell nach San Fierro bevor dich die Cops erwischen!");
Materialspakete[playerid] = true; //Vergessen bei get den bool auf true zu setzen, um ihn bei deliver auszulesen.
}
else if(Materialss + sSpieler[playerid][sMatsPack] > 15)
{
SendClientMessage(playerid,-1,"Du kannst Maximal 15 Materialpakete bei dir Tragen!");
}
else
{
SendClientMessage(playerid,-1,"Du hast bereits die maximale Anzahl an Paketen.");
}
return 1;
}
Beachte bitte, dass sich in deinem Skript keine Wörter verdoppeln. Du kannst keinen bool mit Materialspakete erstellen und
dabei nochmal Materialspakete im Enum definieren. So habe ich dir statt Materialspakete im Enum ein sMatsPack erstellt.
Bzw. füg bei dir mal im Enum statt Materialspakete ein sMatsPack ein
Zum Thema "leserlicher Code" hab ich was parat @Jeffry :
if(dialogid==DIALOG_Rangnamensetzten)
{
if(response){if(strlen(inputtext)<4||strlen(inputtext)>20)
{
ShowPlayerDialog(playerid,DIALOG_Rangnamensetzten,DIALOG_STYLE_INPUT,"{FF9600}Rangname","{D10000}Der Rangname muss Mindestens 4 und Höchstens 20 Buchstaben haben!","Fertig","Zurück");
}
else
{
new rangwahl=GetPVarInt(playerid,"rangwahl");
if(rangwahl==1)
{
format(fInfo[rangwahl][rang1], 30, "%s", inputtext);
}
else if(rangwahl==2)
{
format(fInfo[rangwahl][rang2], 30, "%s", inputtext);
}
else if(rangwahl==3)
{
format(fInfo[rangwahl][rang3], 30, "%s", inputtext);
}
if(rangwahl==4)
{
format(fInfo[rangwahl][rang4], 30, "%s", inputtext);
}
if(rangwahl==5)
{
format(fInfo[rangwahl][rang5], 30, "%s", inputtext);
}
if(rangwahl==6)
{
format(fInfo[rangwahl][rang6], 30, "%s", inputtext);
}
rangdialog(playerid); //Keine Ahnung, was es ab hier bedeuten soll, stand aber so, als ich es umwandelte.
}
}
else
{
rangdialog(playerid);
}
}
//Hier werden die nahmen denn gesetzt
PAWN-Quellcode
if(dialogid==DIALOG_Rangnamen)
{
if(response)
{
SetPVarInt(playerid,"rangwahl",0);
if(listitem == 0)
{
SetPVarInt(playerid,"rangwahl",1);
ShowPlayerDialog(playerid,DIALOG_Rangnamensetzten,DIALOG_STYLE_INPUT,"{FF9600}Rangname", "{FFFFFF}Wie möchtest du diesen Rang nennen? (max.20 Zeichen)", "Fertig", "Zurück");
}
if(listitem == 1)
{
SetPVarInt(playerid,"rangwahl",2);
}
if(listitem == 2)
{
SetPVarInt(playerid,"rangwahl",3);
}
if(listitem == 3)
{
SetPVarInt(playerid,"rangwahl",4);
}
if(listitem == 4)
{
SetPVarInt(playerid,"rangwahl",5);
}
if(listitem == 5)
{
SetPVarInt(playerid,"rangwahl",6);
}
}
}
//Hier wähle ich aus welchen ich ändern will
stock rangdialog(playerid)
{
new string[500],str[50];
new i=sInfo[playerid][leader];
if(i==1)
{
format(str,sizeof(str),"Police Department");
}
if(i==2)
{
format(str,sizeof(str),"Bundeswehr");
}
if(i==3)
{
format(str,sizeof(str),"Rettungsdienst");
}
if(i==4)
{
format(str,sizeof(str),"Ordungsamt");
}
if(i==5)
{
format(str,sizeof(str),"Media AG");
}
if(i==6)
{
format(str,sizeof(str),"Grove Street");
}
if(i==7)
{
format(str,sizeof(str),"Ballas");
}
if(i==8)
{
format(str,sizeof(str),"Vagos");
}
if(i==9)
{
format(str,sizeof(str),"LS Biker");
}
if(i==10)
{
format(str,sizeof(str),"LCN");
}
if(i==11)
{
format(str,sizeof(str),"Yakuza");
}
if(i==12)
{
format(str,sizeof(str),"Atztecas");
}
format(string,sizeof(string),"Rang 1: %s\nRang 2: %s\nRang 3: %s\nRang 4: %s\nRang 5: %s\nRang 6: %s",fInfo[i][rang1],fInfo[i][rang2],fInfo[i][rang3],fInfo[i][rang4],fInfo[i] [rang5],fInfo[i][rang6]);
ShowPlayerDialog(playerid,DIALOG_Rangnamen,DIALOG_STYLE_LIST,str,string,"Weiter","Beenden");}
Alles anzeigen
Nun kommen diese Erros:
C:\Users\User\Desktop\SERVER\gamemodes\NGR.pwn(3311) : error 028: invalid subscript (not an array or too many subscripts): "Materialspakete"
C:\Users\User\Desktop\SERVER\gamemodes\NGR.pwn(3311) : warning 215: expression has no effect
C:\Users\User\Desktop\SERVER\gamemodes\NGR.pwn(3311) : error 001: expected token: ";", but found "]"
C:\Users\User\Desktop\SERVER\gamemodes\NGR.pwn(3311) : error 029: invalid expression, assumed zero
C:\Users\User\Desktop\SERVER\gamemodes\NGR.pwn(3311) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Kannst du nochmal die genauen Zeilen bzw. den Befehl mit dieser Zeile zeigen. Es hat sich ja was geändert.
Ich kann mir vorstellen dass if(Materialspakete[playerid] == 0) ein Boolean ist, so
würde ich gerne diesen Bool haben; stell ihn mal bitte hier rein. Du hast ihn wahrscheinlich
irgendwo bei den "new"-Definitionen oben im Skript.
So könnte dein Bool aussehen:
new bool:Materialspaketel[MAX_PLAYERS];
@KinGRaPTiiC
Wird etwas in der mysql_log aus deinem Server-Ordner angezeigt?
Bzw. was wird angezeigt/geschrieben.
Omg, was soll das den sein? Hingeklatscht.
Wo ist die Texturierung für eine ordentliche Map?
Schrecklich, stell sowas nicht vor.
0/10
mfg
Drei Beiträge und legst Äußerungen hervor, als würdest du hier schon seit Jahren dabei sein.
Das nächste mal bitte ich, und nicht nur ich, eine konstruktive Bewertung "hinzuklatschen",
anstatt der heißen Luft im Hirn freien Lauf zu lassen. Tut keinem gut. Wenn du etwas
zu bemängeln hast, wenn du alles zu bemängeln hast, dann fass es in einige Hauptaspekte zusammen
und gib dem jungen Mann einen Tipp, wie und was er besser machen kann.
Von meiner Seite aus kann ich sagen, dass die Map für den Anfang nicht das schlechteste Werk
ist, du dich aber mal bisschen mehr inspirieren lassen solltest. Du siehst bestimmt selber, dass alles
ein wenig dem Standard ähnelt. Wenn man dir sagt, dass heute bisschen mehr erwartet wird, dann
nimm es nicht als Beleidigung, sondern als Herausforderung an. Mir fällt es auch schwer beim Mappen
kreativ zu sein. Weißt du was ich mache? Wenn ich mappe, ist es so gegen Abend immer.
Wenn mir nichts einfällt, gehe ich duschen. Beim Duschen kannst du über verschiedene Sachen
fantasieren und natürlich nachdenken. Mich bringen Sachen, wo ich immer in Ruhe tun kann,
was ich will, zu guten Ideen. Empfehle ich dir auch mal. Du musst natürlich nicht duschen gehen ->
tue einfach etwas, wo du nachdenken kannst. Der Mensch denkt nämlich zu jeder Zeit nach.
Du kannst dir übrigens auch Bilder im Internet anschauen -> "GTA SAMP Fahrschule Mapping..."
und dich auch davon "inspirieren" lassen - achte, dass du nicht kopierst, sondern eigene Ideen entwickelst.
Achte bitte immer darauf, dass du deine Map mit Texturen belegst, denn somit verschönerst du sie enorm.
5/10 - für dein erster Interior
Wenn du mal nicht weißt oder dir die Umsetzung nicht gefällt in deinem Kopf, so belasse es erstmal
dabei und leg mal eine Pause ein.
Wie gesagt: Wenn du es für alle Ränge haben möchtest, dann musst du es auch für alle Ränge formatieren, also so:
format(fInfo[i][rang1], 30, "%s", inputtext);
format(fInfo[i][rang2], 30, "%s", inputtext);
format(fInfo[i][rang3], 30, "%s", inputtext);
format(fInfo[i][rang4], 30, "%s", inputtext);
format(fInfo[i][rang5], 30, "%s", inputtext);
format(fInfo[i][rang6], 30, "%s", inputtext);
/E: Da ich nur den Teil der Funktion sehe, kann ich nicht viel damit anfangen.
Alles anzeigenDas gehört einfach nur zum Dialog
format(string,sizeof(string),"Rang 1: %s\nRang 2: %s\nRang 3: %s\nRang 4: %s\nRang 5: %s\nRang 6: %s",fInfo[i][rang1],fInfo[i][rang2],fInfo[i][rang3],fInfo[i][rang4],fInfo[i][rang5],fInfo[i][rang6]);ShowPlayerDialog(playerid,DIALOG_Rangnamen,DIALOG_STYLE_LIST,str,string,"Weiter","Beenden");
Hier wird es ja denn gesetzt ...
format(fInfo[rangwahl][rang1], 30, "%s", inputtext);
Nun ja wenn du fInfo[rangwahl][rang1] in Format formatierst, dann
beachte, dass du noch weitere 5 Ränge hast und diese auch formatieren musst. Ich würde gerne
wissen, was du damit vorhast bzw. zu welchem System es gehört für besseres Verständnis.
"AddPlayerClass"-Sachen entfernen und folgendes machen:
public OnPlayerRequestClass(playerid, classid)
{
SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0);
SpawnPlayer(playerid);
return 0;
}
public OnPlayerSpawn(playerid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetCameraBehindPlayer(playerid);
return 1;
}
jetzt kommt immer "Verwendung: /put [drugs | drugs] [Anzahl an Drogen/Mats]");
"Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
wenn ich put und gtake mache
So, dann mal zur nächsten Runde. Versuch es mal so:
ocmd:put(playerid,params[])
{
//Safebox Koordinaten hier einfügen!!
new savethings, putid[24], putstring[128];
if(sscanf(params, "s[24]d", putid, savethings)) return SendClientMessage(playerid,-1,"Verwendung: /put [drugs | mats] [Anzahl an Drogen/Mats]");
if(strcmp(putid,"drugs",false) == 0)
{
if(sSpieler[playerid][DDrogen] >= savethings)
{
sSpieler[playerid][DDrogen] -= savethings;
sSpieler[playerid][SBDrogen] += savethings;
format(putstring, sizeof(putstring),"Du hast %d Drogen in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
SendClientMessage(playerid, -1, putstring);
}
else
{
SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht auf bei dir.");
}
}
else if(strcmp(putid,"mats",false) == 0)
{
if(sSpieler[playerid][Materials] >= savethings)
{
sSpieler[playerid][Materials] -= savethings;
sSpieler[playerid][SBMats] += savethings;
format(putstring, sizeof(putstring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
SendClientMessage(playerid, -1, putstring);
}
else
{
SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf bei dir.");
}
}
else
{
SendClientMessage(playerid, -1, "Du hast zwei Optionen. Entweder drugs oder mats.");
}
return 1;
}
ocmd:gtake(playerid,params[])
{
//Safebox Koordinaten hier einfügen!!
new takethings, putid[24], takestring[128];
if(sscanf(params, "s[24]d", putid, takethings)) return SendClientMessage(playerid,-1,"Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
if(strcmp(putid,"drugs",false) == 0)
{
if(sSpieler[playerid][SBDrogen] >= takethings)
{
sSpieler[playerid][DDrogen] += takethings;
sSpieler[playerid][SBDrogen] -= takethings;
format(takestring, sizeof(takestring),"Du hast %d Drogen aus der Safebox entnommen. Benutze /put um sie wieder einzulagern.",takethings);
SendClientMessage(playerid, -1, takestring);
}
else
{
SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht in deiner Safebox.");
}
}
else if(strcmp(putid,"mats",false) == 0)
{
if(sSpieler[playerid][SBMats] >= takethings)
{
sSpieler[playerid][Materials] += takethings;
sSpieler[playerid][SBMats] -= takethings;
format(takestring, sizeof(takestring),"Du hast %d Materials in der Safebox entnommen. Benutze /put um sie wieder einzulagern.",takethings);
SendClientMessage(playerid, -1, takestring);
}
else
{
SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf deienr Safebox.");
}
}
else
{
SendClientMessage(playerid, -1, "Du hast zwei Optionen. Entweder drugs oder mats.");
}
return 1;
}
So funktioniert es bei mir.
Wenn ich zu schnell skripte, kommt viel Scheiße bei raus. Habe mich gerade mal hingesetzt und
alles nochmal in Ruhe durchgearbeitet:
enum SpielerDaten
{
Adminlevel,
Suplvl,
level,
Fraktion,
Alter,
Geschlecht,
Skin,
slogin,
Rang,
PaydayZeit,
Bargeld,
DDrogen,
Materials,//Änderung
SBDrogen,//Änderung
SBMats,//Änderung
Bankguthaben,
Festgeld,
FestgeldTime,
Gangjailticket,
Bauerticket,
Pilotticket
}
new sSpieler[][SpielerDaten];
ocmd:put(playerid,params[])
{
//Safebox Koordinaten hier einfügen!!
new savethings, putid[24], putstring[128];
if(sscanf(params, "dd", putid, savethings))return SendClientMessage(playerid,-1,"Verwendung: /put [drugs | drugs] [Anzahl an Drogen/Mats]");
if(strcmp(putid,"drugs",true) == 0)
{
if(sSpieler[playerid][DDrogen] > savethings)
{
sSpieler[playerid][DDrogen] -= savethings;
sSpieler[playerid][SBDrogen] += savethings;
format(putstring, sizeof(putstring),"Du hast %d Drogen in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
SendClientMessage(playerid, -1, putstring);
}
else
{
SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht auf bei dir.");
}
}
else if(strcmp(putid,"mats",true) == 0)
{
if(sSpieler[playerid][Materials] >= savethings)
{
sSpieler[playerid][Materials] -= savethings;
sSpieler[playerid][SBMats] += savethings;
format(putstring, sizeof(putstring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
SendClientMessage(playerid, -1, putstring);
}
else
{
SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf bei dir.");
}
}
else
{
SendClientMessage(playerid,-1,"Verwendung: /put [drugs | drugs] [Anzahl an Drogen/Mats]");
}
return 1;
}
ocmd:gtake(playerid,params[])
{
//Safebox Koordinaten hier einfügen!!
new takethings, putid[24], takestring[128];
if(sscanf(params, "dd", putid, takethings)) return SendClientMessage(playerid,-1,"Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
if(strcmp(putid,"drugs",true) == 0)
{
if(takethings <= sSpieler[playerid][SBDrogen])
{
sSpieler[playerid][DDrogen] += takethings;
sSpieler[playerid][SBDrogen] -= takethings;
format(takestring, sizeof(takestring),"Du hast %d Drogen aus der Safebox entnommen. Benutze /put um sie wieder einzulagern.",takethings);
SendClientMessage(playerid, -1, takestring);
}
else
{
SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht in deiner Safebox.");
}
}
else if(strcmp(putid,"mats",true) == 0)
{
if(takethings <= sSpieler[playerid][SBMats])
{
sSpieler[playerid][Materials] += takethings;
sSpieler[playerid][SBMats] -= takethings;
format(takestring, sizeof(takestring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.",takethings);
SendClientMessage(playerid, -1, takestring);
}
else
{
SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf deienr Safebox.");
}
}
else
{
SendClientMessage(playerid,-1,"Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
}
return 1;
}
Sorry für die ganzen Umstände. So sollte es ohne Errors funktionieren.
Beim ocmd:put Befehl bei:
putid
eine 24 hinmachen, also:
putid[24]