3. Pawno Fragen von einem Anfänger

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
  • Servus Leute,
    Ich habe mehrere Fragen:


    1. Wie mache ich , dass mein Skin beim offline gehen gespeichert wird und wenn ich on komme er geladen wird ? hier mein Quellcode
    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Skin",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Paytime",GetPVarInt(playerid,"Paytime"));
    dini_IntSet(Spielerdatei,"Wantedlevel",GetPlayerWantedLevel(playerid));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Fraktionsrang",GetPVarInt(playerid,"Fraktionsrang"));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Job",GetPVarInt(playerid,"Job"));
    dini_IntSet(Spielerdatei,"JobAktiv",0);
    dini_IntSet(Spielerdatei,"JobBisPayday",GetPVarInt(playerid,"JobBisPayday"));
    dini_IntSet(Spielerdatei,"Knast",GetPVarInt(playerid,"Knast"));
    dini_IntSet(Spielerdatei,"KnastTime",GetPVarInt(playerid,"KnastTime"));
    dini_IntSet(Spielerdatei,"aKnast",GetPVarInt(playerid,"aKnast"));
    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
    dini_IntSet(Spielerdatei,"timeban",GetPVarInt(playerid,"timeban"));
    }
    return 1;
    }


    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPVarInt(playerid,"Skin",dini_Int(Spielerdatei,"Skin")); // Wenn ich hier SetPlayerSkin mache passiert nichts ---------------------------------
    SetPVarInt(playerid,"Paytime",dini_Int(Spielerdatei,"Paytime"));
    SetPlayerWantedLevel(playerid,dini_Int(Spielerdatei,"Wantedlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Fraktionsrang",dini_Int(Spielerdatei,"Fraktionsrang"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Knast",dini_Int(Spielerdatei,"Knast"));
    SetPVarInt(playerid,"KnastTime",dini_Int(Spielerdatei,"KnastTime"));
    SetPVarInt(playerid,"Job",dini_Int(Spielerdatei,"Job"));
    SetPVarInt(playerid,"JobAktiv",dini_Int(Spielerdatei,"JobAktiv"));
    SetPVarInt(playerid,"JobBisPayday",dini_Int(Spielerdatei,"JobBisPayday"));
    SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    SetPVarInt(playerid,"aKnast",dini_Int(Spielerdatei,"aKnast"));
    SetPVarInt(playerid,"loggedin",1);
    return 1;
    }

    2. Die Fraktions ID von PD und von der Bundeswehr ist 6 wie mach ich dann zB , dass wenn ich ein befehl wie /umkleide machen kann , dass beide Fraktionen das benutzen können ?!


    //FRAKBEFEHLE---------------------------------------------------------------------
    ocmd:suspect(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,1 || 6))return SendClientMessage(playerid,ROT,"Du bist kein Beamter."); // Ich weiß , dass das an dieser Zeile Liegt hab aber kA wie man das jetzt genau macht -----------------------------------------------------------------------------------------------
    new otherid,string[128],reason[64],amount;
    if(sscanf(params,"uds",otherid,amount,reason))return SendClientMessage(playerid,GRÜN,"Benutzung: /suspect [ID] [Wanteds] [Grund]");
    if(otherid == INVALID_PLAYER_ID)return SendClientMessage(playerid,DUNKELROT,"Der Spieler ist nicht Online.");
    SetPlayerWantedLevel(otherid,GetPlayerWantedLevel(otherid)+amount);
    format(string,sizeof(string),"Beamter %s hat dir %d Wanteds gegeben. Grund: %s",SpielerName(playerid),amount,reason);
    SendClientMessage(otherid,DUNKELROT,string);
    format(string,sizeof(string),"Du hast %s %d Wanteds gegeben. Grund: %s",SpielerName(otherid),amount,reason);
    SendClientMessage(playerid,GELB,string);
    return 1;
    }



    3. Frage
    Ich benute momentan den Befehl /pddauf und /pddzu für eine tür aufzumachen wie kann ich das genau machen , dass ich nur /pdd verwende für auf und zu ?! Also dass wenn die Tür zu ist und ich /pdd sie aufgeht und wenn ich nochmal /pdd mache zu geht .
    Mein jetziger Quellcode:



    new pdd;
    pdd = CreateObject(2945,239.6000100,117.4000000,1003.5000000,0.0000000,0.0000000,90.0000000);


    if (strcmp("/pddauf", cmdtext,true) == 0)
    {
    if(!IsPlayerInRangeOfPoint(playerid,5,239.6000100,117.4000000,1003.5000000)) return SendClientMessage(playerid,GRAU,"Du bist nicht in Reichweite!");
    if(GetPVarInt(playerid,"Fraktion")!=1)
    {
    SendClientMessage(playerid,ROT,"Du bist kein Cop!");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,GELB,"Du hast die PD-Tür geöffnet. Denk daran sie zu schließen!");
    MoveObject(pdd,239.6000100,117.4000000,1003.5000000-7,2.0); //object(kmb_netting) (2)
    return 1;
    }
    }
    if (strcmp("/pddzu", cmdtext,true ) == 0)
    {
    if(!IsPlayerInRangeOfPoint(playerid,5,239.6000100,117.4000000,1003.5000000)) return SendClientMessage(playerid,GRAU,"Du bist nicht in Reichweite!");
    if(GetPVarInt(playerid,"Fraktion")!=1)
    {
    SendClientMessage(playerid,ROT,"Du bist kein Cop!");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,GELB,"Du hast die PD-Tür geschlossen. Danke!");
    MoveObject(pdd,239.6000100,117.4000000,1003.5000000,2.0); //object(kmb_netting) (2)
    return 1;
    }
    }



    Danke bin auch in Skype unter : derpr0 erreichbar ;)

  • "Skin",GetPlayerMoney(playerid));
    naja wenn du abfragst wieviel geld er hat, wirst wohl kaum seinen skin speichern ^^
    versuchs mit
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
    und ich habs so gemacht, dass ich beim spawnen (OnPlayerSpawn) den Skin auslese und ihm gebe:
    SetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin"));


    so klappts bei mir zu 100%

  • ah ja danke , dass mir dem geld war nur ein einfüg fehler ;)


    //
    C:\Users\Jonas\Desktop\Selfmade x)\gamemodes\ttttt.pwn(1198) : error 017: undefined symbol "Spielerdatei"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

  • 1:
    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Paytime",GetPVarInt(playerid,"Paytime"));
    dini_IntSet(Spielerdatei,"Wantedlevel",GetPlayerWantedLevel(playerid));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Fraktionsrang",GetPVarInt(playerid,"Fraktionsrang"));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Job",GetPVarInt(playerid,"Job"));
    dini_IntSet(Spielerdatei,"JobAktiv",0);
    dini_IntSet(Spielerdatei,"JobBisPayday",GetPVarInt(playerid,"JobBisPayday"));
    dini_IntSet(Spielerdatei,"Knast",GetPVarInt(playerid,"Knast"));
    dini_IntSet(Spielerdatei,"KnastTime",GetPVarInt(playerid,"KnastTime"));
    dini_IntSet(Spielerdatei,"aKnast",GetPVarInt(playerid,"aKnast"));
    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
    dini_IntSet(Spielerdatei,"timeban",GetPVarInt(playerid,"timeban"));
    }
    return 1;
    }


    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin")); // Wenn ich hier SetPlayerSkin mache passiert nichts ---------------------------------
    SetPVarInt(playerid,"Paytime",dini_Int(Spielerdatei,"Paytime"));
    SetPlayerWantedLevel(playerid,dini_Int(Spielerdatei,"Wantedlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Fraktionsrang",dini_Int(Spielerdatei,"Fraktionsrang"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Knast",dini_Int(Spielerdatei,"Knast"));
    SetPVarInt(playerid,"KnastTime",dini_Int(Spielerdatei,"KnastTime"));
    SetPVarInt(playerid,"Job",dini_Int(Spielerdatei,"Job"));
    SetPVarInt(playerid,"JobAktiv",dini_Int(Spielerdatei,"JobAktiv"));
    SetPVarInt(playerid,"JobBisPayday",dini_Int(Spielerdatei,"JobBisPayday"));
    SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    SetPVarInt(playerid,"aKnast",dini_Int(Spielerdatei,"aKnast"));
    SetPVarInt(playerid,"loggedin",1);
    return 1;
    }
    Du musst mit der vorprogrammierten Funktion GetPlayerSkin und SetPlayerSkin arbeiten. Schau dir das an, wie ich das gemacht habe.


    2:
    ocmd:suspect(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,1) || !isPlayerInFrakt(playerid,6))return SendClientMessage(playerid,ROT,"Du bist kein Beamter."); // Ich weiß , dass das an dieser Zeile Liegt hab aber kA wie man das jetzt genau macht -----------------------------------------------------------------------------------------------
    new otherid,string[128],reason[64],amount;
    if(sscanf(params,"uds",otherid,amount,reason))return SendClientMessage(playerid,GRÜN,"Benutzung: /suspect [ID] [Wanteds] [Grund]");
    if(otherid == INVALID_PLAYER_ID)return SendClientMessage(playerid,DUNKELROT,"Der Spieler ist nicht Online.");
    SetPlayerWantedLevel(otherid,GetPlayerWantedLevel(otherid)+amount);
    format(string,sizeof(string),"Beamter %s hat dir %d Wanteds gegeben. Grund: %s",SpielerName(playerid),amount,reason);
    SendClientMessage(otherid,DUNKELROT,string);
    format(string,sizeof(string),"Du hast %s %d Wanteds gegeben. Grund: %s",SpielerName(otherid),amount,reason);
    SendClientMessage(playerid,GELB,string);
    return 1;
    }
    Ich hoffe du meinst das so, denn nach "||" und "&&" muss man immer wieder "!isPlayerInFrakt" anwenden, und kann nicht einfach if(!isPlayerInFrakt(playerid,1) || 6)machen.


    3:
    Dort musst du mit Variablen arbeiten. Du machst oben im Script z.B. so etwas:
    new bool:Tor;(Bool bedeutet, das du die Variable "Tor" nur auf true/1 und false/0 setzen kannst!)
    Dann beim runterfahren des Tores, einfach die Variable "Tor" auf 1 setzen.
    Dann machst du im gleichen Befehl eine "if" Abfrage rein:
    if(Tor == 1)
    {


    }
    In der Abfrage setzt du das Bool wieder auf 0, und fährst das Tor wieder nach oben.


    Ich hoffe du hast alles verstanden, wenn nicht melde dich noch einmal.


  • -Also da mit dem Skin hat nicht geklappt liegt aber daran denke ich , oder ?!


    public OnPlayerRequestClass(playerid, classid)
    {
    SetSpawnInfo(playerid,0,0,-326.2475,1079.6031,19.7422,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    return 1;
    }



    -Das mit dem && und || hat geklappt DANKE :)


    -Könntest du mir das mit dem Bool vllt näher erklären hab damit noch keine Erfahrung gemacht :SS

  • Kannst es bei OnPlayerRequestClass ja mal ändern, irgendeinen von den ersten beiden Nullen ist das.


    Zu den Bool:
    Ich zeige dir das Bool mal anhand eines Beispieles:
    new bool:baum;


    if(baum == false)
    {
    baum = true;
    }
    else
    {
    baum = false;
    }
    So, du kannst mit einem bool eine Variable nur auf true/false stellen. Möchtest du eine Variable aber z.B. auf 3 stellen, dann bekommst du einen Error, dann musst du das bool: weglassen.
    new baum;
    if(baum == 0)
    {
    baum = 1;
    }
    else if(baum == 1)
    {
    baum = 2;
    }
    else if(baum == 2)
    {
    baum = 3;
    }
    Das würde alles ohne ein bool gehen, mit einem bool aber nicht, da du das bool nicht über 1 setzen kannst.
    Ich hoffe ich konnte dir helfen. Wenn nicht, so melde dich bitte noch einmal ;)

    Einmal editiert, zuletzt von 5Gum ()

  • public OnPlayerRequestClass(playerid, classid)
    {
    new skin,Spielerdatei[64];
    skin = dini_Int(Spielerdatei,"Skin");
    SetSpawnInfo(playerid,0,skin,-326.2475,1079.6031,19.7422,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    return 1;
    }
    Versuch das mal.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das isst das , was ich da stehen habe


    stock Login(playerid,key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);

    if(gettime()<dini_Int(Spielerdatei,"timeban"))
    {
    SendClientMessage(playerid,ROT,"Du bist noch gebannt. Komm später wieder.");
    Kick(playerid);
    return 1;
    }

    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    LoadAccount(playerid);
    SendClientMessage(playerid,BLAU,"Erfolgreich eingeloggt.");
    SpawnPlayer(playerid);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,BLAU,"Falsches Passwort.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein.","Login","Abbrechen");
    return 1;
    }
    }[


    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin"));
    SetPVarInt(playerid,"Paytime",dini_Int(Spielerdatei,"Paytime"));
    SetPlayerWantedLevel(playerid,dini_Int(Spielerdatei,"Wantedlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Fraktionsrang",dini_Int(Spielerdatei,"Fraktionsrang"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Knast",dini_Int(Spielerdatei,"Knast"));
    SetPVarInt(playerid,"KnastTime",dini_Int(Spielerdatei,"KnastTime"));
    SetPVarInt(playerid,"Job",dini_Int(Spielerdatei,"Job"));
    SetPVarInt(playerid,"JobAktiv",dini_Int(Spielerdatei,"JobAktiv"));
    SetPVarInt(playerid,"JobBisPayday",dini_Int(Spielerdatei,"JobBisPayday"));
    SetPVarInt(playerid,"Baned",dini_Int(Spielerdatei,"Baned"));
    if(GetPVarInt(playerid,"Baned")==1)
    {
    SendClientMessage(playerid,ROT,"Du bist vom Server gebannt.");
    Kick(playerid);
    }
    SetPVarInt(playerid,"aKnast",dini_Int(Spielerdatei,"aKnast"));
    SetPVarInt(playerid,"loggedin",1);
    return 1;
    }
    //-----------------------------------------------------------------------------------------
    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Paytime",GetPVarInt(playerid,"Paytime"));
    dini_IntSet(Spielerdatei,"Wantedlevel",GetPlayerWantedLevel(playerid));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Fraktionsrang",GetPVarInt(playerid,"Fraktionsrang"));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Job",GetPVarInt(playerid,"Job"));
    dini_IntSet(Spielerdatei,"JobAktiv",0);
    dini_IntSet(Spielerdatei,"JobBisPayday",GetPVarInt(playerid,"JobBisPayday"));
    dini_IntSet(Spielerdatei,"Knast",GetPVarInt(playerid,"Knast"));
    dini_IntSet(Spielerdatei,"KnastTime",GetPVarInt(playerid,"KnastTime"));
    dini_IntSet(Spielerdatei,"aKnast",GetPVarInt(playerid,"aKnast"));
    dini_IntSet(Spielerdatei,"Baned",GetPVarInt(playerid,"Baned"));
    dini_IntSet(Spielerdatei,"timeban",GetPVarInt(playerid,"timeban"));
    }
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    new skin,Spielerdatei[64];
    skin = dini_Int(Spielerdatei,"Skin");
    SetSpawnInfo(playerid,0,skin,-326.2475,1079.6031,19.7422,0,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    return 1;
    }