[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
  • Auch unter OnPlayerStateChange ?

  • if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_NONE)
    Zu
    if(oldstate == PLAYER_STATE_DRIVER)
    Der neue Status muss nämlich nicht zwangsläufig OnFoot sein.


    Außerdem solltest du eventuell auch PlayetTextDrawHide anstatt PlayerTextDrawDestroy nutzen, sofern du das Textdraw bei OnPlayerConnect erstellst.

  • Ich hab ja schon ein Teil :)


    Also wenn der Spieler in das Auto einsteigt wird ein Timer gestartet der das aufruft:


    forward GetVehicleSpeed(playerid);
    public GetVehicleSpeed(playerid)
    {
    new vID = GetPlayerVehicleID(playerid);
    VehicleSpeed(vID);
    return vID;
    }


    Vehicle Speed:


    stock VehicleSpeed(vehicleid)
    {
    new Float:xPos[3];
    GetVehicleVelocity(vehicleid, xPos[0], xPos[1], xPos[2]);
    return floatround(floatsqroot(xPos[0] * xPos[0] + xPos[1] * xPos[1] + xPos[2] * xPos[2]) * 170.00);
    }


    format(tcn1, sizeof(tcn), "%d", GetVehicleSpeed(playerid));
    PlayerTextDrawSetString(playerid, Tacho9[playerid], tcn1);


    Leider Funktioniert es nicht :(

  • Es reicht hier einfach:


    C
    stock GetVehicleSpeed(playerid)
    {
        return VehicleSpeed(GetPlayerVehicleID(playerid));
    }

    ast2ufdyxkb1.png


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

  • Warum überhaupt einen separaten Funktionsaufruf?
    format(tcn1, sizeof(tcn), "%d", GetVehicleSpeed(playerid));
    Zu:
    format(tcn1, sizeof(tcn1), "%d", VehicleSpeed(GetPlayerVehicleID(playerid)));


    Das public GetVehicleSpeed kann dann gelöscht werden.


    Den Code mit dem PlayerTextDrawSetString dann in einen Timer setzen, der jede Sekunde aufgerufen wird und für alle Spieler eine Schleife enthält.

  • @Jeffry




    Hallo,


    Ich habe ein Problem wen ich jetzt ein LKW und den Tanker angehängt habe,
    kann ich nicht /lieferung machen bei den anderen 2 Funktioniert es?

  • probiere es mal so :)

  • Hab mal nach langer Zeit bissel rumgebastelt. Hab mir jetzt ein rob System gebastelt wo der Spieler auf einem Actor zielen muss. Momentan ist das alles (also die Abfragen ob er auf dem actor zielt) in OnPlayerUpdate. Ist jetzt die Frage ob das OnPlayerUpdate mit noch kA 10 weiteren Abfragen mitmacht oder ob es Sinnvoller bzw es reicht nen timer zu nutzen. Der Raub soll Fehlschlagen sobald man zB nicht mehr auf den Actor zielt.


    Momentan sieht der Code so aus:
    public OnPlayerUpdate(playerid)
    {
    // No need to check if we aren't allowed to rob anyway
    if(!IsAlive(playerid)) return 1;
    if(IsACop(playerid)) return 1;
    if(IsJailed(playerid)) return 1;
    if(GetPlayerInterior(playerid) == 0) return 1;

    new actor = GetPlayerTargetActor(playerid);
    new weapon = GetPlayerWeapon(playerid);
    new string[128];
    if(actor != INVALID_ACTOR_ID)
    {
    if(actor == Actors[8] && IsPlayerInDynamicCP(playerid, CP_SexShopRobbery) && RobbedSexShopRecently == 0 && pInfo[playerid][RobbingStore] == 0)
    {
    if(IsValidAimWeapon(weapon))
    {
    if(ActorHandsUp[actor] == false) // REMOVE ME
    {
    ActorHandsUp[actor] = true; // REMOVE ME
    RobbedSexShopRecently = 240;
    pInfo[playerid][RobbingStore] = 30;
    ApplyActorAnimation(actor, "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0);
    ApplyActorAnimation(actor, "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0);


    GiveWanted(playerid, 4);


    format(string,sizeof(string),"**(DISPATCH STORE ROBBERY IN PROGRESS)** Suspect: %s(%d)",pInfo[playerid][Name],playerid);
    SendMessageToAllCops(string,playerid,true); // play crime report
    SendMessageToAllCops("ALL UNITS: Please respond to the sex shop in Redsands East");


    format(string,sizeof(string),"(SEX SHOP ROBBERY) Wanted Level: %d",GetWanted(playerid));
    SendClientMessage(playerid,GetPlayerColor(playerid),string);
    SendClientMessage(playerid,0x00C7FFAA,"Starting robbery. The police have been advised and will be dispatched to this store");


    format(string,sizeof(string),"~w~ROBBERY IN PROGRESS~n~~r~KEEP AIMING AT THE CASHIER~n~~b~30~w~ SECONDS REMAIN");
    GameTextForPlayer(playerid,string, 2000, 3);
    }
    }
    }
    else if(actor == Actors[9] && IsPlayerInDynamicCP(playerid, CP_TattooRobbery) && RobbedTattooShopRecently == 0 && pInfo[playerid][RobbingStore] == 0)
    {
    if(IsValidAimWeapon(weapon))
    {
    if(ActorHandsUp[actor] == false)// REMOVE ME
    {
    ActorHandsUp[actor] = true;// REMOVE ME
    RobbedTattooShopRecently = 240;
    pInfo[playerid][RobbingStore] = 30;
    ApplyActorAnimation(actor, "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0);
    ApplyActorAnimation(actor, "SHOP", "SHP_HandsUp_Scr",4.1,0,0,0,1,0);

    GiveWanted(playerid, 4);


    format(string,sizeof(string),"**(DISPATCH STORE ROBBERY IN PROGRESS)** Suspect: %s(%d)",pInfo[playerid][Name],playerid);
    SendMessageToAllCops(string,playerid,true); // play crime report
    SendMessageToAllCops("ALL UNITS: Please respond to the tattoo shop in Redsands East");


    format(string,sizeof(string),"(TATTOO SHOP ROBBERY) Wanted Level: %d",GetWanted(playerid));
    SendClientMessage(playerid,GetPlayerColor(playerid),string);
    SendClientMessage(playerid,0x00C7FFAA,"Starting robbery. The police have been advised and will be dispatched to this store");


    format(string,sizeof(string),"~w~ROBBERY IN PROGRESS~n~~r~KEEP AIMING AT THE CASHIER~n~~b~30~w~ SECONDS REMAIN");
    GameTextForPlayer(playerid,string, 2000, 3);
    }
    }
    }
    }
    else if(pInfo[playerid][RobbingStore] > 0 && IsValidAimWeapon(weapon))
    {
    pInfo[playerid][RobbingStore] = 0;
    if(IsPlayerInDynamicCP(playerid, CP_SexShopRobbery))
    {
    ClearActorAnimations(Actors[8]);
    ActorHandsUp[Actors[8]] = false;// REMOVE ME
    }
    else if(IsPlayerInDynamicCP(playerid, CP_TattooRobbery))
    {
    ClearActorAnimations(Actors[9]);
    ActorHandsUp[Actors[9]] = false;// REMOVE ME
    }
    GameTextForPlayer(playerid,"~r~ROBBERY FAILED~n~~w~YOU DIDN'T KEEP AIMING AT THE CASHIER",3000,3);
    }
    return 1;
    }

  • Habe jetzt nen Blinkersystem gefunden, aber irgendwie wird das Objekt ingame nicht erstellt. Was ist falsch ?



    new vehicleid = GetPlayerVehicleID(playerid), Float:_vX[2], Float:_vY[2], Float:_vZ[2];
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, _vX[0], _vY[0], _vZ[0]);
    Indicators_xqz[vehicleid][0] = CreateObject(19294, 0, 0, 0,0,0,0);
    AttachObjectToVehicle(Indicators_xqz[vehicleid][0], vehicleid, _vX[0]/2.23, _vY[0]/2.23, 0.1 ,0,0,0);
    Indicators_xqz[vehicleid][1] = CreateObject(19294, 0, 0, 0,0,0,0);
    AttachObjectToVehicle(Indicators_xqz[vehicleid][1], vehicleid, _vX[0]/2.23, -_vY[0]/2.23, 0.1 ,0,0,0);

  • Speezy zeig mal deinen Code



    So Moin habe folgendes Problem:



    Ich will dass der Spieler bei dem Diese Funktion aufgerufen wird, einem Spieler zuschaut der 1. nicht er selbst ist. 2. einer der nicht in TEAM_SPECTATOR ist und 3. natuehrlich connected ist. Das wars schon.
    Die Spieler ID sollte am besten random ausgesucht werden.


    Wie kriege ich das hin? Meine Konstruktion mag der Compiler leider nicht.
    Ich sehe jedoch keinen anderen Weg, da ich das Array ja dynamisch erstellen muss, damit ich keinen Nullen drin habe, und da kommts zum Problem wenn ein Spieler die ID 0 hat.


    Bitte um Rat