Wenn ein Zeichen im noch nicht gepakten (wann wird der denn gepackt ?)String 4 Byte groß ist, also 32 Bit, müsste dann die reservierung new string[128]; nicht theoretisch vervierfacht werden ? Oder bezieht sich das [128] auf den gepackten String, wo ja jedes Zeichen nur 1 Byte (8 Bit) groß ist ?
Beiträge von Hagi
-
-
Hab mal eine allgemeinbildene Frage:
Wenn man einen String mit [128] reserviert, sind das dann Bit oder Byte ?
Weil ich meine 1 Zeichen aus dem ASCII sind doch 8 Bit oder ?PS: Sollte es in einen anderen Bereich gehören bitte dorthin schieben, habs jetzt nur hier rein gemacht weil ich mich auf, aus meinem Script stammende, string[128] beziehe.
-
Platzhalter für Strings sind %s
Dein Ping: [%d]
in
Dein Ping: [%s]ps du reservierst da viel speicherplatz in deinen strings.
128 würd allemal reichen -
also wenn man /dm3 macht soll / kill deaktiviert werden ?
isclosed = 1; // kommt in /dm3 rein
Und dann kill so
if(!strcmp(cmdtext, "/kill", true))
{
if(isclosed == 0)
{
SetPlayerHealth(playerid, 0.0);
}
else
{
SendClientMessage(playerid,0xFFFFFFAA,"Der Command wurde deaktiviert weil jemand im dm3 ist");
}
return 1;
}Wenn es nur für die Spieler deaktiviert werden soll die in dm3 sind dann so:
new isclosed[MAX_PLAYERS]; // alternativ SetPVarInt(playerid,"isclosed",0);
dann im /dm3
isclosed[playerid] = 1; // alternativ SetPVarInt(playerid,"isclosed",1);
und /kill so
if(!strcmp(cmdtext, "/kill", true))
{
if(isclosed[playerid] == 0) // oder alternativ if(GetPVarInt(playerid,"isclosed") == 0)
{
SetPlayerHealth(playerid, 0.0);
}
else
{
SendClientMessage(playerid,0xFFFFFFAA,"Der Command wurde deaktiviert weil du im dm3 bist);
}
return 1;
} -
Xivo, der nativ sieht wie folgt aus
TextDrawHideForPlayer(playerid, Text:text);
Also musst du TextDrawHideForPlayer(i,playerclick[i]);
machen@dit @Tafil
if(isclosed == 0) // wenn also die commands ativiert sind
{
return 1;
}
else
{
SendClientMessage(playerid,farbe,"CMD Deaktiviert");
} -
Du könntest über eine Variable cmd sperren.
new isclosed;
Je nachdem ob an oder aus sein sollisclosed = 1;
//oder
isclosed = 0;Jetzt in den einzelnen Commands
if(isclosed == 0) // wenn also die commands ativiert sind
Bei Commands die nicht vom Sperren betroffen sein soll, die abfrage einfach weglassen
-
public DeleteTextdraw(playerid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
TextDrawDestroy(playerclick[i]);// <-- STELLE GEMEINT
}
return 1;
}Würd ich jetzt mal sagen.
@dir ||@cinema
Ja links unten und rechts oben, wobei links unten IMMEr kleiner als rechts oben sein soll.
Das Problem ist nur es gibt meines wissens nach kein nativ um zu ÜBerprüfen ob ein Spieler in einer GangZone ist
Löscht den textdraw von jedem Spieler -
hast du sowas im script
new Text:playerclick;
playerclick = TextDrawCreate......?
-
Ja das werden 4 Eckpunkte sein, also kann man wohl auch abstrakte vierecke machen.
Doch ich finde nichts zum downloaden. Aber wenns sowas gibt, wird man es wohl auch runterladen können. Die Frage ist halt nur wo ?
-
Mit nem Radius kann man da jetzt nicht arbeiten da eine Zone ja ein Rechteck ist.
Man bräuchte eine Funktion wie IsPlayerInZone.
Leider gibt es diese nur mit einem, mir nicht bekannten, Include.
Vllt kannst du damit ja was anfangen
Klick
Ganz unten ist was das heißt mic_zonewo man es runterladen kann weiß ich leider auch nicht
-
Ne wird nicht verworfen, zumindest laut meiner Logik her nicht
new maxplayers = GetMaxPlayers(); // variable wird erstellt
#undef MAX_PLAYERS // define wird gelöscht , variable aber nicht
#define MAX_PLAYERS maxplayers // define wird mit vorhandener variable erstelltDie Frage ist nun ob man ein define mit einer Variable definieren kann
@dit |@ cinema
Du kanst für jede Reihe ein Array machen new
reihe1[2] // 2 da 3 felder
reihe2[2] // 2 da 3 felder
reihe3[2] // 2 da 3 felder
/*
reihe1[0] | reihe1[1] | reihe1[2] --> 1 | 2 | 3
reihe2[0] | reihe2[1] | reihe2[2] --> 4 | 5 | 6
reihe3[0] | reihe3[1] | reihe3[2] --> 7 | 8 | 9
*/Denke du willst Tic Tac Toe machen ^^. Also legst du einfach die playerid als inhalt der Array-Zelle fest
reihe1[0] = playerid;
@dit: mit einem array gehts natürlich auch
new reihe[2/*reihe*/][2/*spalte*/];
-
Ui dann weis ich auch grad nicht , vllt weiß ja jemand anders weiter
-----------
Hab jetzt aber selber mal ne Frage.
Man macht ja um Recourcen zu sparen MaxPlayers immer nur so hoch wie Slots verfügbar sind
#undef MAX_PLAYERS
#define MAX_PLAYERS 100aber kann man nicht theoretisch auch sowas machen ?
new maxplayers = GetMaxPlayers();
#undef MAX_PLAYERS
#define MAX_PLAYERS maxplayersWeil wenn ich das so in nen Befehl mache, sagt er mir maxplayers seie nicht definiert und einmal es würde nicht benutzt.
Und wäre es Recorcensparender die Slotanzahl als MAxPlayers festzulegen oder jede Sekunde zu schaun wie viele Spieler online sind (getMaxPlayers) ?
-
Mach mal das und sag uns was in der log steht
printf("Leader: %d || Member: %d",PlayerInfo[playerid][pLeader],PlayerInfo[playerid][pMember]);
Vllt ist der Fehler auch ganz einfach zu einfach wie z.B. dass du nicht in dem Team bist
-
Ansonsten kannst du auch einfach das in OnPlayertext reinmachen
new oocstring[128];
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
format(string,sizeof(string),"%s sagt %s",pname,text);
SendClientMessageToAll(farbe,oocstring); -
Erstmal es ist pwn und amx.
Du drückst einfach F5 in Pawno, damit compilest du das und die amx entsteht.
Wenn du wissen willst was da genau passiert, frag mal Blackfox, der kennst sich mit Bit und Byte und so aus
-
Hier ist doch schon der Fehler, wenn der Spieler in der Fraktion 10 ist, wird er rausgeschmissen
if(pLeader == 10 || pMember == 10)
{
SendClientMessage(playerid,COLOR_GREY," Du hast kein Zugriff auf dieses Fahrzeug!");
TogglePlayerControllable(playerid, 0);
TogglePlayerControllable(playerid, 1);
}Muss es dann doch eher so sein
if(pLeader != 10 || pMember != 10)
{
SendClientMessage(playerid,COLOR_GREY," Du hast kein Zugriff auf dieses Fahrzeug!");
TogglePlayerControllable(playerid, 0);
TogglePlayerControllable(playerid, 1);
} -
hier machs so
if(strcmp(cmdtext, "/triggero", true) == 0)
{
new namestring[128];
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));if(strcmp(namestring,"[LSR]Trigger",false))
{
MoveObject(triggersgarage,837.3857421875, -2634.8369140625, 7.8192596435547,2);
SendClientMessage(playerid,green," Deine Garage ist offen");
}
return 1;
}"Namestring" ist nur die bezeichnung für einen String, Zeichenkette, muss demnach auch nicht anders genannt werden
-
new namestring[128];
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
format(namestring,sizeof(namestring),"%s",pname);
if(strcmp(namestring,"hierdername",false))
{
//tuwasmantuenmuss
} -
new countdown = 0;
forward checkcountdown();dann z.B. ein dcmd command
dcmd_countdown(playerid,params[])
{
new sekunden;if(sscanf(params, "d",sekunden))
{
return SendClientMessage(playerid,weiß,"Benutzung: /countdown [sekunden]");
}
countdown = sekunden;
SetTimer("checkcountdown",1000,0);
}public checkcountdown()
{
if(countdown >= 1)
{
new string[128];
format(string,sizeof(string),"~r~%d",countdown);
GameTextForAll(string,1000,3);
countdown --;
SetTimer("checkcountdown",1000,0);
}
else
{
GameTextForAll("~g~ GO GO GO",1000,3);
}
}Ich hoffe das funktioniert, bin leider grad etwas müde
-
Weil in deinem Callback Playerid nicht als Variable definiert ist.
Gib mal den kompletten Public wo dein Auszug drin steht