@Monstey:
Die PVar's werden in einem Dialog gesetzt. 1 = DM 2 = Stunt 3 = Gungame deswegen die Abfrage.
Dann sollte es funktionieren, probier's doch mal aus?
@Monstey:
Die PVar's werden in einem Dialog gesetzt. 1 = DM 2 = Stunt 3 = Gungame deswegen die Abfrage.
Dann sollte es funktionieren, probier's doch mal aus?
Ob das Sinn macht? Keine Ahnung, was stellt denn "World" überhaupt da? GetPlayerVirtualWorld?
Ansonsten müsste das funktionieren. Sofern natürlich die if-Abfragen eintreffen, was ich nicht beurteilen kann.
Alles anzeigenhallo,
mein problem ist ich möchte dem gekillten in einem PVarInt +1 gegeben.
Hier Code:
SetPVarInt(playerid,"deads","+1");
Fehler:
C:\Users\User\Desktop\MCAnims\gamemodes\selfmade.pwn(79) : error 035: argument type mismatch (argument 3)
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
SetPVarInt(playerid,"deads",GetPVarInt(playerid,"deads") + 1);
Du musst auch erstmal die aktuelle Anzahl der Tode auslesen, dann kannst du anschließend etwas dazu addieren.
Alles anzeigenIch bekomme hier Fehler weiß aber nicht wodran es liegt
Bread.pwn(2858) : error 029: invalid expression, assumed zero
1 Error.
dcmd_showpda(playerid,params[])
{
#pragma unused params
if(PlayerInfo[playerid][PDA]== 1)
{
{
for(new i=0;i<5;i++)
TextDrawHideForPlayer(playerid, StatsDraw[playerid][i]);
}
else
{
for(new i=0;i<5;i++)
TextDrawShowForPlayer(playerid, StatsDraw[playerid][i]);
return 1;
}
}
return 1;
}
Die zeile ist beim "else"
Wo ist die if-Abfrage geblieben?
Probier mal folgendes:
dcmd_showpda(playerid,params[])
{
#pragma unused params
if(PlayerInfo[playerid][PDA]== 1)
{
for(new i=0;i<5;i++)
´ {
TextDrawHideForPlayer(playerid, StatsDraw[playerid][i]);
}
}
else
{
for(new i=0;i<5;i++)
´ {
TextDrawShowForPlayer(playerid, StatsDraw[playerid][i]);
}
return 1;
}
return 1;
}
error 035: argument type mismatch (argument 3)
Verständlich, du hast nen PlayerTextDraw als globalen TextDraw definiert.
new arenastatus = 0;
new arena[MAX_PLAYERS];
// Irgendwo im Script den Befehl zum Betreten der Arena
// arenastatus++
// Benutzt jemand den Befehl, wird die Variable um 1 hochgezählt
// Variable steht nun also bei 1, kommt der zweite rein, steht die Variable nun bei 2. Somit wäre sie voll.
// Folgendes muss in den Befehl:
if(arenastatus < 3)
{
if(arena[playerid] == 0) // Ist der Spieler schon in der Arena? Wenn nein (0), dann geht's weiter:
{
arena[playerid] = 1; // Spieler ist nun in der Arena
// Port in die Arena
// etc.
}
else
{
// Wenn der Spieler bereits in der Arena ist
}
}
else
{
// Wenn die Arena voll ist.
}
// Befehl für das Verlassen muss enthalten:
// arenastatus--
// arena[playerid] = 0;
Bin mir nicht sicher ob's funktioniert, hab das heute Morgen nur mal fix geschrieben. Müsste aber so passen.
Ich habe das unter OnPlayerConnect, unter OnGameModeInit habe ich ja keine playerid. Es sind ja PlayerTextDraws und keine normalen TextDraws.
Alles anzeigenWie bekomm ich das weg?
Spoiler anzeigen ocmd:sethunger(playerid,params[])
{
new hunger,pID,string1[256],string2[256]; //betroffene Zeile
if(!IsPlayerAnAdmin(playerid,200)) return SendClientMessage(playerid,rot,"Du hast nicht das nötige Adminlevel!");
if(sscanf(params,"ud",pID,hunger)) return SendClientMessage(playerid,rot,"Benutze: /sethunger [Name/ID] [0-100]");
if(hunger<=0 || hunger>=100) return SendClientMessage(playerid,rot,"[Fehler]: Der Wert darf nicht weniger als 0 und nicht mehr als 100 betragen!");
format(string1,sizeof(string1),"Dein 'Hunger' wurde von Admin %s auf %d gesetzt.",SpielerName(playerid),hunger);
format(string2,sizeof(string2),"Du hast den 'Hunger' von %s auf %d gesetzt.",SpielerName(pID),hunger);
SendClientMessage(pID,grau,string1);
SendClientMessage(playerid,grau,string2);
SpielerInfo[pID][pHunger] = hunger;
ShowBedu(pID);
return 1;
}
- Tomsen
Globale Variable mit der Bezeichnung "hunger" vorhanden? Könnte auch ein Public, Array o.ä. sein.
Der Compiler sagt dir ja, dass es diese Variable schon irgendwo gibt, da du in deiner Funktion die Variable "hunger" nicht 2 mal deklariert hast, müsste sie auf jeden Fall global irgendwo sein.
Stimmt, ist mir jetzt eben nicht aufgefallen.
Hab das ganze mal an meine bisherige Formatierung angepasst... und der Compiler zeigt mir überall einen tag mismatch an, warum? Kann man PlayerTextDraws nicht so formatieren wie die eigentlichen globalen Textdraws?
textdrawname[playerid] = CreatePlayerTextDraw(playerid, 10.000000, 436.000000, " "); // -> Name
TextDrawBackgroundColor(textdrawname[playerid], 255); // <- tag mismatch
TextDrawFont(textdrawname[playerid], 2); // <- tag mismatch
TextDrawLetterSize(textdrawname[playerid], 0.330000, 0.799998); // <- tag mismatch
TextDrawColor(textdrawname[playerid], -16776961); // <- tag mismatch
TextDrawSetOutline(textdrawname[playerid], 1); //<- tag mismatch
TextDrawSetProportional(textdrawname[playerid], 1); // <- tag mismatch
Alles anzeigennew PlayerText:textdrawname[MAX_PLAYERS];
new PlayerText:textdrawlevel[MAX_PLAYERS];
new PlayerText:textdrawkills[MAX_PLAYERS];
new PlayerText:textdrawdeaths[MAX_PLAYERS];
new PlayerText:textdrawkd[MAX_PLAYERS];
new PlayerText:textdrawexp[MAX_PLAYERS];
Ich verstehe deinen Post nicht...
Funktioniert bei mir auch nicht, hatte auch mal vor das in meinem Script einzubauen.
Hab mir allerdings dazu ne Alternative gesucht, der Marker aktualisiert sich zwar nicht (wenn man keinen Timer benutzt), aber er setzt trotzdem ein Icon auf die Position des Spielers.
Schau dir das mal an: http://wiki.sa-mp.com/wiki/SetPlayerMapIcon
Probier's mal mit "getup" und "getup_front", beide in der Kategorie PED.
ocmd:aufstehen(playerid,params[])
{
SendClientMessage(playerid,Orange,"Ich.. Ich.. schaff dass! los.. Ich schaff dass !!!");
SetTimerEx("aufstehen", 5000, false, "i", playerid);
return 1;
}
public aufstehen (playerid)
{
ClearAnimations(playerid);
return 1;
}
Müsste so gehen.
Ich würde den Spieler aber während der Animation freezen, sonst kann er ja schon vorher aufstehen.
ocmd:aufstehen(playerid,params[])
{
SendClientMessage(playerid,Orange,"Ich.. Ich.. schaff dass! los.. Ich schaff dass !!!");
TogglePlayerControllable(playerid,0);
SetTimerEx("aufstehen", 5000, false, "i", playerid);
return 1;
}
public aufstehen (playerid)
{
TogglePlayerControllable(playerid,1);
ClearAnimations(playerid);
return 1;
}
Moin Leute, wie kann ich ne 1vs1 Arena scripten, mit Variablen & Forschleife hab ich schon versucht, evtl jemand ne Lösung für mich?
new arenastatus = 0;
new arena[MAX_PLAYERS];
// Irgendwo im Script den Befehl zum Betreten der Arena
// arenastatus++
// Benutzt jemand den Befehl, wird die Variable um 1 hochgezählt
// Variable steht nun also bei 1, kommt der zweite rein, steht die Variable nun bei 2. Somit wäre sie voll.
// Folgendes muss in den Befehl:
if(arenastatus < 3)
{
if(arena[playerid] == 0) // Ist der Spieler schon in der Arena? Wenn nein (0), dann geht's weiter:
{
arena[playerid] = 1; // Spieler ist nun in der Arena
// Port in die Arena
// etc.
}
else
{
// Wenn der Spieler bereits in der Arena ist
}
}
else
{
// Wenn die Arena voll ist.
}
// Befehl für das Verlassen muss enthalten:
// arenastatus--
// arena[playerid] = 0;
Bin mir nicht sicher ob's funktioniert, hab das eben nur mal fix geschrieben. Und wozu braucht man hier for-Schleifen?
Kommt auf die Parameter des Publics an.
Bei einem Timer wäre es wohl
forward OnNPCModeInit();
Wenn du jetzt allerdings Variablen (wie zum Beispiel "playerid") in die Funktion mit eingibst, heißt der Public ja
public OnNPCModeInit(playerid)
Demnach müsste das so weitergeleitet werden:
forward OnNPCModeInit(playerid);
Da ich den Public nicht kenne, kann ich dir leider nicht sagen wie die Deklaration aussehen muss. Sollte aber mit meiner Erklärung oben auch selbst machbar sein.
Benutzt du noch irgendwo anders innerhalb einer Funktion die Variable "supmobil"?
Kann natürlich sein dass es einen Konflikt mit der globalen Variable gibt.
Deklariere mal zum Test eine Variable die du "supmobil2[MAX_PLAYERS]" nennst und dann dementsprechend in deinem Stock die Variable auf "supmobil2[playerid]" anpasst.
Warum jetzt nochmal einen Thread? Hättest das auch in den von eben posten können.
Ich hatte dir auch übrigens ne Lösung für den Error in Zeile 4750 gegeben...
11 Errors im script bitte um hilfe
Und was bitte soll das in Zeile 165 sein?
C:\Users\rolf\Desktop\mein scripte ordner\2489_1999\gamemodes\GNE.pwn(4744) : error 017: undefined symbol "supmobil"
Du hast die Variable "supmobil" nicht deklariert, deshalb zeigt er auch den Fehler in der ersten Zeile an, bei der die Variable vorkommt.
Ganz oben im Script:
new supmobil[MAX_PLAYERS];
Beim Rest kann ich dir nicht helfen, wenn du die Funktionen dazu nicht postest. Vermutlich ist es aber einfach nur ein Tippfehler...
public IFace(playerid)
{
new string[256],string2[256],string3[256],string4[256];
format(string,sizeof(string),"~r~Level~w~: %d",SpielerInfo[playerid][pAge]);
TextDrawSetString(InterFace[playerid][InterFace2], string);
TextDrawShowForPlayer(playerid, InterFace[playerid][InterFace2]);
return 1;
}
Du gibst einen Integer aus, keinen String.
Wenn ich eine Leiste unten mit den Stats ausgeben möchte, wie mache ich das dann am besten? Bin jetzt so weit, das die Daten zwar korrekt für jeden Spieler angezeigt werden, allerdings immer nur für einen. Wenn der Nächste connected, verschwindet die Statsleiste bei mir und taucht bei demjenigen auf, der sich frisch mit dem Server verbunden hat. Wie mache ich das für alle?
new Text:textdrawname[MAX_PLAYERS];
new Text:textdrawlevel[MAX_PLAYERS];
new Text:textdrawkills[MAX_PLAYERS];
new Text:textdrawdeaths[MAX_PLAYERS];
new Text:textdrawkd[MAX_PLAYERS];
new Text:textdrawexp[MAX_PLAYERS];
stock SetPlayerTextDraws(playerid)
{
new namestring[30],
levelstring[30],
killsstring[30],
deathsstring[30],
kdstring[30],
expstring[30];
format(namestring,sizeof(namestring),"Name: %s",PlayerName(playerid));
TextDrawSetString(textdrawname[playerid],namestring);
TextDrawShowForPlayer(playerid,textdrawname[playerid]);
format(levelstring,sizeof(levelstring),"Level: %d",GetPlayerScore(playerid));
TextDrawSetString(textdrawlevel[playerid],levelstring);
TextDrawShowForPlayer(playerid,textdrawlevel[playerid]);
format(killsstring,sizeof(killsstring),"Kills: %d", PlayerInfo[playerid][Kills]);
TextDrawSetString(textdrawkills[playerid],killsstring);
TextDrawShowForPlayer(playerid,textdrawkills[playerid]);
format(deathsstring,sizeof(deathsstring),"Deaths: %d", PlayerInfo[playerid][Deaths]);
TextDrawSetString(textdrawdeaths[playerid],deathsstring);
TextDrawShowForPlayer(playerid,textdrawdeaths[playerid]);
format(kdstring,sizeof(kdstring),"K/D: %0.2f",Float:PlayerInfo[playerid][Kills] / Float:PlayerInfo[playerid][Deaths]);
TextDrawSetString(textdrawkd[playerid], kdstring);
TextDrawShowForPlayer(playerid,textdrawkd[playerid]);
format(expstring,sizeof(expstring),"EXP: %d",PlayerInfo[playerid][EXP]);
TextDrawSetString(textdrawexp[playerid], expstring);
TextDrawShowForPlayer(playerid,textdrawexp[playerid]);
return 1;
}
unter OnPlayerSpawn ist der Methodenaufruf: SetPlayerTextDraws(playerid)
-> Wenn Spieler spawnt, sollen die Textdraws angezeigt werden.
unter OnPlayerDeath ist dieser für die playerid und killerid: SetPlayerTextDraws(killerid); SetPlayerTextDraws(playerid);
Was stimmt hier nicht? Normalerweise müsste das doch funktionieren...