[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
  • Eventuell eine Include von dir enthalten , wo du OnPlayerUpdate falsch hookst.
    Verwendest du die richtige .amx.


    Lösche mal die .amx und kompile das skript neu, da eventuell dein kompiler bugt dieses problem hatte ich mit xp das die .amx nicht überschrieben wurde.

  • Eventuell eine Include von dir enthalten , wo du OnPlayerUpdate falsch hookst.
    Verwendest du die richtige .amx.


    Lösche mal die .amx und kompile das skript neu, da eventuell dein kompiler bugt dieses problem hatte ich mit xp das die .amx nicht überschrieben wurde.


    In allen Includes wird "OnPlayerUpdate" nicht verwendet..


    Habe nochmal bisl dran gearbeitet, nun wird die Taste erkannt, jedoch bekomme ich kein Speed drauf..
    new keys, ud, lr;
    GetPlayerKeys(playerid, keys, ud, lr);
    //Spielergeschwindigkeit..

    else if(IsPlayerInAnyVehicle(playerid))
    {
    new vehicle = GetPlayerVehicleID(playerid);
    if(keys & -128){
    printf("2");
    if(GetVehicleSpeed(vehicle) > float(VehSpeed[GetVehicleModel(vehicle)]))return SetVehicleSpeed(vehicle,float(VehSpeed[GetVehicleModel(vehicle)]));
    else if(GetVehicleSpeed(vehicle) >= float((VehSpeed[GetVehicleModel(vehicle)]/2)))SetVehicleSpeed(vehicle,GetVehicleSpeed(vehicle) +10);
    }
    }
    Außerdem wird die Taste nur manchmal ausgegeben ...

    Mit freundlichen Grüßen
    ErikSon



    Scripte kleine Systeme auf Anfrage umsonst!
    Per PN könnt ihr mir gerne Scriptingfragen stellen.

    Einmal editiert, zuletzt von ErikSon ()

  • if(strcmp(cmdtext, "/heal", true) == 0)
    {
    {
    new str[122];
    new name[MAX_PLAYER_NAME];
    if(AccInfo[playerid][pVip] >= 1 || AccInfo[playerid][Level] >= 1)
    if (!AccInfo[playerid][pVip]) return SendClientMessage(playerid, red, "** You are not a VIP Member to perform this command (/viphelp).");
    SetPlayerHealth(playerid, 100);
    PlayerPlaySound(playerid,1137,0.0,0.0,0.0);
    SendClientMessage(playerid, COLOR_VIP,"* You typed (/heal) to set your health to 100.");
    GetPlayerName(playerid, name, sizeof(name));
    format(str,sizeof(str),"** %s VIP %s has used the (/heal) command.",Status, name);
    MessageToAdmins(COLOR_MAUVE,str);
    }
    return 1;


    Normale Spieler und VIP's können den Befehl nutzen. Admins jedoch nicht? :s


    Nur Admins und VIP's sollten es benutzen können..

  • if(!strcmp(cmdtext,"/heal",true)){
    new string[128],name[MAX_PLAYER_NAME];GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    if(!AccInfo[playerid][pVip] && !AccInfo[playerid][Level]) return SendClientMessage(playerid,red,"** Your aren't a VIP Member or a Admin to perform this command (/viphelp)!");
    SetPlayerHealth(playerid,100);
    PlayerPlaySound(playerid,1137,0,0,0);
    SendClientMessage(playerid,COLOR_VIP,"* You typed (/heal) to set your health to 100!");
    return format(string,128,"** %s VIP %s has used the (/heal) command!",Status,name),MessageToAdmin(COLOR_MAUVE,string);
    }
    So klappt es

    Einmal editiert, zuletzt von AirM4X ()

    • Offizieller Beitrag

    if(!AccInfo[playerid][pVip] || !AccInfo[playerid][Level])return SendClientMessage(playerid,red,"** Your aren't a VIP Member or a Admin to perform this command (/viphelp)!");

    if(!AccInfo[playerid][pVip] && !AccInfo[playerid][Level]) return SendClientMessage(playerid,red,"** Your aren't a VIP Member or a Admin to perform this command (/viphelp)!");




    Wenn der Admin kein VIP hat, hätte er es sonst nicht nutzen können (andersrum auch.. )

  • Push

    //OnPlayerUpdate
    new keys, ud, lr;
    GetPlayerKeys(playerid, keys, ud, lr);
    if(ud & KEY_UP || ud & -128)GibtGas[playerid] = true;
    else GibtGas[playerid] = false;


    Habe einen weiteren Fehler..
    Jeffry hat mir ja eine Funktion gegeben, die die Geschwindikeit des Spielers verändert, jedoch verändert es die Geschwindigkeit doch nicht..
    Ich habe mir die Geschwindigkeit immer ausgeben lassen usw, und es sah so aus, als ob es klappt..


    Die Geschwindigkeit verändert sich nur, wenn ich laufe und dabei springe. Dann verändert sie sich aber nicht um die Geschwindigkeit, die ich angegeben habe, sondern um 100, 200 , 2000, 3000 ( unterschiedlich ) km/h ..


    Hier nochmal ein Versuch, die Geschwindigkeit auf 30 km/h zu stellen ( OnPlayerUpdate )
    if(!IsPlayerInAnyVehicle(playerid) && !Jumped[playerid])
    {
    new Float:speed; GetPlayerSpeed_New(playerid,speed);
    return SetPlayerSpeed(playerid,30.0,speed);
    }


    Und hier nochmal die Funktionen "GetPlayerSpeed_New" & "SetPlayerSpeed"

    stock GetPlayerSpeed_New(playerid, &Float:speed) // By: [XST]O_x
    {
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid)!=PLAYER_STATE_PASSENGER)
    GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
    else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 100.3;
    speed = ST[3];
    return 1;
    }
    stock SetPlayerSpeed(playerid, Float:_speed, Float:_isspeed){
    if(playerid == INVALID_PLAYER_ID)return INVALID_PLAYER_ID;
    if(IsPlayerNPC(playerid))return 1;
    if(IsPlayerInAnyVehicle(playerid))return 1;
    new Float:x1, Float:y1, Float:z1;
    GetPlayerVelocity(playerid, x1, y1, z1);
    return SetPlayerVelocity(playerid, x1*(1+(1/(1+(_speed/_isspeed)))), y1*(1+(1/(1+(_speed/_isspeed)))), z1);
    }


    Ist irgendwas falsch? ..


    //Post2


    new keys, ud, lr;
    GetPlayerKeys(playerid, keys, ud, lr);
    //Spielergeschwindigkeit..

    else if(IsPlayerInAnyVehicle(playerid))
    {
    new vehicle = GetPlayerVehicleID(playerid);
    if(keys & -128){
    printf("2");
    if(GetVehicleSpeed(vehicle) > float(VehSpeed[GetVehicleModel(vehicle)]))return SetVehicleSpeed(vehicle,float(VehSpeed[GetVehicleModel(vehicle)]));
    else if(GetVehicleSpeed(vehicle) >= float((VehSpeed[GetVehicleModel(vehicle)]/2)))SetVehicleSpeed(vehicle,GetVehicleSpeed(vehicle) +10);
    }
    }


    Außerdem wird die Taste nur manchmal ausgegeben ...



    //Post 1

    Habe auch anstatt


    ud & -128 //&
    ud & KEY_UP // &
    ud == KEY_UP // &
    ud & KEY_UP



    keys & KEY_UP // &
    keys == KEY_UP // &
    keys & -128 // &
    keys == -128



    Jedoch klappt nichts davon ..

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Die Syntax ist doch einfach ^^

    if(Bedingung)
    {
    //true
    }
    else
    {
    //false
    }

    Das selbe jetzt mit deinen Fahrzeugen ^^ (und du solltest die Abfrage so machen: if(car == 520 || car == 425 || car == 432) da car ein Zwichenspeicher ist bzw. ein eindimensionaler und car != 520 UND 425 UND 432 sein kann ^^

  • //Der Code wird ausgeführt!
    if(car == 520 || car == 425 || car == 432)return SendClientMessage(playerid,COLOR_GREY,"** You aren't allowed to spawn this vehicle!");
    //Der Code wird nicht mehr ausgeführt, da return ....
    Ab dem return SendClientMessage... wird nichts mehr ausgeführt.

  • Hallo allerseits :)


    Ich habe anklickbare TextDraw's, allerdings möchte ich es so scripten, dass man nur ihren Text (string) anklicken kann.
    Im Moment ist es allerdings so, dass man sie auch noch bis zum Bildschirmrand rechts und unten anklicken kann ( ?( )
    Also muss ich nicht mit der Maus direkt auf dem Textdraw sein, sondern kann auch rechts daneben oder darunter sein,
    trotzdem werden sie ausgewählt und wenn ich klicke ausgeführt (falls sie anklickbar sind natürlich). Anscheinend gibt
    es eine Art 'unsichtbares Anklickfeld' ?


    Screens:





    OnGameModeInit (erstellen der Textdraws)

    Spoiler anzeigen
    new Text:Textdraw0;
    new Text:Textdraw1;
    new Text:Textdraw2;
    new Text:Textdraw3;

    Spoiler anzeigen
    public OnGameModeInit()
    {

    Spoiler anzeigen
    Textdraw0 = TextDrawCreate(489.000000, 136.833343, "usebox");
    TextDrawLetterSize(Textdraw0, 0.000000, 24.053705);
    TextDrawTextSize(Textdraw0, 149.500000, 0.000000);
    TextDrawAlignment(Textdraw0, 1);
    TextDrawColor(Textdraw0, 0);
    TextDrawUseBox(Textdraw0, true);
    TextDrawBoxColor(Textdraw0, 102);
    TextDrawSetShadow(Textdraw0, 0);
    TextDrawSetOutline(Textdraw0, 0);
    TextDrawFont(Textdraw0, 0);

    Spoiler anzeigen
    Textdraw1 = TextDrawCreate(295.000000, 133.933319, "Admin");
    TextDrawLetterSize(Textdraw1, 0.449999, 1.600000);
    TextDrawAlignment(Textdraw1, 1);
    TextDrawColor(Textdraw1, -1);
    TextDrawSetShadow(Textdraw1, 0);
    TextDrawSetOutline(Textdraw1, 1);
    TextDrawBackgroundColor(Textdraw1, 51);
    TextDrawFont(Textdraw1, 1);
    TextDrawSetProportional(Textdraw1, 1);

    Spoiler anzeigen
    Textdraw2 = TextDrawCreate(181.000000, 171.266723, "Einfrieren");
    TextDrawLetterSize(Textdraw2, 0.449999, 1.600000);
    TextDrawAlignment(Textdraw2, 1);
    TextDrawColor(Textdraw2, -1);
    TextDrawSetShadow(Textdraw2, 0);
    TextDrawSetOutline(Textdraw2, 1);
    TextDrawBackgroundColor(Textdraw2, 51);
    TextDrawFont(Textdraw2, 1);
    TextDrawSetProportional(Textdraw2, 1);
    TextDrawSetSelectable(Textdraw2, true);

    Spoiler anzeigen
    Textdraw3 = TextDrawCreate(181.000000, 200.199951, "Entfrieren");
    TextDrawLetterSize(Textdraw3, 0.449999, 1.600000);
    TextDrawAlignment(Textdraw3, 1);
    TextDrawColor(Textdraw3, -1);
    TextDrawSetShadow(Textdraw3, 0);
    TextDrawSetOutline(Textdraw3, 1);
    TextDrawBackgroundColor(Textdraw3, 51);
    TextDrawFont(Textdraw3, 1);
    TextDrawSetProportional(Textdraw3, 1);
    TextDrawSetSelectable(Textdraw3, true);
    }



    Hier werden sie dem Spieler angezeigt:

    Spoiler anzeigen
    public OnPlayerCommandText(playerid, cmdtext[]){if (strcmp("/admin", cmdtext, true, 10) == 0){TextDrawShowForPlayer(playerid, Textdraw0);TextDrawShowForPlayer(playerid, Textdraw1);TextDrawShowForPlayer(playerid, Textdraw2);TextDrawShowForPlayer(playerid, Textdraw3); SelectTextDraw(playerid, 0x00FF00FF);}return 0;}



    OnPlayerClickTextDraw():

    Spoiler anzeigen
    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
    if(_:clickedid != INVALID_TEXT_DRAW) // If the player clicked a valid textdraw, continue with the coding. (_:var removes the Text: tag, to avoid tag mismatch)
    {

    Spoiler anzeigen
    if(clickedid == Textdraw2) // unser beispiel textdraw ?
    {
    ShowPlayerDialog(playerid, DIALOG_ADMIN_EINFRIEREN, DIALOG_STYLE_INPUT, "Admin", "Gebe die playerid des zu einfrierenden Spielers ein", "Einfrieren", "Abbruch");
    }

    Spoiler anzeigen
    TextDrawHideForPlayer(playerid, Textdraw0);
    TextDrawHideForPlayer(playerid, Textdraw1);
    TextDrawHideForPlayer(playerid, Textdraw2);
    TextDrawHideForPlayer(playerid, Textdraw3);

    Spoiler anzeigen
    CancelSelectTextDraw(playerid);
    }
    return 0;
    }

    2 Mal editiert, zuletzt von 085zehn () aus folgendem Grund: screens hinzugefügt.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen