[SAMMELTHREAD] Kleine Scripting Fragen

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
  • Warum die Error:
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys, pickupid)//hier
    {
    if(newkeys & 16)
    {
    if(IsPlayerInRangeOfPoint(playerid,2,-2133.1331,1213.7354,47.2734)) // Schwarzmarkt enter
    {
    SetPlayerPos(playerid,-2132.9165,1212.0477,1047.3760);
    SetPlayerInterior(playerid,1);
    }
    else if(IsPlayerInRangeOfPoint(playerid,2,-2132.9165,1212.0477,1047.3760)) // Schwarzmarkt exit
    {
    SetPlayerPos(playerid,-2133.1331,1213.7354,47.27343);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    }
    }
    if(newkeys & 16)
    {
    for(new h = 0; h < sizeof(AutomatikPortInfo); h++){
    if(pickupid == AutomatikPortInfo[h][APAusgangPickup] && PortedTimer[playerid] == 0 && GetPlayerVirtualWorld(playerid) == AutomatikPortInfo[h][APVirtualWorld]){
    SetPlayerInterior(playerid, 0); SetPlayerPos(playerid, AutomatikPortInfo[h][APEingangX], AutomatikPortInfo[h][APEingangY], AutomatikPortInfo[h][APEingangZ]);
    SetPlayerVirtualWorld(playerid, 0); PortedTimer[playerid] = 5; PlayerInfo[playerid][pLocal] = -1;
    return 1;
    }
    if(pickupid == AutomatikPortInfo[h][APEingangPickup] && PortedTimer[playerid] == 0){
    SetPlayerInterior(playerid, AutomatikPortInfo[h][APInterior]);
    SetPlayerPos(playerid, AutomatikPortInfo[h][APAusgangX], AutomatikPortInfo[h][APAusgangY], AutomatikPortInfo[h][APAusgangZ]); SetPlayerVirtualWorld(playerid, AutomatikPortInfo[h][APVirtualWorld]); PortedTimer[playerid] = 5; PlayerInfo[playerid][pLocal] = AutomatikPortInfo[h][APLocation];
    return 1;
    }}


    error 025: function heading differs from prototype

  • Ich kann dir den Code gerade nicht schicken weil ich am Handy bin, aber wenn du pickupid entfernt hast dann kannst du es logischerweise auch nicht mehr verwenden.

  • Kleines Problem, sobald ich durch den Checkpoint fahre passiert nix.
    Der bricht bei der ersten Abfrage direkt ab. (Über dem DEBUG 1 die abfrage)
    fc_id steht für die FraktionsID die ist im Enum und in der Variable fcInfo festgelegt.
    if(IsPlayerInRangeOfPoint(playerid,range,2219.5276,-2228.8760,13.5469))
    {
    for(new i=0; i<sizeof(fcInfo); i++)
    {
    if(fcInfo[i][id_x] !=mID)return SCM(playerid,COLOR_GRAU,"Fahre mit ein Fahrzeug deiner Fraktion zum Checkpoint.");
    printf("DEBUG 1: Vehicle: %d | fcInfo[%i][fc_id] !=vID[%i]",vID,i,vID);
    if(fcInfo[i][fc_id] !=5)return SCM(playerid,COLOR_GRAU,"Fahre mit ein Fahrzeug deiner Fraktion zum Checkpoint.");
    printf("DEBUG 2: Vehicle: %d | vID[%i] != fcInfo[%i][fc_id]",vID,vID,i);
    new string[128];
    format(string,128,"Produkte kaufen");
    ShowPlayerDialog(playerid,DIALOG_BUYPRODS,DIALOG_STYLE_LIST,"Produkte",string,"Wählen","Abbrechen");
    print("ENDE");
    DisablePlayerCheckpoint(playerid);
    }
    return 1;
    }

  • Durch die returns bewirkst du, dass bei der ersten nicht Übereinstimmung gleich beendet wird. Schreibe es so:
    if(IsPlayerInRangeOfPoint(playerid,range,2219.5276,-2228.8760,13.5469))
    {
    for(new i=0; i<sizeof(fcInfo); i++)
    {
    printf("DEBUG 1: Vehicle: %d | fcInfo[%i][fc_id] !=vID[%i]",vID,i,vID);
    if(fcInfo[i][id_x] !=mID) continue;
    printf("DEBUG 2: Vehicle: %d | vID[%i] != fcInfo[%i][fc_id]",vID,vID,i);
    if(fcInfo[i][fc_id] !=5) continue;
    new string[128];
    format(string,128,"Produkte kaufen");
    ShowPlayerDialog(playerid,DIALOG_BUYPRODS,DIALOG_STYLE_LIST,"Produkte",string,"Wählen","Abbrechen");
    print("ENDE");
    DisablePlayerCheckpoint(playerid);
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Fahre mit ein Fahrzeug deiner Fraktion zum Checkpoint.");;
    }


    Übrigens, Debug Meldungen setzt man vor die Abfrage, sonst weißt du ja nicht was die Werte sind, die geprüft werden. ;)

  • Warum errors:
    if(newkeys & 16)
    {
    for(new h = 0; h < sizeof(AutomatikPortInfo); h++){
    if(pickupid == AutomatikPortInfo[h][APAusgangPickup] && PortedTimer[playerid] == 0 && GetPlayerVirtualWorld(playerid) == AutomatikPortInfo[h][APVirtualWorld]){
    SetPlayerInterior(playerid, 0); SetPlayerPos(playerid, AutomatikPortInfo[h][APEingangX], AutomatikPortInfo[h][APEingangY], AutomatikPortInfo[h][APEingangZ]);
    SetPlayerVirtualWorld(playerid, 0); PortedTimer[playerid] = 5; PlayerInfo[playerid][pLocal] = -1;
    return 1;
    }
    if(pickupid == AutomatikPortInfo[h][APEingangPickup] && PortedTimer[playerid] == 0){
    SetPlayerInterior(playerid, AutomatikPortInfo[h][APInterior]);
    SetPlayerPos(playerid, AutomatikPortInfo[h][APAusgangX], AutomatikPortInfo[h][APAusgangY], AutomatikPortInfo[h][APAusgangZ]); SetPlayerVirtualWorld(playerid, AutomatikPortInfo[h][APVirtualWorld]); PortedTimer[playerid] = 5; PlayerInfo[playerid][pLocal] = AutomatikPortInfo[h][APLocation];
    return 1;
    }}


    error 017: undefined symbol "pickupid"

  • Weil du "pickupid" in OnPlayerKeyStateChange nicht verwenden kannst.
    Wenn du abfragen willst, ob der Spieler im Pickup ist, dann musst du das mit IsPlayerInRangeOfPoint machen.


    Pascal.:
    Debugge es so:
    if(IsPlayerInRangeOfPoint(playerid,range,2219.5276,-2228.8760,13.5469))
    {
    for(new i=0; i<sizeof(fcInfo); i++)
    {
    printf("DEBUG 1: mID: %d | i: %d | id_x: %d",mID,i,cInfo[i][id_x]);
    if(fcInfo[i][id_x] != mID) continue;
    printf("fc_id: %d",fcInfo[i][fc_id]);
    if(fcInfo[i][fc_id] !=5) continue;
    new string[128];
    format(string,128,"Produkte kaufen");
    ShowPlayerDialog(playerid,DIALOG_BUYPRODS,DIALOG_STYLE_LIST,"Produkte",string,"Wählen","Abbrechen");
    print("ENDE");
    DisablePlayerCheckpoint(playerid);
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Fahre mit ein Fahrzeug deiner Fraktion zum Checkpoint.");;
    }
    Was steht im Log?

  • Server log ist etwas groß.

  • Dafür gibt es die expander. ;)


    Schreibe es so:
    if(IsPlayerInRangeOfPoint(playerid,range,2219.5276,-2228.8760,13.5469))
    {
    for(new i=0; i<sizeof(fcInfo); i++)
    {
    printf("DEBUG 1: vID: %d | i: %d | id_x: %d",vID,i,cInfo[i][id_x]);
    if(fcInfo[i][id_x] != vID) continue;
    printf("fc_id: %d",fcInfo[i][fc_id]);
    if(fcInfo[i][fc_id] !=5) continue;
    new string[128];
    format(string,128,"Produkte kaufen");
    ShowPlayerDialog(playerid,DIALOG_BUYPRODS,DIALOG_STYLE_LIST,"Produkte",string,"Wählen","Abbrechen");
    print("ENDE");
    DisablePlayerCheckpoint(playerid);
    return 1;
    }
    return SCM(playerid,COLOR_GRAU,"Fahre mit ein Fahrzeug deiner Fraktion zum Checkpoint.");;
    }

  • Wie bekomm ich das hin das er nur die Hälfte des kaufpreises bekommt ?



    if(strcmp("/carsell", cmdtext, true, 10) == 0)
    {
    if(Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]])
    {
    GivePlayerMoneyEx(playerid, PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarPreis]);
    Dtc_Carlock[PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]] = 0;
    Dtc_UnLockCar(PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]);
    DestroyObject(sirene[PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]]);
    sirenean[PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]] = false;
    DestroyVehicle(PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]);
    new string3[32];
    new playername3[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername3, sizeof(playername3));
    format(string3, sizeof(string3), "/Autos/%s%d.dtcar", playername3,Dtc_PlayerKey[playerid]);
    fremove(string3);
    Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]] = 0;
    SendClientMessage(playerid, COLOR_YELLOW4, " Fahrzeug erfolgreich verkauft, Hälfte des Kaufpreises wird wurde dir wieder gegeben!");
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Du besitzt Kein Fahrzeug!");
    return 1;
    }
    return 1;
    }



    Ich habe das schon so probiert:



    GivePlayerMoneyEx(playerid, PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarPreis/2]);


    Jedoch bekomm ich da ein Warning.
    "C:\Users\aimen\Desktop\Momento Roleplay - The Time Starts\gamemodes\MOR.pwn(37918) : warning 213: tag mismatch"



    Wie sollte ich das machen ?

  • Ich hoffe, das mir einer Helfen kann, undzwar möchte ich es bei meinem Registrierungs-System so machen, das der Spieler bei jedem "Schritt der Registrierung" auf Abbrechen drücken kann, und gekickt wird. Bis jetzt habe ich das Problem, das ich nur beim "Geburtsdatum sowie vor der Passwort eingabe" auf Abbrechen drücken kann. Wenn ich beim Geburtsdatum auf Abbrechen drücke, werde ich zwar gekickt, aber leider wird der Spieler trotzdem in die Datenbank eingetragen, aber mit allen Werten auf 0.


    Und beim Geschlecht besteht die möglichkeit des Abbrechens noch nicht, dies werde ich aber selber erlededigen können, werde dort ein "DIALOG_STYLE_LIST" verwenden.


    Hier mal mein bisheriger Code:




    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case Dialog_Register:
    {
    if(!response)
    {
    SendClientMessage(playerid,0xFF0000FF,"Die Registrierung wurde Ab.-oder Unterbrochen\nBitte beenden Sie das Spiel, indem Sie /q als Textnachricht in den Chat eingeben.");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    if(!inputtext[0] || !(3 <= strlen(inputtext) <= 24))
    {
    ShowPlayerDialog(playerid,Dialog_Register,DIALOG_STYLE_PASSWORD,"{FFFFFF}SmR: {308EAD}Registrierung","{FFFFFF}Herzlich Willkommen auf San Miami Roleplay\n\nUnser System hat Ihre Spielerinformationen nicht in unserer Datenbank gefunden.\nUm einen Charakter auf unserem Server zu Erstellen\nbenötigen wir einige Informationen von Ihnen.\nBitte tragen Sie ein Sicheres Passwort in das untere Feld ein.\n\nMerken Sie sich Ihr Passwort Gut.","Annehmen","Abbrechen");
    return 1;
    }
    new query[950 + MAX_PLAYER_NAME],Tag,Monat,Jahr,Stunde,Minute,Sekunde,;
    mysql_escape_string(inputtext,passwort,DBHandle)
    getdate(Tag,Monat,Jahr);
    gettime(Stunde,Minute,Sekunde);
    format(query,sizeof(query),"%02d.%02d.%d - %02d:%02d:%d",Tag,Monat,Jahr,Stunde,Minute,Sekunde);
    mysql_format(DBHandle, query, sizeof(query),"INSERT INTO `Accounts` (`pName`, `pPasswort`, `pAlter`, `pGeburtsdatum`, `pGeschlecht`, `pAdminlevel`, `pBanned`, `pBargeld`, `pKontoguthaben`, `pLastLogin`, `pRegDatum`, `pWarns`, `pLeben`) VALUES ('%e','%e','%d','%e','%d','%d','%d','0','0','%s','%s','%d','100.0')",
    Spieler[playerid][pName],inputtext,Spieler[playerid][pAlter],Spieler[playerid][pGeburtsdatum],Spieler[playerid][pGeschlecht],Spieler[playerid][pAdminlevel],Spieler[playerid][pBanned],Spieler[playerid][pBargeld],Spieler[playerid][pKontoguthaben],query,query,Spieler[playerid][pWarns],Spieler[playerid][pLeben]);
    mysql_tquery(DBHandle, query, "", "");
    ShowPlayerDialog(playerid,Dialog_Geburtsdatum,DIALOG_STYLE_INPUT,"{FFFFFF}SmR: {308EAD}Geburtsdatum","{E5E5E5}Nun möchten wir wissen, wann Sie Geboren wurden. Tragen Sie Bitte Ihr Geburtsdatum in das untere Feld ein. Halten Sie sich Bitte an die Vorlage!\n\nAngabe bitte in TT.MM.JJJJ - {23A7F5}Beispiel: {E5E5E5}10.09.1994","Weiter","Verlassen");
    return 1;
    }
    case Dialog_Geburtsdatum:
    {
    if(response == 0)return Kick(playerid);
    else
    {
    Spieler[playerid][pAlter] = GetAge(inputtext);
    if(Spieler[playerid][pAlter] == 0)
    {
    ShowPlayerDialog(playerid,Dialog_Geburtsdatum,DIALOG_STYLE_INPUT,"{FFFFFF}SmR: {308EAD}Geburtsdatum","{E5E5E5}Nun möchten wir wissen, wann Sie Geboren wurden. Tragen Sie Bitte Ihr Geburtsdatum in das untere Feld ein. Halten Sie sich Bitte an die Vorlage!\n\nAngabe bitte in TT.MM.JJJJ - {23A7F5}Beispiel: {E5E5E5}10.09.1994","Weiter","Verlassen");
    return 1;
    }
    format(Spieler[playerid][pGeburtsdatum],20,inputtext);
    if(Spieler[playerid][pAlter] == 0)
    {
    ShowPlayerDialog(playerid,Dialog_Geburtsdatum,DIALOG_STYLE_INPUT,"{FFFFFF}SmR: {308EAD}Geburtsdatum","{E5E5E5}Nun möchten wir wissen, wann Sie Geboren wurden. Tragen Sie Bitte Ihr Geburtsdatum in das untere Feld ein. Halten Sie sich Bitte an die Vorlage!\n\nAngabe bitte in TT.MM.JJJJ - {23A7F5}Beispiel: {E5E5E5}10.09.1994","Weiter","Verlassen");
    return 1;
    }
    Spieler[playerid][pLogged] = false;
    ShowPlayerDialog(playerid,Dialog_Geschlecht,DIALOG_STYLE_MSGBOX,"{FFFFFF}SmR: {308EAD}Geschlecht","{FFFFFF}Als letztes möchten wir Ihr Geschlecht wissen, Wählen Sie für die Angabe bitte Ihr Geschlecht welches unten zutrifft.","Männlich","Weiblich");
    return 1;
    }
    }
    case Dialog_Geschlecht:
    {
    new string[128];
    if(response == 0)
    {
    format(string,sizeof(string),"{23A7F5}%s, {E5E5E5}Sie sind also Weiblich, und {23A7F5}%i {E5E5E5}Jahre alt.",Spielername(playerid),AgeOfPlayer(playerid));
    SendClientMessage(playerid,0x00D2D2FF,string);
    Spieler[playerid][pGeschlecht] = 2;
    Spieler[playerid][pLogged] = true;
    SavePlayerData(playerid);
    SpawnPlayer(playerid);
    return 1;
    }
    if(response == 1)
    {
    format(string,sizeof(string),"{23A7F5}%s, {E5E5E5}Sie sind also Männlich, und {23A7F5}%i {E5E5E5}Jahre alt.",Spielername(playerid),AgeOfPlayer(playerid));
    SendClientMessage(playerid,0x00D2D2FF,string);
    Spieler[playerid][pGeschlecht] = 1;
    Spieler[playerid][pLogged] = true;
    SavePlayerData(playerid);
    SpawnPlayer(playerid);
    return 1;
    }
    return 1;
    }
    case Dialog_Login:
    {
    if(!response)
    {
    SendClientMessage(playerid,0xFF0000FF,"Dieser Vorgang wurde Ab.-oder Unterbrochen\nBitte beenden Sie das Spiel, indem Sie /q als Textnachricht in den Chat eingeben.");
    SetTimerEx("KickPlayer",250,0,"i",playerid);
    return 1;
    }
    if(!inputtext[0] || !(3 <= strlen(inputtext) <= 25))
    {
    ShowPlayerDialog(playerid,Dialog_Login,DIALOG_STYLE_INPUT,"{FFFFFF}SmR: {308EAD}Einloggen","{0xA70000FF}Das Passwort darf nur 3-25 Zeichen enthalten!{FFFFFF}\n\nSie müssen von unserem System {0xFFFFFF}Identifiziert{FFFFFF} werden.\nGeben Sie dafür bitte Ihr richtiges Passwort unten in das Feld ein.\n\nKlicken Sie danach auf Einloggen, damit die Daten kontrolliert werden können.","Einloggen","Abbrechen");
    return 1;
    }
    new query[180 + MAX_PLAYER_NAME];
    mysql_format(DBHandle, query,sizeof(query),"SELECT COUNT(*) AS `count` FROM `Accounts` WHERE `pName` ='%e' AND `pPasswort` ='%e'",Spieler[playerid][pName],inputtext);
    mysql_function_query(DBHandle, query, true,"LoadPlayerDataSequence","dd",playerid,2);
    Spieler[playerid][pLogged] = true;
    return 1;
    }
    }
    return 1;
    }

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Jeffry:
    Och mensch :D
    Wegen sowas blödem ..


    Naja danke dir :)


    Hab aber noch was gefunden was buggt ..



    Function OnPlayerBuyCar(playerid,Model,Preis,Autohaus)//CARSYS
    {
    if(IsPlayerConnected(playerid) && !Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]])
    {
    GivePlayerMoneyEx(playerid,-Preis);
    //CallRemoteFunction("GivePlayerMoneyEx","id",playerid,-Preis);
    if(Autohaus == 0)
    {
    AddToBizzTill(0,Preis/2);
    }
    else if(Autohaus == 2)
    {
    AddToBizzTill(0,Preis);
    }
    else if(Autohaus == 3)
    {
    AddToBizzTill(0,Preis/2);
    }
    else if(Autohaus == 4)
    {
    AddToBizzTill(0,Preis/10);
    }
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Du hast dir ein Auto gekauft.");
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "*Gehe zu der KFZ Stelle und hole dir ein Kennzeichen.");
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Fahre vorsichtig..Und denk an die StraßenVerkehrsOrdnung!");
    SetParkPlatz(playerid,Autohaus);
    new name[MAX_PLAYER_NAME], str[128];
    GetPlayerName(playerid, name, sizeof name);
    format(str, sizeof str, "/Autos/%s%d.dtcar", name,Dtc_PlayerKey[playerid]);
    new File: hFile = fopen(str, io_write);
    if (hFile)
    {
    new var[32];
    format(var, 32, "CarId=0\n");fwrite(hFile, var);
    format(var, 32, "CarModel=%d\n",Model);fwrite(hFile, var);
    format(var, 32, "CarPos_x=%.3f\n",PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarPos_x]);fwrite(hFile, var);
    format(var, 32, "CarPos_y=%.3f\n",PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarPos_y]);fwrite(hFile, var);
    format(var, 32, "CarPos_z=%.3f\n",PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarPos_z]);fwrite(hFile, var);
    format(var, 32, "CarRotate=%.3f\n",PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarRotate]);fwrite(hFile, var);
    format(var, 32, "CarNitro=0\n");fwrite(hFile, var);
    format(var, 32, "CarHyd=0\n");fwrite(hFile, var);
    format(var, 32, "CarWheel=0\n");fwrite(hFile, var);
    format(var, 32, "CarAusp=0\n");fwrite(hFile, var);
    format(var, 32, "CarSideL=0\n");fwrite(hFile, var);
    format(var, 32, "CarSideR=0\n");fwrite(hFile, var);
    format(var, 32, "CarFB=0\n");fwrite(hFile, var);
    format(var, 32, "CarRB=0\n");fwrite(hFile, var);
    format(var, 32, "CarSpoiler=0\n");fwrite(hFile, var);
    format(var, 32, "CarRoof=0\n");fwrite(hFile, var);
    format(var, 32, "CarHood=0\n");fwrite(hFile, var);
    format(var, 32, "CarVents=0\n");fwrite(hFile, var);
    format(var, 32, "CarLamps=0\n");fwrite(hFile, var);
    format(var, 32, "CarPJ=-1\n");fwrite(hFile, var);
    format(var, 32, "CarC1=-1\n");fwrite(hFile, var);
    format(var, 32, "CarC2=-1\n");fwrite(hFile, var);
    format(var, 32, "Preis=%d\n",Preis);fwrite(hFile, var);
    format(var, 32, "Plate=XXX\n");fwrite(hFile, var);
    fclose(hFile);
    }
    OnPlayerCarLogin(playerid);
    }
    }



    Undzwar er verliert das Geld zwar, aber wenn er Relogg macht hat er das Geld wieder und das Auto auch noch.
    Hab gedacht das es an dem CallRemoteFunction liegt und die Zeile darüber gemacht aber das bringt auch nix ..



    mfg


  • public GivePlayerMoneyEx(playerid,money){
    ACNewMoney[playerid] = GetPlayerMoney(playerid) + money;
    stopAC[playerid] = 15;
    return GivePlayerMoney(playerid,money);
    }


    Ich weis nicht wo das SavePlayer ist :D
    Entweder das ist mit OnplayerUpdate oder ich weis es nicht :D