Passiert das denn immer? Oder nur manchmal oder unter bestimmten Bedingungen?
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
immer. Das passiert jedes mal und der name ändert sich auch beim wiederholten male nicht
-
Sobald ich aber den Aduty auf 0 setzen lasse
Meinst du in deinem Command oder extern durch etwas anderes?
-
eventuell den string erhöhen ?
sonst fällt mir da kein Fehler auf. -
Meinst du in deinem Command oder extern durch etwas anderes?
Wird im Command wieder auf 0 gesetzt.
Also /amodus aktiviert.
Nochmal /amodus soll deaktivieren und den Namen wieder normal ohne [ADMIN] machen.
Was mir grade aber aufgefallen ist, ist das sobald /amodus eingetippt wird, eine neue Accountdatei erstellt wird.
Kein Plan wie ich das hinbekommen habe xD -
Warum wird die Crack animation nicht gesetzt?
ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 1, 0, 1);pushh
-
Die Zeile ist nicht das Problem, du musst schon Kontext liefern.
-
Ich habe ein kleines Problem was ich überhaupt nicht verstehe, das sich auch auf andere befehle ausweitet.
dcmd_pay(playerid,params[])
{
new pid;
new geld;
new spieler[256];
new spieler2[256];
new geber[MAX_PLAYER_NAME];
new nehmer[MAX_PLAYER_NAME];
new Float:x,Float:y,Float:z;
GetPlayerName(playerid,geber,sizeof(geber));
GetPlayerName(pid,nehmer,sizeof(nehmer));
GetPlayerPos(pid,x,y,z);
if(sscanf(params,"ui",pid,geld)) return SendClientMessage(playerid,Weiß,"Info: /pay (playerid) (summe)");
if(pid == INVALID_PLAYER_ID) return SendClientMessage(playerid,Weiß,"Der Spieler mit dieser ID ist nicht Online!");
if(pid == playerid) return SendClientMessage(playerid,Weiß,"Du kannst dir nicht selbst Geld geben!");
if(!IsPlayerInRangeOfPoint(pid,2,x,y,z)) return SendClientMessage(playerid,Weiß,"Dieser Spieler ist nicht in der Nähe!");
format(spieler,sizeof(spieler),"Du hast %s %i$ gegeben!", nehmer,geld);
format(spieler2,sizeof(spieler2),"%s hat dir %i$ gegeben!",geber,geld);
SendClientMessage(pid,Weiß,spieler2);
SendClientMessage(playerid,Weiß,spieler);
GivePlayerMoney(pid,geld);
GivePlayerMoney(playerid,-geld);
return 1;
}Ich war auf meinem Testserver und habe diesen Befehl getestet mit 2 Accounts.
Playerid 0 = NoxiZ und playerid 1 = chazer!
Wenn playerid 0 der 1 geld gibt, steht da, du hast NoxiZ geld gegeben! Warum wird der name "chazer" nicht erkannt?
wenn playerid 1 der 0 geld gibt, lässt sich nichts feststellen, da da ja NoxiZ stehen soll so wie gewünscht!wo ist der fehler?
-
Du musst auf die Reihenfolge achten. Du liest den Spielernamen von pid aus, aber danach erst die pid selber mit sscanf.
PHP
Alles anzeigennew pid; new geld; if (sscanf(params, "ui", pid, geld)) return SendClientMessage(playerid, 0xFFFFFFFF, "Info: /pay (playerid) (summe)"); if (pid == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFFFFFFFF, "Der Spieler mit dieser ID ist nicht Online!"); if (pid == playerid) return SendClientMessage(playerid, 0xFFFFFFFF, "Du kannst dir nicht selbst Geld geben!"); new Float:x,Float:y,Float:z; GetPlayerPos(pid,x,y,z); if (!IsPlayerInRangeOfPoint(playerid, 2, x, y, z)) return SendClientMessage(playerid, 0xFFFFFFFF, "Dieser Spieler ist nicht in der Nähe!"); new message[256]; new name[MAX_PLAYER_NAME]; GetPlayerName(pid, name, sizeof(name)); format(message, sizeof(message), "Du hast %s %i$ gegeben!", name, geld); SendClientMessage(playerid, 0xFFFFFFFF, message); GetPlayerName(playerid, name, sizeof(name)); format(message, sizeof(message), "%s hat dir %i$ gegeben!", name, geld); SendClientMessage(pid, 0xFFFFFFFF, message); GivePlayerMoney(pid, geld); GivePlayerMoney(playerid, -geld); return 1;
So würde ich es machen, man kann die String-Variablen wiederverwenden und die Reihenfolge ist so auch korrekt.
-
Hat gefunkt.
und was ist daran falsch?
ist aus nem tutorial so übernommen aber failt total
dcmd_usedrugs(playerid,params[])
{
#pragma unused params
new str[145];
new strii[145];
new Float:x, Float:y, Float:z;
if(sSpieler[playerid][Drogen] <= 0) return SendClientMessage(playerid,Weiß,"Du hast keine Drogen!");
sSpieler[playerid][Drogen]--;
format(str, sizeof(str), "Du hast 1g Drogen genommen und 10HP erhalten (%d/10)", sSpieler[playerid][Drogen]);
SendClientMessage(playerid,Weiß, str);
GivePlayerHealth(playerid,10);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i, 40.0, x, y, z))
{
GetPlayerName(playerid, strii, sizeof(strii));
GetPlayerPos(playerid, x, y, z);
format(strii, sizeof(strii), "%s hat Drogen genommen!",playerid);
SendClientMessage(i, Weiß, strii);
}
}
}
return 1;
}der spieler der usedrugs benutzt nimmt 2 mal drogen wenn jemand in der nähe ist
und der andere in der nähe sieht den text "NoxiZ hat Drogen genommen! hat Drogen genommen!" -
-
Auch da ist die Reihenfolge wieder völlig durcheinander, GetPlayerPos steht erst hinter IsPlayerInRangeOfPoint. Zumal wird strii für GetPlayerName und für die ClientMessage benutzt. Ein gut gemeinter Rat: lieber statt 1:1 kopieren, selber verstehen und umsetzen
-
Hat gefunkt.
und was ist daran falsch?
ist aus nem tutorial so übernommen aber failt totaldcmd_usedrugs(playerid,params[]) { #pragma unused params new str[145]; new strii[145]; new Float:x, Float:y, Float:z; if(sSpieler[playerid][Drogen] <= 0) return SendClientMessage(playerid,Weiß,"Du hast keine Drogen!"); sSpieler[playerid][Drogen]--; format(str, sizeof(str), "Du hast 1g Drogen genommen und 10HP erhalten (%d/10)", sSpieler[playerid][Drogen]); SendClientMessage(playerid,Weiß, str); GivePlayerHealth(playerid,10); for(new i=0; i<MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) { if(IsPlayerInRangeOfPoint(i, 40.0, x, y, z)) { GetPlayerName(playerid, strii, sizeof(strii)); GetPlayerPos(playerid, x, y, z); format(strii, sizeof(strii), "%s hat Drogen genommen!",playerid); SendClientMessage(i, Weiß, strii); } } } return 1;}
der spieler der usedrugs benutzt nimmt 2 mal drogen wenn jemand in der nähe ist
und der andere in der nähe sieht den text "NoxiZ hat Drogen genommen! hat Drogen genommen!"
dcmd_usedrugs(playerid)
{
new String[128], SpielerName[MAX_PLAYER_NAME], Float:x, Float:y, Float:z;if(sSpieler[playerid][Drogen] <= 0) return SendClientMessage(playerid, Weiß, "Du hast keine Drogen!");
sSpieler[playerid][Drogen]--;
GetPlayerPos(playerid, x, y, z);
GivePlayerHealth(playerid, 10);
GetPlayerName(playerid, SpielerName, MAX_PLAYER_NAME);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i, 40.0, x, y, z))
{
format(String, sizeof(String), "%s hat Drogen genommen!", SpielerName);
SendClientMessage(i, Weiß, String);
}
}
}
format(String, sizeof(String), "Du hast 1g Drogen genommen und 10HP erhalten (%d/10)", sSpieler[playerid][Drogen]);
SendClientMessage(playerid, Weiß, String);
return 1;
}//Edit kleiner Fail
-
Hey meine Spielerfunktionen in einem 1Sekunden Timer der sich wiederholt, start bei Serverstart, funktioniert nicht mehr so richtig, aber vor kurzem ging es noch einwandfrei.
Der Timer funktioniert aber die Schleifenfunktion im Timer geht irgendwie nicht mehr und ich kann den Fehler selbst nicht findenCode:
Code
Alles anzeigenforward SecTimer(); public SecTimer() { new str[256], vehid, wepid; for (new i=0; i < MAX_PLAYERS; i++) { wepid = GetPlayerWeapon(i); if(wepid != 0 && wepid != 1 && wepid != 4 && wepid != 8 && wepid != 15) { if(PlayerInfo[i][pWanteds] == 0 && PlayerInfo[i][pLastTeam] != 2) { SendClientMessage(i, WANTED_1, "Waffenbesitz ist illegal. Du erhältst 2 Wanteds."); PlayerInfo[i][pWanteds] += 2; format(str, sizeof(str), "Neues Wantedlevel: %d", PlayerInfo[i][pWanteds]); SendClientMessage(i, WANTED_2, str); } } SetPlayerTeam(i, i); CheckGuns(i); CheckXP(i); if(PlayerInfo[i][pJail] > 0) { PlayerInfo[i][pJail] -= 1; if(PlayerInfo[i][pJail] == 0) { SpawnPlayer(i); GameTextForPlayer(i, "~g~FREIHEIT", 5000, 3); } } if(Troll[i] == true) { if(IsPlayerInAnyVehicle(i)) { vehid = GetPlayerVehicleID(i); if(TrollCounter[i] != 1) { TrollCounter[i] = 1; SetVehicleHealth(vehid, 240.00); } if(TrollCounter[i] == 1) { TrollCounter[i] = 0; SetVehicleHealth(vehid, 1000.00); } } } if(TicketTimer[i] > 0) { TicketTimer[i] -= 1; if(TicketTimer[i] == 0) { if(PlayerInfo[i][pWanteds] <= 5) { PlayerInfo[i][pWanteds] = 6; format(str, sizeof(str), "Neues Wantedlevel: %d", PlayerInfo[i][pWanteds]); SendClientMessage(i, WANTED_1, "Du hast das Ticket nicht bezahlt und hast nun 6 Wanteds."); SendClientMessage(i, WANTED_2, str); } else { PlayerInfo[i][pWanteds] += 2; format(str, sizeof(str), "Neues Wantedlevel: %d", PlayerInfo[i][pWanteds]); SendClientMessage(i, WANTED_1, "Du hast das Ticket nicht bezahlt und erhältst 2 Wanteds."); SendClientMessage(i, WANTED_2, str); } } } if(PlayerInfo[i][pKicked] > 1) { Kick(i); } if(PlayerInfo[i][pCuffed] > 0) { PlayerInfo[i][pCuffed] -= 1; if(PlayerInfo[i][pCuffed] == 0) { SetPlayerSpecialAction(i, SPECIAL_ACTION_NONE); } } // Anti Money Hack ResetPlayerMoney(i); GivePlayerMoney(i, PlayerInfo[i][pMoney]); if(PlayerInfo[i][pLastHit] > 0) { PlayerInfo[i][pLastHit] -= 1; } if(PlayerInfo[i][pLastTeam] == 1) { PlayerInfo[i][pLevel] = PlayerInfo[i][pSkill1]; } else { PlayerInfo[i][pLevel] = PlayerInfo[i][pSkill2]; } SetPlayerScore(i, PlayerInfo[i][pLevel]); } }
-
Sagt crashdetect etwas?
-
Keine Bange der ist nicht kopiert höchstens von mir selber.
habe diesen Befehl:
dcmd_gc(playerid,params[])
{
new text[256];
new spielername[MAX_PLAYER_NAME];
if(sscanf(params,"s",text)) return SendClientMessage(playerid,Weiß,"Info: /gc (text)");
if(sSpieler[playerid][Fraktion] < 1 || sSpieler[playerid][Fraktion] > 2) return SendClientMessage(playerid,Weiß,"Du bist in keiner Gang!");
{
GetPlayerName(playerid,spielername,sizeof(spielername));
format(text,sizeof(text),"%s %s %s: %s",GetFraktionName(playerid),GetRangName(playerid),spielername,text);
SendGangMessage(1&&2,Weiß,text);
}
return 1;
}Wie man sehen kann soll der geschriebene Text an Fraktion 1 und 2 gesendet werden.
Bei Frak. 1 klappt das auch, ob dabei die Nachricht an 2 gesendet wird, weiß ich momentan nicht.
Bei Frak. 2 passiert wiederum nichts. Wie ich schon öfter bemerkt habe, kommt der nicht dastehende Text bei Fraktion 1 an.Mein stock sieht so aus:
//GANGNACHRICHTEN
stock SendGangMessage(frakid,farbe,string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
if(sSpieler[i][Fraktion] == frakid)SendClientMessage(i,farbe,string);
}
}meine komplette bugliste besteht momentan aus diesem problem
-
dcmd_gc(playerid,params[])
{
new text[256];
new spielername[MAX_PLAYER_NAME];
if(sscanf(params,"s",text)) return SendClientMessage(playerid,Weiß,"Info: /gc (text)");
if(sSpieler[playerid][Fraktion] < 1 || sSpieler[playerid][Fraktion] > 2) return SendClientMessage(playerid,Weiß,"Du bist in keiner Gang!");
{
GetPlayerName(playerid,spielername,sizeof(spielername));
format(text,sizeof(text),"%s %s %s: %s",GetFraktionName(playerid),GetRangName(playerid),spielername,text);
SendGangMessage(1,Weiß,text);
SendGangMessage(2,Weiß,text);
}
return 1;
}1&&2 ist ein "Logik-Operator" und wird schließlich zu 1 siehe [wiki]Control_Structures#Operators[/wiki]
-
Gut habs doch gelöst bekommen.
Eine frage wäre aber. kann der befehl deshalb nicht gegangen sein, weil beim makeleader befehl die reiehnfolge nicht korrekt war? -
Hey ich frage mich gerade wie man am besten ein temp ban sys (temporäres Ban System) machen kann.
Das heißt wenn z.B: ein Admin eingibt /ban [ID = 2] [Stunden = 5], dass dieser nach 5 Stunden automatisch entbannt ist?Ich weiß, dass es irgendwie mit Datum + Uhrzeit zusammenhängt jedoch kann ich mir nicht vorstellen wie ich das anstellen soll.
-
Das einfachste wäre wahrscheinlich mit Gettime die Unix-Zeit zum Zeitpunkt des Banns auszulesen und gemeinsam mit der Banndauer in deiner Datenbank zu speichern. Wenn der Spieler sich dann einloggen will, prüfst du, ob der Zeitpunkt des Banns länger zurückliegt, als die Banndauer lang ist. Man sollte dabei allerdings z.B. auf Sommer-/Winterzeit achten. Wenn du Google bemühst, findest du zu "samp temp ban" einige Beispiele
-
Habe diesen Giverank befehl
dcmd_giverank(playerid,params[])
{
new pid;
new rang = sSpieler[playerid][Rang];
new spieler[256];
new leader[256];
new spielername[MAX_PLAYER_NAME];
new leadername[MAX_PLAYER_NAME];
if(sscanf(params,"ud",pid,rang)) return SendClientMessage(playerid,Weiß,"Info: /giverank (playerid)(rang)");
if(pid == INVALID_PLAYER_ID) return SendClientMessage(playerid,Weiß,"Der Spieler mit dieser ID ist nicht Online!");
if(sSpieler[playerid][Leader] < 1) return SendClientMessage(playerid,Weiß,"Du bist kein Leader!");
if(pid == playerid) return SendClientMessage(playerid,Weiß,"Du kannst dir nicht selbst einen Rang geben!");
if(rang < 1 || rang > 6) return SendClientMessage(playerid,Weiß,"Der Rang muss zwischen 1 und 6 liegen!");
GetPlayerName(playerid,leadername,sizeof(leadername));
GetPlayerName(pid,spielername,sizeof(spielername));
if(sSpieler[playerid][Leader] > 0)
{
format(spieler,sizeof(spieler),"Du wurdest von %s zum Rang %d befördert",leadername,rang);
format(leader,sizeof(leader),"Du hast %s zum Rang %d befördert",spielername,rang);
SendClientMessage(pid,Weiß,spieler);
SendClientMessage(playerid,Weiß,leader);
}
return 1;
}und folgenden stock der die rangnamen definieren soll
//FRAKTIONSRÄNGE
stock GetRangName(playerid)
{
new name[32];
name = "Rangname";
switch(sSpieler[playerid][Fraktion])
{
case 1:
{
switch(sSpieler[playerid][Rang])
{
case 1: name = "Laufbursche";
case 2: name = "Fahrer";
case 3: name = "Bodyguard";
case 4: name = "Homie";
case 5: name = "Rechte Hand";
case 6: name = "Anführer";
case 7: name = "Leader";
}
}
case 2:
{
switch(sSpieler[playerid][Rang])
{
case 1: name = "Laufbursche";
case 2: name = "Fahrer";
case 3: name = "Bodyguard";
case 4: name = "Homie";
case 5: name = "Rechte Hand";
case 6: name = "Anführer";
case 7: name = "Leader";
}
}
case 3:
{
switch(sSpieler[playerid][Rang])
{
case 1: name = "Officer";
case 2: name = "Sergeant";
case 3: name = "Leutenant";
case 4: name = "Captain";
case 5: name = "Inspector";
case 6: name = "Chief";
case 7: name = "Stuff Chief";
}
}
case 4:
{
switch(sSpieler[playerid][Rang])
{
case 1: name = "Rettungshelfer";
case 2: name = "Rettungsassistent";
case 3: name = "Rettungssanitäter";
case 4: name = "Notarzt";
case 5: name = "Notärztin";
case 6: name = "Oberarzt";
case 7: name = "Chefarzt";
}
}
case 5:
{
switch(sSpieler[playerid][Rang])
{
case 1: name = "Fahrlehrer";
case 2: name = "Fahrlehrer";
case 3: name = "Fahrlehrer";
case 4: name = "Fahrlehrer";
case 5: name = "Fahrlehrer";
case 6: name = "Stv. Chef";
case 7: name = "Chef";
}
}
case 6:
{
switch(sSpieler[playerid][Rang])
{
case 1: name = "Fahrer";
case 2: name = "Logistiker";
case 3: name = "Fachlogistiker";
case 4: name = "Lagerleiter";
case 5: name = "Lagermeister";
case 6: name = "Stv. Geschäftsleitung";
case 7: name = "Geschäftsleitung";
}
}
}
return name;
}leider ändert sich nur der rang aber nicht der rangname.
habe schon ein paar sachen versucht ohne erfolg