Wie formatiere ich den denn, welchen string?
Oder muss ich den Dialog einmal in strcat umschreiben?
Wie formatiere ich den denn, welchen string?
Oder muss ich den Dialog einmal in strcat umschreiben?
Alles klar, verstehe.
Noch ne kleine Frage (:D)
Wie kann ich da wo #EventHealth steht, die aktuelle Nummer der Variable anzeigen lassen?
CMD:ecfg(playerid,params[])
{
ShowPlayerDialog(playerid, D_EVENTCFG, DIALOG_STYLE_TABLIST_HEADERS, "Event Configuration",
"Name\tStatus\tType\n\
Max Players\t100\tINPUT\n\
Health\t"#eventhealth"\tINPUT\n\
Armour\t100\tINPUT\n\
Skin\t67\tINPUT\n\
HP Regain\t25\tINPUT\n\
Nametags\tOFF\tBOOLEAN\n\
Vehicles\tON\tBOOLEAN",
"OK", "");
return 1;
}
Wenn z.B. die Variable so ausschaut new Float:eventhealth = 100.0; soll im Dialog auch die 100 (oder 100.0) angezeigt werden.
Okay, funktioniert perfekt.
Beim senden von Error Meldungen möchte ich immer das Dialogfeld erneut zeigen, muss ich dafür immer erneut ShowPlayerDialog verwenden oder kann man das auch einfacher lösen?
Beispiel:
if(dialogid == D_HEALTHCFG && response == 1)
{
if(!IsNumeric(inputtext))
{
ShowPlayerDialog(playerid, D_HEALTHCFG, DIALOG_STYLE_INPUT, "Event Health", "Please set the Event Health.", "OK", "");
return SendClientMessage(playerid, -1,"Only numbers here!");
}
if(strval(inputtext) < 1 || strval(inputtext) > 100)
{
ShowPlayerDialog(playerid, D_HEALTHCFG, DIALOG_STYLE_INPUT, "Event Health", "Please set the Event Health.", "OK", "");
SendClientMessage(playerid, -1, "Event Health: Min 1 / Max 100.");
return 1;
}
new string[64];
eventhealth = floatstr(inputtext);
format(string, sizeof(string),"You've set the Event Health to {FF0000}%0.2f",eventhealth);
SendClientMessage(playerid, -1, string);
}
Jetzt klappt's, danke euch zwei.
Gibt's auch eine Möglichkeit wie ich abfragen kann ob er Zahlen eingegeben hat oder nicht?
if(dialogid == D_HEALTHCFG && response == 1)
{
new string[64];
eventhealth = floatstr(inputtext);
format(string, sizeof(string),"You've set the Event Health to %f",inputtext);
SendClientMessage(playerid, -1, string);
}
Egal was ich eingebe, es erscheint immer die Nachricht das dass Health auf 0.00000 gesetzt wurde.
Dankeschön @Jeffry
Letzte Frage für Heute:
Möchte per Dialog einstellen wie viel HP ein Spieler bei einem Event gesetzt bekommt, dafür nutze ich ein Dialog.
Nur weiß ich nicht wie ich Input-Text korrekt verwende, aktuell sieht alles so aus, nur fehlt halt die Inputtext Funktion.
//Standard kriegt der Spieler 100 HP beim betreten.
new eventhealth = 100;
Spieler betretet event:
SetPlayerHealth(playerid, eventhealth);
Dialog:
if(dialogid == D_HEALTHCFG && response == 1)
{
eventhealth = inputtext; //wie frage ich hier den Inputtext ab?
}
Danke @Kaliber
Möchte alle Fahrzeuge beim unloaden vom FS löschen, scheint aber nicht zu funktionieren.
public OnFilterScriptExit()
{
DestroyVehicle(eventvehicle);
SendClientMessageToAll(-1,"Event System {FF0000}unloaded.");
return 1;
}
Mit einer Schleife habe ich es ebenfalls versucht..
Hey, möchte von einem Array aus Fahrzeuge erstellen. Ich mache irgendwas falsch :>
new Float:vSpawn[][4] =
{
{680.47, -2701.11, 5.63, 84.49},
{579.42, -2800.48, 5.63, 84.49},
{589.07, -2617.21, 5.63, 84.49},
{511.48, -2881.83, 5.63, 84.49},
{785.75, -2831.08, 5.63, 84.49},
{758.51, -2624.00, 5.63, 84.49},
{476.99, -2700.88, 5.63, 84.49}
};
public OnFilterScriptInit()
{
CreateVehicle(520, vSpawn[0], vSpawn[1], vSpawn[2], vSpawn[3], -1, -1, 120, 1); //error line
EventStarted = false;
CreateMapObjects();
SendClientMessageToAll(-1,"Event System {00FF00}loaded!");
return 1;
}
(123) : error 035: argument type mismatch (argument 2)
Ja, such mal nach SA-MP Colorpicker. Bin gerade am Handy und kann dir kein Link schicken.
Noch ne kleine Frage: Kann ich checkpoints eine unique ID geben?
z.B.
AirportCheckpoint[1] = SetPlayerCheckpoint(....); oder so ähnlich?
Denke schon, ungetestets Beispiel:
new uniquecp[5];
public OnPlayerEnterCheckpoint(playerid)
{
if(uniquecp[0])
{
SendClientMessage(playerid, -1, "Ab zum nächsten Checkpoint");
uniquecp[1] = SetPlayerCheckpoint(playerid, 0, 0, 0, 10);
}
if(uniquecp[1])
{
SendClientMessage(playerid, -1, "CP 1");
}
return 1;
}
Wie wär's wenn du uns dein aktuellen Code zeigst?
Hi, möchte das wenn der Spieler AFK geht ein Timer über sein Kopf erstellt wird der anzeigt wie lange er bereits AFK ist.
Dafür habe ich mir einige Funktionen geschrieben und viele auch abgeschrieben, nur habe ich beim abgeschriebenen Teil etwas falsch gemacht da ich um ehrlich zu sein nicht zu 100 % verstehe wie ich die korrekt anwende.
Aktueller Code sieht so aus:
forward IsPlayerAFK(playerid);
public IsPlayerAFK(playerid)
{
new pausemsg[128];
new Text3D:afklabel[MAX_PLAYERS] = {Text3D:-1,...};
BlockJoinRoundSpam[playerid] = gettime() + 60;
TogglePlayerAllDynamicAreas(playerid, 1);
TogglePlayerDynamicArea(playerid, ZoneInfo[Round[r_areaid]][z_Ids], 0);
GangZoneHideForPlayer(playerid, ZoneInfo[Round[r_areaid]][z_id]);
SetPlayerPos(playerid, -1493.9802,-2354.8193,30.5302);
ResetPlayerWeapons(playerid);
IsInLobby[playerid] = true;
format(pausemsg, sizeof(pausemsg),"{%06x}%s {FFFFFF}has been {%06x}forced {FFFFFF}into the Lobby because he went{%06x} AFK.", GetPlayerColor(playerid) >>> 8, GetName(playerid), GetPlayerColor(playerid) >>> 8, GetPlayerColor(playerid) >>> 8);
SendClientMessageToAll(-1, pausemsg);
KillTimer(afktimer[playerid]);
//Text Label
new Float: x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
afklabel[playerid] = CreateDynamic3DTextLabel("", -1, x, y, z, 50, playerid, INVALID_VEHICLE_ID, 0,-1,-1, -1, 50);
Attach3DTextLabelToPlayer(afklabel[playerid], playerid, x, y, z);
new t = gettime(), str[64], h, m, s;
h = s / 3600;
s -= h * 3600;
m = s / 60;
s -= m * 60;
format(str, sizeof(str), "%dh %dm %ds", h, m, s);
Update3DTextLabelText(afklabel[playerid], -1, str);
return 1;
}
Hmm habe das so eingefügt, es scheint nicht zu funktionieren (ich werde zum 0 Punkt teleportiert (Blueberry))
Habe Nachrichten ausgeben lassen um zu überprüfen ob es aufgerufen wird:
"Feature activated" taucht einmal auf, aber man wird nicht zu den Spielern teleportiert.
"Normal Spawn appeared" taucht komischerweise zwei mal auf.
if(pData[playerid][P_SpawnPeople] == 1) //Prüfen ob der Spieler das Feauture besitzt
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue; // Logisch
if(pData[i][P_Watching] != false || IsInLobby[i] != false || InDuel[i] != false)continue; //i befindet sich im Spec, in der Lobby oder im Duel
new Float: x, Float: y, Float:z;
GetPlayerPos(i, x, y, z); //Position vom Gegner abfragen
SetPlayerPos(playerid, x+2, y, z); //Spieler zum Gegner teleportieren
SendClientMessage(playerid, -1, "Feature activated");
break;
}
return 1;
}
else
{
SetPlayerRandomPos(playerid);
SendClientMessage(playerid, -1, "Normal spawned appeared");
}
return 1;
}
Hey, ich arbeite an einem kleinen System, habe ein Ansatz wie ich das machen soll aber weiß nicht wie ich das 100 % richtig mache.
Du hast als Spieler die Möglichkeit ein Feature zu kaufen, solltest du dieses Feature besitzen hast du die Chance in der Nähe eines Spielers zu spawnen.
Aktuell sieht das so aus:
Frage:
Wie frage ich die Position von nur einem einzigen Spieler ab und teleportiere den Spieler auch nur einmal? Ist sonst alles andere richtig oder habe ich was falsch gemacht?
if(pData[playerid][P_SpawnPeople] == 1) //Prüfen ob der Spieler das Feauture besitzt
{
if(pData[playerid][P_Watching] == false || IsInLobby[playerid] == false || InDuel[playerid] == false) //Gegner befindet sich nicht im Spec, in der Lobby oder im Duel
for(new i = 0; i < MAX_PLAYERS; i++)
{
new Float: x, Float: y, Float:z;
GetPlayerPos(i, x, y, z); //Position vom Gegner abfragen
SetPlayerPos(playerid, x+2, y, z); //Spieler zum Gegner teleportieren
}
}
else //Spieler besitzt nicht das Feature und wird normal gespawnt
{
SetPlayerRandomPos(playerid);
}
return 1;
}
Hi, wird der Rest meines Codes im Public aufgerufen wenn ich return 0; in der folgenden Funktion verwende?
if(AntiWeaponHackSetting == false)
{
AntiWeap[playerid] = SetTimerEx("AntiWeaponHack", 5000, true, "i", playerid);
return 0;
}
Also, alles was danach steht (public) wird das noch ausgeführt?
Schöne Sache aufjedenfall, habe mich angemeldet aber es erscheint immer die Meldung "Kein Traffic mehr"..
Sieht echt sehr sehr stark aus, gute Arbeit
Hmm wie kann ich GetPlayerColor in einem stock einbauen?
Hab es so, aber das geht ja so nicht..
stock pColor(playerid){ GetPlayerColor(playerid) >>> 8);}
Edit:
Ach hat sich erledigt, so geht's richtig xD
stock pColor(playerid)
{
GetPlayerColor(playerid) >>> 8
}
Hi, habe ein kleines Problem.
Habe ein Befehl womit man Spieler - Namen ändern kann, der funktioniert soweit auch ganz gut und der Spielername wird richtig gesetzt.
Doch wenn sich der Spieler, dessen Name geändert wurde vom Server trennt, wird sein Name ganz anders gespeichert, immer als eine Zahl oder so (z.B. 75)
Befehl schaut so aus:
CMD:changename(playerid, params[]) {
new playerID, cQuery[95], newName[24];
if(pData[playerid][P_Admin] < 6) return
SendClientMessage(playerid, COLOR_RED, LV_Fail);
if(sscanf(params,"us[24]", playerID, newName)) return
SendClientMessage(playerid, COLOR_RED, "Use: /changename <player> <name>");
if(!IsPlayerConnected(playerID)) return
SendClientMessage(playerid, COLOR_RED, ID_Fail);
if(!(4 < strlen(params[1]) < MAX_PLAYER_NAME)) return
SendClientMessage(playerid, COLOR_RED, "The name must be min 4 chars and max 23 chars!");
format(cQuery, sizeof(cQuery), "SELECT * FROM `players` WHERE Name = '%s'", newName);
mysql_query(MySQL, cQuery);
mysql_store_result();
if(mysql_num_rows() == 0) {
format(cQuery, sizeof(cQuery), "UPDATE `players` SET Name = '%s' WHERE Name = '%s'", newName, GetName(playerID));
mysql_query(MySQL, cQuery);
SaveAccount(playerID);
format(cQuery, sizeof(cQuery), "Admin %s changed %s name to %s", GetName(playerid), GetName(playerID), newName);
writeLog("Logs/General.txt", cQuery);
SetPlayerName(playerID, newName);
new Update[128];
format(Update, sizeof(Update), "UPDATE `players` SET Name = %d WHERE Name = '%s'", newName, GetName(playerID));
mysql_query(MySQL, Update);
if(IsSilent[playerid] == false) {
format(cQuery, sizeof(cQuery), "Your name has been changed to %s by %s", newName, GetName(playerid));
SendClientMessage(playerID, COLOR_RED, cQuery);
}
} else {
SendClientMessage(playerid, COLOR_RED, "This name is already in use.");
}
return 1;
}