Beiträge von [EGC] selEcT

    o_O Freeze ist gar nicht definiert. oder muss ich das umkehren? also #define Freeze TogglePlayerControllable?


    //edit: geht auch nich xD
    //edit2: ah so, jetzt weiss ich was du meinst!
    //edit3: geht, danke!

    hmm es liegt an LoadCS.. dort crasht er bei:


    mysql_fetch_field("PosZ", data);posz = floatstr(data);PlayerVeh[playerid][i][pcsposz] = floatstr(data);


    wenn ichs auskommentier, gehts! aber zum vergleich, das geht:


    mysql_fetch_field("PosY", data);posy = floatstr(data);PlayerVeh[playerid][i][pcsposy] = floatstr(data);


    posz und posy sind als float definiert, pcsposz und pcsposy auch.


    wenn ich aus der zeile 3 mache, dann kommt der crash bereits bei
    mysql_fetch_field("PosZ", data);


    data ist als String definiert (data[256];)..



    edit: hab die beiden (LoadCS und LoadCrackVeh) zusammen genommen.. so funztz.. komisch ^^
    edit2: funzt doch auch nicht :(( wieso funzt das einmal und dann wieder nicht??!!!!

    Hallo leute!


    Hab ein kleines Problem, was mich ratlos macht!


    Wenn ich mich einlogge, dann crasht der Server, dann ist der Code beim login so (teil wo der server crasht):



    //--------
    LoadCS(playerid);
    LoadCrackVeh(playerid);
    MySQLPlayerUpdate(playerid);
    return 1;


    So crasht der Server.. Ich hab aber rausgefunden, dass ich so eingeloggt werde und alles richtig funzt!:



    //--------
    LoadCS(playerid);
    print("1"); //?????
    LoadCrackVeh(playerid);
    MySQLPlayerUpdate(playerid);
    return 1;


    Warum geht es mit dem print, aber ohne nicht?!


    MFG

    Trooper: sehr hilfreich, wenn es nicht daran liegt, wieso gehts dann dort nicht weiter?


    Also so siehts bei mir aus:


    public OnPlayerConnect(playerid)
    {
    new sqlaccountstatus = MySQLCheckAccount(plname);
    if(sqlaccountstatus != 0)
    {
    gPlayerAccount[playerid] = 1;
    Registriert[playerid] = 1;
    PlayerInfo[playerid][pSQLID] = sqlaccountstatus;
    ShowPlayerDialog(playerid,LogPWDialog,DIALOG_STYLE_INPUT,"Einloggen","Account gefunden.\nBitte gib dein Passwort ein:","Einloggen","Abbrechen");
    return 1;
    }
    else
    {
    gPlayerAccount[playerid] = 0;
    Registriert[playerid] = 0;
    return 1;
    }
    }


    Das funzt alles auch so wie es soll..


    so, nun logge ich mich ein, dann kommt der hier hin:


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == LogPWDialog)
    {
    if(response == 0)
    {
    SendClientMessage(playerid,COLOR_RED,"Ohne Login kannst du hier nicht spielen!");
    Kick(playerid);
    return 0;
    }
    if(response == 1)
    {
    MySQLLogin(playerid,inputtext);
    return 1;
    }
    }
    return 0;
    }


    Das funzt auch noch, also er kommt zum Login:


    stock MySQLLogin(playerid, password[])
    {
    MySQLCheck();
    new playername[MAX_PLAYER_NAME];
    new sqlid;
    new string[128];
    new data[32]; //Hier geht er nich mehr weiter!!
    GetPlayerName(playerid, playername, sizeof(playername));
    PlayerInfo[playerid][pSQLID] = MySQLCheckAccount(playername);
    mysql_query("SELECT * FROM user");
    mysql_store_result();
    while(mysql_fetch_row_data())
    {
    mysql_fetch_field("ID",data);sqlid=strval(data);
    if(sqlid == PlayerInfo[playerid][pSQLID])
    {
    mysql_fetch_field("Password",data);
    if(!strcmp(data,MD5_Hash(password),false))
    {
    print("1");
    mysql_fetch_field("ID",data);PlayerInfo[playerid][pSQLID] = strval(data);
    mysql_fetch_field("Name",data);strmid(PlayerInfo[playerid][pName], data, 0, strlen(data), 255);
    strmid(PlayerInfo[playerid][pKey], password, 0, strlen(password), 255);
    //-----------------------------
    }
    else
    {
    gPlayerLogTries[playerid] += 1;
    if(gPlayerLogTries[playerid] == 2) { SendClientMessage(playerid, COLOR_RED, "Noch 2-Mal das Passwort falsch eingeben, und du wirst gebannt!"); }
    if(gPlayerLogTries[playerid] == 3) { SendClientMessage(playerid, COLOR_RED, "Noch 1-Mal das Passwort falsch eingeben, und du wirst gebannt!"); }
    if(gPlayerLogTries[playerid] == 4)
    {
    new year,month,day;
    getdate(year, month, day);
    SendClientMessage(playerid, COLOR_RED, "Wir haben dich gewarnt, du wurdest gebannt!");
    PlayerInfo[playerid][pAdmin] = PlayerInfo[playerid][pLevel];
    PlayerInfo[playerid][pLevel] = -999;
    format(string, sizeof(string), "Login: %s wurde gebannt, Grund: 4 fehlgeschlagene Loginversuche (%d/%d/d%)", playername, day, month, year);
    Ban(playerid);
    return 1;
    }
    ShowPlayerDialog(playerid,LogPWDialog,DIALOG_STYLE_INPUT,"Falsches Passwort","Bitte gib dein korrektes Passwort ein:","Einloggen","Abbrechen");
    return 1;
    }
    }
    }


    hmm zum "Falschen Passwort" kommt er nicht einmal..


    //edit: Shinoda: ich hab das data auf die strinlänge 32 und 64 runtergesetzt.. geht nicht.. idee?
    //edit2: also, egal was ich mit dem data mache, es geht nicht!! auch wenn ich statt "data" nur die variable "string" nehme, gehts nicht..
    //edit3: naja, habs jetzt.. bei OnDialogResponse war die variable zu hoch gesetzt..

    Hallo leute!


    Bin gerade an nem Scriptupdate dran. Das ältere Script funzt wunderbar.
    Am Loginsystem hab ich nix geändert.
    Beim Scriptupdate geht der beim Login immer auf OnPlayerRequestClass, statt sich richtig einzuloggen.
    Ich hab rausgefunden (mit "debuggen" => print("1")), das der ab dem Punkt dahin springt: new data[128];
    Als ob er das irgendwie nicht erkennen kann.. Ich hab das mal so getestet:



    print("1");
    new playername[MAX_PLAYER_NAME];
    print("1");
    new sqlid;
    print("1");
    new string[128];
    print("1");
    new data[128];
    print("1");


    Die ersten vier einsen zeigt er in der Konsole an, das letzte 1 nicht!!


    Hat jemand ne idee?


    MFG

    Hallo!


    Ich weiss nicht, ob es sowas schon gibt, deshalb frag ich jetzt einfach mal (hab nix gefunden)..


    Kann man den Freezestatus abfragen? Also abfragen, ob einer gefreezed ist oder nicht?


    MFG selEcT

    N'abnd leute!


    Ich hab ein "kleines" Problem, das Login funzt net richtig. Nun der Ablauf vom Login:


    OnPlayerConnect
    new sqlaccountstatus = MySQLCheckAccount(plname);
    if(sqlaccountstatus != 0)
    {
    gPlayerAccount[playerid] = 1;
    Registriert[playerid] = 1;
    PlayerInfo[playerid][pSQLID] = sqlaccountstatus;
    ShowPlayerDialog(playerid,LogPWDialog,DIALOG_STYLE_INPUT,"Einloggen","Account gefunden.\nBitte gib dein Passwort ein:","Einloggen","Abbrechen");
    return 1;
    }
    else
    {
    gPlayerAccount[playerid] = 0;
    Registriert[playerid] = 0;
    return 1;
    }


    DAS funktioniert schon mal richtig, also wenn ich nen Account hab, kann ich mich einloggen, wenn ich keinen hab, dann würde ich zur Skinauswahl kommen und könnte mich dann registrieren.


    Login Dialog:


    if(dialogid == LogPWDialog)
    {
    if(response == 0)
    {
    SendClientMessage(playerid,COLOR_RED,"Ohne Login kannst du hier nicht spielen!");
    Kick(playerid);
    return 0;
    }
    if(response == 1)
    {
    MySQLLogin(playerid,inputtext);
    }
    }


    Klappt auch, wenn ich auf Abbrechen klicke, dann flieg ich vom Server.
    Wenn ich ein Passwort eingebe, allerdings das falsche, dann werde ich gespawnt und kann mich registrieren?!


    OnPlayerRequestClass:

    if(gPlayerLogged[playerid] == 1)
    {
    gTeam[playerid] = PlayerInfo[playerid][pTeam];
    SetSpawnInfo(playerid, PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pNormalSkin], PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z], 1.0, -1, -1, -1, -1, -1, -1);
    SpawnPlayer(playerid);
    }
    else
    {
    gTeam[playerid] = 3;
    PlayerInfo[playerid][pTeam] = 3;
    PlayerInfo[playerid][pNormalSkin] = 264;
    SetPlayerInterior(playerid,0);
    new rand = random(sizeof(StandardSpawns));
    PlayerInfo[playerid][pPos_x] = StandardSpawns[rand][0];
    PlayerInfo[playerid][pPos_y] = StandardSpawns[rand][1];
    PlayerInfo[playerid][pPos_z] = StandardSpawns[rand][2];
    SendClientMessage(playerid, COLOR_GREEN, "Melde dich im Forum (forum.amigos-roleplay.de) fuer einen anderen Skin!");
    SetSpawnInfo(playerid, PlayerInfo[playerid][pTeam], PlayerInfo[playerid][pNormalSkin], PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z], 1.0, -1, -1, -1, -1, -1, -1);
    SpawnPlayer(playerid);
    }
    return 1;


    Das funktioniert mit dem Login und dem Registrieren schon, nur werd ich gespawnt, wenn ich ein falsches Passwort eingebe..


    MySQLPlayerLogin:
    MySQLCheck();
    new data[256],playername[MAX_PLAYER_NAME],string[256],sqlid;
    GetPlayerName(playerid, playername, sizeof(playername));
    PlayerInfo[playerid][pSQLID] = MySQLCheckAccount(playername);
    mysql_query("SELECT * FROM user");
    mysql_store_result();
    while(mysql_fetch_row_data())
    {
    mysql_fetch_field("ID",data);sqlid=strval(data);
    if(sqlid == PlayerInfo[playerid][pSQLID])
    {
    mysql_fetch_field("Password",data);
    if(!strcmp(data,MD5_Hash(password),false))
    {
    //login Zeugs
    }
    else
    {
    gPlayerLogTries[playerid] += 1;
    if(gPlayerLogTries[playerid] == 2) { SendClientMessage(playerid, COLOR_RED, "Noch 2-Mal das Passwort falsch eingeben, und du wirst gebannt!"); }
    if(gPlayerLogTries[playerid] == 3) { SendClientMessage(playerid, COLOR_RED, "Noch 1-Mal das Passwort falsch eingeben, und du wirst gebannt!"); }
    if(gPlayerLogTries[playerid] == 4)
    {
    new year,month,day;
    getdate(year, month, day);
    SendClientMessage(playerid, COLOR_RED, "Wir haben dich gewarnt, du wurdest gebannt!");
    PlayerInfo[playerid][pAdmin] = PlayerInfo[playerid][pLevel];
    PlayerInfo[playerid][pLevel] = -999;
    format(string, sizeof(string), "Login: %s wurde gebannt, Grund: 4 fehlgeschlagene Loginversuche (%d/%d/d%)", playername, day, month, year);
    //BanLog(string);
    Ban(playerid);
    return 1;
    }
    ShowPlayerDialog(playerid,LogPWDialog,DIALOG_STYLE_INPUT,"Falsches Passwort","Bitte gib dein korrektes Passwort ein:","Einloggen","Abbrechen");
    return 1;
    }
    }
    }
    return 0;


    Ich weiss auch nicht, vorher hat es immer gut funktioniert, aber seit wir keine Skinwahl mehr drin haben (OnPlayerRequestClass), gehts irgendwie nicht mehr.. hat das iwie nen zusammenhang?


    Kann jemand helfen? :)


    MFG


    edit: also, es geht immernoch nicht. sobald ich reinkomme und das passwort falsch eingebe, werde ich gespawnt und kann mich registrieren, warum das?! oder muss ich das dann iwie wieder abfangen?

    Eigentlich ist das ein Godfather Problem, aber ok ausnahmsweise...


    ja und? kann ich ja nicht wissen.


    Das Godfather hat eine Variable welche "pLocal" sich nennt.


    Ja, aber der Satz heisst "Das (oder der) Godfather hat eine Variable, die sich "pLocal" nennt." - Nur zur Korrektur.


    Es wird überprüft, ob ein Spieler in einem Haus/Geschäft ist. Sollte der Spieler in Interior 0 sein und die Variable von ihm nicht auf 255 sein, so wird er automatisch zu diesem Haus/Geschäft geportet, welches in seiner Variable "pLocal" steht. Es ist aufjedenfall in einem Timer, jedoch wie er bei dir heißt, weiß ich nicht. Diese Lösung soll für beide deiner Punkte gelten


    Ja, das ist der Timer "OtherTimer". Da war bei der Stadthalle die X-Koordinate auf -2415.7702 statt auf 2415.7702, aber ich nehm das jetzt ganz raus. Danke schon mal dafür.


    und naja, ich finde es lustig, wenn Leute ein Projekt programmieren, welches Sie selbst nicht beherschen :P


    Was soll das heissen? Aus solchen Fehlern lernt man das Projekt besser kennen. Und für mich war es einfacher, mit dem GF rumeditieren, als ein eigenes Script zu programmieren bzw. zu scripten und ich denke, das beherrsche ich nun schon, nur bin ich bis jetzt nie mit dieser "pLocal"-Variable in Konflikt gekommen, ich hab zwar gewusst für was sie steht, aber nicht, dass sie solche "Fehler" macht.
    Hier kommt halt wieder der Satz "Aus Fehlern lernt man" zur Geltung. Und du hast mich halt auf diesen Fehler hingewiesen, danke.


    MFG selEcT

    Hallo leute!


    Ich hab 2 kleine Probleme:


    1. Ich bin in einem Haus, danach teleportier ich mich in ein Auto mit PutPlayerInVehicle. Kurz gehts, dann flieg ich aber durch die Luft und lande in SF. Warum?


    car[playerid] = CreateVehicle(507,2447.1611,1124.1182,10.5474,90,3,0,-1);
    PutPlayerInVehicle(playerid,car[playerid], 0);


    die Variable zeigt die richtige VehicleID an.


    2. Wenn ich ab und zu in die Stadthalle gehe (passiert nicht immer), flieg ich durch den Boden und lande dann am selben Ort wie bei Punkt 1. Warum?


    Bei /enter bzw. taste:

    if(PlayerToPoint(3.0, playerid,2415.7702,1123.8610,10.8203))
    {
    SetPlayerInterior(playerid,3);
    SetPlayerPos(playerid,387.7978,173.8582,1008.6000);
    GameTextForPlayer(playerid, "~w~Willkommen in der Stadthalle", 5000, 1);
    PlayerInfo[playerid][pInt] = 3;
    PlayerInfo[playerid][pLocal] = 241;
    }


    Wäre wirklich nett, wenn mir die Fragen jemand beantworten könnte..


    MFG selEcT

    öhm, das var[playerid] ist ja dieses pruefungstatus[playerid], ich weiss nicht genau was du mir damit sagen möchtest.. und ich habs auch genau so..


    aber ich sehe, du hast das jetzt ohne for schleife gemacht, das würde wahrscheinlich schon gehn, aber das gibt bei all den checkpoints sicher etwa 300 zeilen. Mit dem for sollte es doch auch gehen?!


    edit: habs jetzt so, wie du es in etwa gesagt hast, geht aber nicht..:



    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(autopruefung[playerid] == 1)
    {
    for(new i=0;i<sizeof(PruefungCheckpoint);i++)
    {
    if(pruefungstatus[playerid] == i)
    {
    pruefungstatus[playerid]++;
    DisablePlayerRaceCheckpoint(playerid);
    if(pruefungstatus[playerid] < 2)
    {
    SetPlayerRaceCheckpoint(playerid,0,PruefungCheckpoint[i][0],PruefungCheckpoint[i][1],PruefungCheckpoint[i][2],PruefungCheckpoint[i+1][0],PruefungCheckpoint[i+1][1],PruefungCheckpoint[i+1][2],7);
    }
    else if(pruefungstatus[playerid] == 2) //ziel
    {
    SetPlayerRaceCheckpoint(playerid,1,PruefungCheckpoint[i][0],PruefungCheckpoint[i][1],PruefungCheckpoint[i][2],0.0,0.0,0.0,7);
    }
    else if(pruefungstatus[playerid] == 3)
    {
    Motor[autopruefungauto[playerid]] = 0;
    DestroyVehicle(autopruefungauto[playerid]);
    SetPlayerPos(playerid,2415.7702,1123.8610,10.8203);
    PlayerInfo[playerid][pCarLic] = 1; GivePlayerMoney(playerid, -2500);
    autopruefung[playerid] = 0; pruefungstatus[playerid] = 0;
    return SendClientMessage(playerid, COLOR_GREEN, "Herzlichen Glueckwunsch, du hast bestanden!");
    }
    return 1;
    }
    }
    return 1;
    }
    return 1;
    }


    //edit2: Der fehler liegt NICHT in der for-schleife. Wenn ich durch den ersten Checkpoint gehe, zählt der mir den checkpoint irgendwie als 2 durchgänge, das heisst, er überspringt einen checkpoint!!!


    edit3: LOL, ich habs.. es war ein doppelter racecheckpoint drin, trotzdem danke für die hilfe ;)

    hmm klappt irgendwie nicht:


    ich hab mal


    printf("%d,%d",i,pruefungstatus[playerid]);


    zwischen


    DisablePlayerRaceCheckpoint(playerid);
    if(pruefungstatus[playerid] < 2)


    eingefügt und der zeigt mir, sobald ich durch den ERSTEN Checkpoint gegangen bin in der Konsole untereinander 0,1 und 1,2 an, was ja soweit richtig ist, aber nicht gleich nacheinander.


    Ich hab ja ein return drin, warum passiert das?!

    Hallo Leute!


    Ich hab ein kleines Problem mit einem Racecheckpoint:




    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    if(autopruefung[playerid] == 1)
    {
    for(new i=0;i<sizeof(PruefungCheckpoint);i++)
    {
    if(pruefungstatus[playerid] == i+1)
    {
    DisablePlayerRaceCheckpoint(playerid);
    if(pruefungstatus[playerid] < 3)
    {
    SetPlayerRaceCheckpoint(playerid,0,PruefungCheckpoint[i][0],PruefungCheckpoint[i][1],PruefungCheckpoint[i][2],PruefungCheckpoint[i+1][0],PruefungCheckpoint[i+1][1],PruefungCheckpoint[i+1][2],7);
    }
    else if(pruefungstatus[playerid] == 3) //ziel
    {
    SetPlayerRaceCheckpoint(playerid,1,PruefungCheckpoint[i][0],PruefungCheckpoint[i][1],PruefungCheckpoint[i][2],0.0,0.0,0.0,7);
    }
    else
    {
    //Mach was, wenn er im [b]Ziel [/b]ist
    }
    pruefungstatus[playerid] = i+2;
    return 1;
    }
    }
    }
    return 1;
    }


    Zum testen sind es 3 checkpoints:



    new Float:PruefungCheckpoint[3][3] = {
    {2431.6069,1124.1045,10.4707},
    {2429.5059,1170.9470,10.3990},
    {2447.1611,1124.1182,10.5474}
    };


    wenn ich allerdings ins ziel fahr, bleibt der checkpoint und auch das zeugs, das dann gemacht werden soll, wird nicht ausgeführt. Was hab ich da falsch? (mit switch-case würde es vielleicht gehen, aber dann hab ich sicher knapp 300 zeilen nur für das ;) )



    MFG selEcT