Die obere IF-Abfrage
if(SpielerInfo[playerid][pSpawnChange] != 0)
muss weg!
Die obere IF-Abfrage
if(SpielerInfo[playerid][pSpawnChange] != 0)
muss weg!
Hab gerade einen Denkfehler im code gefunden, also bitte ersetze die unteren zwei Funktionen!
RW_CreatePlayerObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ)
{
new counter=GetPVarInt(playerid,"PlayerObjectsCreated"),playerid=CurrentVWPlayer;
PlayerObject[playerid][counter]=CreatePlayerObject(playerid,modelid,X,Y,Z,rX,rY,rZ);
SetPVarInt(playerid,"PlayerObjectsCreated",counter+1);
return PlayerObject[playerid][counter];
}
#define CreateObject RW_CreatePlayerObject
public OnPlayerVirtualWorldChange(playerid,oldvw,newvw)
{
CurrentVWPlayer=playerid;
DeleteOldPlayerObjects(playerid);
switch(newvw) //Überprüft zu welcher Virtuellen Wert er gesetzt hat
{
case 0: //Wenn die neue Virtuelle Welt 0 ist, dann...
{
//Hier fügst du die Objecte im CreateObject Stil ein, welche für den Spieler angezeigt werden sollen
//wenn er in der VirtuellenWelt 0 ist...
}
case 1: //Wenn die neue Virtuelle Welt 1 ist, dann...
{
//Das gleiche gilt für das obige, nur für die VirtuelleWelt 1, usw...
}
case 2: //Wenn die neue Virtuelle Welt 2 ist, dann...
{
}
case 3: //Wenn die neue Virtuelle Welt 3 ist, dann...
{
}
//usw ^^
}
CurrentVWPlayer=INVALID_PLAYER_ID;
return true;
}
Zeig mal die Definition (new) von "gPotnumber"
@ RFT zu seinem Code:
OnPlayerEnterVehicle wird immer aufgerufen, auch wenn er nicht einsteigt
Nunja, ich hab im GF einen Bug gehabt, dass wenn wer gefesselt war (TogglePlayerControllable) und das Fahrzeug explodiert, dass es der gefesselte Spieler überlebt. Mit der Variante von RFT kann man dann entdecken ob der Spieler gefesselt "war" und ihn schnell im nachhineinen per SetPlayerHealth töten
//EDIT: Habe statt RFT immer MFT geschrieben, sry
Zeig mal bitte
forward OOCOff
wenn es nicht vorhanden ist, dann füge im Script folgendes ein:
forwardOOCOff(color,const string[]);
@ Grex, weil die killerid meißt falsch ist und er würde vl es so wie RFT beschrieben haben wissen, welche Spieler noch im Fahrzeug waren oder sonstwas
Die andere frage wäre, warum jeder Spieler eine eigene Staatskasse hat? Ansich wäre das eine geile Idee, aber naja
Ich habe mal bissl geraden, also bitte schicke uns nach dem Code die neuen Fehler und markiere uns die Zeilen, danke!
public OOCOff(color,const string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)||gOoc[i]) continue;
SendClientMessage(i, color, string);
}
return 1;
}
public Lotto(number)
{
new JackpotFallen = 0;
new string[128];
new winner[MAX_PLAYER_NAME];
format(string, sizeof(string), "Lotterie News: Die heutige Gewinnnummer: %d.", number);
format(string, sizeof(string), "Lotterie News: ~n~ Heutige Nummer: ~p~ %d", number);
GameTextForAll(string, 4000, 6);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pLottoNr] > 0)
{
if(PlayerInfo[i][pLottoNr] == number)
{
JackpotFallen = 1;
GetPlayerName(i, winner, sizeof(winner));
format(string, sizeof(string), "Lotterie News: %s hat den Jackpot von $%d gewonnen!", winner, Jackpot);
OOCOff(0x0000FFFC,const string[]);
format(string, sizeof(string), "* Du gewinnst $%d mit Deinem Lottolos!", Jackpot);
OOCOff(0x0000FFFC,const string[]);
SendClientMessage(i, COLOR_WHITE, string);
format(string, sizeof(string), "~g~~h~~h~Gewinnt die Lotterie!!! ~n~~g~$%d !! ~n~~n~~n~~p~Glueckwunsch!!!!", Jackpot);
GameTextForPlayer(i, string, 5000, 3);
ConsumingMoney[i] = 1;
GivePlayerMoney(i, Jackpot);
}
else
{
SendClientMessage(i, COLOR_WHITE, "Leider hast Du diesmal nichts gewonnen!");
}
}
PlayerInfo[i][pLottoNr] = 0;
}
}
if(JackpotFallen)
{
new rand = random(10000); rand += 5789;
Jackpot = rand;
SaveStuff();
format(string, sizeof(string), "Lotterie News: Der neue Jackpot startet mit $%d.", Jackpot);
OOCOff(COLOR_WHITE,const string[]);
}
else
{
new rand = random(5000); rand += 2158;
Jackpot += rand;
SaveStuff();
format(string, sizeof(string), "Lotterie News: Der Jackpot wurde auf $%d erhöht.", Jackpot);
OOCOff(COLOR_WHITE,const string[]);
}
return 1;
}
Nein, ich sehe es auch gerade, seine Schleife ist totaler Schwachsinn!
Bitte korrigiere deine Schleife zu
for(new i; i != MAX_PLAYERS; i++)
Jaja immer dieses Fehlermeldungen vom deutschen PAWN Compiler
zeig mir mal die Definition (new) von Kassen mit der zugehörigen enum-Struktur.
Hab dir hier einen kleinen Codeschnippsel mit erklärungen gemacht Zwar ist es ungetstet, müsste jedoch funktionieren!
new PlayerObject[MAX_PLAYERS][MAX_OBJECTS];
new CurrentVWPlayer=INVALID_PLAYER_ID;
DeleteOldPlayerObjects(playerid)
{
for(new object;object!=GetPVarInt(playerid,"PlayerObjectsCreated");object++)
{
if(PlayerObject[playerid][object]==0) continue;
DestroyPlayerObject(playerid,PlayerObject[playerid][object]); PlayerObject[playerid][object]=0;
}
DeletePVar(playerid,"PlayerObjectsCreated");
return true;
}
RW_CreatePlayerObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ)
{
new counter=GetPVarInt(playerid,"PlayerObjectsCreated"),playerid=CurrentVWPlayer;
PlayerObject[playerid][counter]=CreatePlayerObject(playerid,modelid,X,Y,Z,rX,rY,rZ);
SetPVarInt(playerid,"PlayerObjectsCreated",counter+1); CurrentVWPlayer=INVALID_PLAYER_ID;
return PlayerObject[playerid][counter];
}
#define CreateObject RW_CreatePlayerObject
forward public OnPlayerVirtualWorldChange(playerid,oldvw,newvw);
forward CheckVirtualWorldForPlayer();
public OnPlayerVirtualWorldChange(playerid,oldvw,newvw)
{
CurrentVWPlayer=playerid;
DeleteOldPlayerObjects(playerid);
switch(newvw) //Überprüft zu welcher Virtuellen Wert er gesetzt hat
{
case 0: //Wenn die neue Virtuelle Welt 0 ist, dann...
{
//Hier fügst du die Objecte im CreateObject Stil ein, welche für den Spieler angezeigt werden sollen
//wenn er in der VirtuellenWelt 0 ist...
}
case 1: //Wenn die neue Virtuelle Welt 1 ist, dann...
{
//Das gleiche gilt für das obige, nur für die VirtuelleWelt 1, usw...
}
case 2: //Wenn die neue Virtuelle Welt 2 ist, dann...
{
}
case 3: //Wenn die neue Virtuelle Welt 3 ist, dann...
{
}
//usw ^^
}
return true;
}
public CheckVirtualWorldForPlayer()
{
for(new playerid;playerid!=MAX_PLAYERS;playerid++)
{
if(!IsPlayerConnected(playerid)) continue;
if(GetPVarInt(playerid,"PlayerVW")!=GetPlayerVirtualWorld(playerid))
{
CallLocalFunction("OnPlayerVirtualWorldChange","ddd",playerid,GetPVarInt(playerid,"PlayerVW"),GetPlayerVirtualWorld(playerid));
SetPVarInt(playerid,"PlayerVW",GetPlayerVirtualWorld(playerid));
}
}
return true;
}
public OnGameModeInit()
{
SetTimer("CheckVirtualWorldForPlayer",2500,true);
}
IsPlayerConnect musst du nach sscanf nichtmehr abfragen, da dies sscanf automatisch unternimmt, jedoch fragwürdig, warum er bei dir es falsch wiedergibt.
Am besten nützt du es mal folgendermaßen und sag mir bescheid ob es funktioniert.
if(dialogid==DIALOG_BANKUEBERWEISEN2)
{
if(!response) return ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST,"Bank","Einzahlen\nAuszahlen\nKontostand\nÜberweisen","Auswählen","Abbrechen");
new Ziel;
if(sscanf(inputtext,"u",Ziel)) return SendClientMessage(playerid,ROT,"Ungültige Angabe!");
{
SpielerInfo[Ziel][Bankkonto]=SpielerInfo[Ziel][Bankkonto]+Ueberweisung[playerid];
SendClientMessage(playerid,GRUEN,"Überweisung erfolgreich!");
ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST,"Bank","Einzahlen\nAuszahlen\nKontostand\nÜberweisen","Auswählen","Abbrechen");
}
}
aber irgendwie kann es an dem auch nicht wirklich liegen Überprüfe ob du vielleicht den String inputtext davor veränderst, oder du fügst einfach mal oberhalb von der obigen sscanf Zeile folgendes ein und überprüfst es dann in den Serverlogs.
printf("Inputtext Check: %s",inputtext);
Diese Zeile hast du vergessen umzuändern:
if(GetPVarInt(playerid,"SpielerBank")<geld) return ShowPlayerDialog(playerid,DIALOG_Einzahlen,DIALOG_STYLE_INPUT,"Sie haben nicht soviel Geld auf Ihrem Bankkonto, bitte geben Sie einen realistischen Betrag an!\n\nWieviel möchten Sie einzahlen?","Bestätigen","Zurück");
Mit
SetPVarInt(playerid,"SpielerBank",GetPVarInt(playerid,"SpielerBank")-geld);
wir das Geld abgezogen.
Mit
SetPVarInt(playerid,"SpielerBank",GetPVarInt(playerid,"SpielerBank")+geld);
wird das Geld eingezahlt.
Also ich kann am obigen Code keinen Fehler mehr entdecken.
Verdammt, entschuldige ich blindes huhn...
new car = GetPlayerVehicleID(playerid),fuel = 110 - Gas[car];
bitte der Fix, und entschuldige, hab die Variable total vergessen xD
Einfach negativ abziehen von der Variable und natürlich bei der einen Abfrage, anstatt du das Geld Bar überprüfst, überprüfst du dann das Geld auf dem Konto, ob das was er abheben will auch wirklich auf dem Bankkonto vorhanden ist.
es gibt kein AUTO? xD Ja das is wieder ganz andere Sache
if(FahrzeugInfo[i][FahrzeugID]<1||strcmp(FahrzeugInfo[i][Nummernschild],Schild,false)!=0) continue;
Tja junge, aber du hast das wichtigste vergessen, wo ist denn die Wand die er benötigt zum anpinkeln? Nebenbei was für ein Mann bist du, der auf Beton sein Geschäft erledigt, sicher ist BasiDerGamer nicht so ein Mann wie du! Ein Mann braucht einen Baum! und dieser muss immer bereit stehn, wenn man pinkelt!
SetPlayerAttachedObject(playerid, 3, 627, 1, 0.5, 2, 0, 0, 90, 0);
SetPlayerSpecialAction(playerid, 68);
Und BasiDerGamer, wenn du das wirklich so einfügst, dann wirst du was besonderes haben, weil bis jetzt hat noch kein Server nen Baum, der ganze Zeit mit dem Spieler geht und du auch noch deine Geschäfte darin erledigen kannst.