[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
  • Jeffry:


    Danke, habe zurzeit ein Probleme mit dem Login/Register System. Das Problem ist, das ich Befehle ausführen kann indem ich F5 drücke (Textfeld öffnet sich) und ich die Befehle eingeben kann ohne gekickt zu werden. Ich habe zwar eine Kick Funktion drin das wenn man das Passwortfeld schließt, aber nicht wenn man Befehle ausführt.


    Außerdem wird der Spieler gespawnt wenn ich ein falsches Passwort eingebe.


    Hier meine Publics


    Spoiler anzeigen

    public OnPlayerConnect(playerid)
    {
    PlayAudioStreamForPlayer(playerid, "dl.dropboxusercontent.com/s/6zmyjochwhilhzl/KC.mp3?dl=0");
    if(fexist(UserPath(playerid)))
    {
    INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Type your password below to login.","Login","Quit");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
    }
    new string[520];
    playersonline++;
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    format(string,sizeof string,"{007DFF}%s{FEFEFE} has joined the server! There are currently {007DFF}%d{FEFEFE} player(s) online.",Name,playersonline);
    SendClientMessageToAll(COLOR_GREEN, string);

    TextDrawShowForPlayer(playerid, Textdraw0);
    return 1;



    OnPlayerRequestClass


    Spoiler anzeigen

    public OnPlayerRequestClass(playerid, classid)
    {
    SetSpawnInfo(playerid,0,12,280.9249,1359.5286,10.5859,172.2551,24,500,34,500,0,0);
    if(PlayerInfo[playerid][pBanned] == 1)
    {
    Ban(playerid);
    }
    SetPlayerPos(playerid, 280.9249,1359.5286,10.5859);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);

    Spoiler anzeigen
    SpawnPlayer(playerid);
    return 1;
    }


    OnPlayerSpawn


    Spoiler anzeigen

    public OnPlayerSpawn(playerid)
    {
    StopAudioStreamForPlayer(playerid); // Stop the audio stream
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    GivePlayerWeapon(playerid, 24, 500);
    GivePlayerWeapon(playerid, 34, 300);

    Spoiler anzeigen
    return 1;
    }




    Ich hatte außerdem mal ein Code eingefügt um die Spawnbuttons zu entfernen, dachte es ist vielleicht wichtig das zu erwähnen.


    Mit freundlichen Grüßen
    JustMe.77 8)


  • Push

  • Hey,


    hier ein Laborcheck wo man die DNA eingeben muss und man dann die Daten des Opfers rausbekommt.
    hier der Code:
    ocmd:laborcheck(playerid, params[])
    {
    new DNA[124], query[256];
    if(!isPlayerInFrakt(playerid,4))return SendClientMessage(playerid,-1,"Du bist nicht bei der Spurensicherung.");
    if(sscanf(params,"s",DNA))return SendClientMessage(playerid,-1,"Tippe: /laborcheck [DNA]");
    mysql_format(mysqlHandle, query, sizeof(query), "SELECT `Name`, `Level`, `Fraktion`, `DNA`, `Killer`, `KillerWeapon` FROM `accounts` WHERE DNA='%s'",DNA);
    mysql_tquery(mysqlHandle, query, "Laborcheck", "d", playerid);
    return 1;
    }


    und hier Laborcheck Public
    public Laborcheck(playerid)
    {
    new string[125];
    if(!cache_get_row_count()) return SendClientMessage(playerid,0xFF0000FF,"DNA nicht gefunden.");
    SendClientMessage(playerid,-1,"Hier die Daten des Spielers: ");
    cache_get_row(0, 0, string);
    SendClientMessage(playerid,-1,string);
    return 1;
    }


    Doch er gibt nur den Namen aus.

  • public Laborcheck(playerid)
    {
    new string[125];
    if(!cache_get_row_count()) return SendClientMessage(playerid,0xFF0000FF,"DNA nicht gefunden.");
    SendClientMessage(playerid,-1,"Hier die Daten des Spielers: ");
    for(new i;i<cache_get_field_count();i++)
    {
    cache_get_row(0,i,string);
    SendClientMessage(playerid,-1,string);
    }
    return 1;
    }
    Ich weiß grade nicht ob das die richtige Funktion ist (cache_get_field_count), damit du die Anzahl der Spalten (Felder) herausbekommst.
    Wenn ich mich nicht irre, sollte das so funktionieren.

  • Hi Leute ich will einen Heal Befehl machen:


    ocmd:heal(playerid,params[])
    {
    new health;
    new receiverid[128];
    if(sscanf(params,"ui",receiverid,health))return SendClientMessage(playerid,COLOR_RED,"/heal [playerid] [heal]");
    SetPlayerHealth(receiverid,health);
    return 1;
    }


    leider bekomme ich beim compilen in dieser zeile (SetPlayerHealth(receiverid,health);) immer ein argument mismatch

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Weil heal ein Float sein muss:


    ocmd:heal(playerid,params[])
    {
    new Float:health,receiverid;
    if(sscanf(params,"uf",receiverid,health))return SendClientMessage(playerid,COLOR_RED,"/heal [playerid] [heal]");
    SetPlayerHealth(receiverid,health);
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Kaliber


    ocmd:heal(playerid,params[])
    {
    new float:health;
    new receiverid[128];
    if(sscanf(params,"uf",receiverid,health))return SendClientMessage(playerid,COLOR_RED,"/heal [playerid] [heal]");
    SetPlayerHealth(receiverid,health);
    return 1;
    }


    immer noch mismatch

  • for (new i = 0; i < 13; i++)
    {
    GetPlayerWeaponData(playerid, i, WaffenSave[playerid][waffe[i]], WaffenSave[playerid][ammo[i]]);
    }


    new WaffenSave[MAX_PLAYERS][WaffenSaveInfo];


    enum WaffenSaveInfo
    {
    Float:waffen_x,
    Float:waffen_y,
    Float:waffen_z,
    waffe[13],
    ammo[13]
    }



    Müsste doch eigentlich klappen oder? Die Errors kommen aber in der GetPlayerWeapon Zeile.. Wegen dem waffe[i] und ammo[i]

  • @Schlaubi:


    Musst es so schreiben:


    GetPlayerWeaponData(playerid, i, WaffenSave[playerid][waffe][i], WaffenSave[playerid][ammo][i]);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • new float:health;
    new receiverid[128];
    Zu
    new Float:health;
    new receiverid;

    danke funktioniert
    und jetzt noch eine frage:
    ich wollte grad ein mapping einfügen und bekomme beim kompilen folgenden error: symbol already defined: "CreateObject"


  • Push


    Du kannst diesen Codeschnipsel von meinem abseil skript nehmen , da wird egal wie der Spieler steht die Koordinate hinter ihm ermittelt.

    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    GetPlayerFacingAngle(playerid,Pos[3]);
    Pos[0] += 2.0 * -floatsin(-Pos[3], degrees);
    Pos[1] += 2.0 * -floatcos(-Pos[3], degrees);


    was GetPlayerPos dies musst du bei der Kamera gegen GetPlayerCameraPos ersetzen , den Winkel musst du dir von irgend einem Bezugspunkt errechnen lassen , da kannst du ja bissle rum probieren
    via atan(Yb - Ya, Xb - Xa) bekommst du den winkel dazwischen raus. und einen neuen LookAt Punkt kannst du via GetPlayerCameraFrontVector erechnen , da gibt es auch ein beispiel im Wiki.

  • Die Variable: "adminsys" wird nicht ausgelesen bzw funktioniert nicht. Bevor ich das Textdraw & SetPlayerColor eingefügt habe funktionierte alles reibungslos,
    nun ja jetzt bin ich verwirrt und ich blick nicht mehr durch.


    der Befehl


    ocmd:adienst(playerid,params[])
    {
    if(!IsAdmin(playerid,1))return 1;
    new str_1[145],bool:adienstsys;
    new Text3D:AdminDutyLabel[MAX_PLAYERS];
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    AdminDutyLabel[playerid] = Create3DTextLabel("SUPPORT",C_LIGHTBLUE,X,Y,Z,40.0,0,0);
    if(adienstsys == false)
    {
    spieleraduty[playerid] = true;
    adienstsys = true;
    SetPlayerColor(playerid,0x00DFDFFF);
    Attach3DTextLabelToPlayer(AdminDutyLabel[playerid],playerid,0,0,2);
    format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support angemeldet.",sName(playerid));
    SendClientMessageToAll(0x008400FF,str_1);
    PlayerTextDrawShow(playerid,ADIENSTLABEL[playerid]);
    return 1;
    }
    else if(adienstsys == true)
    {
    adienstsys = false;
    spieleraduty[playerid] = false;
    SetPlayerColor(playerid,0xFFFFFFFF);
    Delete3DTextLabel(AdminDutyLabel[playerid]);
    format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support abgemeldet.",sName(playerid));
    SendClientMessageToAll(C_RED,str_1);
    PlayerTextDrawHide(playerid,ADIENSTLABEL[playerid]);
    return 1;
    }
    return 1;
    }


    Es passiert mir leider öfters mit den Booleans, ich versteh es einfach nicht...

  • Du musst das global definieren, ansonsten ist es immer wieder auf false wenn du den Befehl eingibst.
    new Text3D:AdminDutyLabel[MAX_PLAYERS],bool:adienstsys;//global


    ocmd:adienst(playerid,params[])
    {
    if(!IsAdmin(playerid,1))return 1;
    new str_1[145];
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    AdminDutyLabel[playerid] = Create3DTextLabel("SUPPORT",C_LIGHTBLUE,X,Y,Z,40.0,0,0);
    if(adienstsys == false)
    {
    spieleraduty[playerid] = true;
    adienstsys = true;
    SetPlayerColor(playerid,0x00DFDFFF);
    Attach3DTextLabelToPlayer(AdminDutyLabel[playerid],playerid,0,0,2);
    format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support angemeldet.",sName(playerid));
    SendClientMessageToAll(0x008400FF,str_1);
    PlayerTextDrawShow(playerid,ADIENSTLABEL[playerid]);
    return 1;
    }
    else if(adienstsys == true)
    {
    adienstsys = false;
    spieleraduty[playerid] = false;
    SetPlayerColor(playerid,0xFFFFFFFF);
    Delete3DTextLabel(AdminDutyLabel[playerid]);
    format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support abgemeldet.",sName(playerid));
    SendClientMessageToAll(C_RED,str_1);
    PlayerTextDrawHide(playerid,ADIENSTLABEL[playerid]);
    return 1;
    }
    return 1;
    }