[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
  • 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.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • @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

  • Bitte um Rat

    Hier ein kleiner Rat :love:


    ast2ufdyxkb1.png


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

  • Danke dir schonmal, das hat geholfen :D
    Ich wollte es jetzt noch ein bisschen uebertreiben


    Wenn der Spieler Linke Pfeiltaste oder Rechtepfeiltaste drueckt, soll bei Links der Spieler den naechsten Spieler mit kleinerer Spieler ID spectaten, als der Aktuell, und bei Rechts der mit der groesseren ID.


    Folgendes habe ich dazu bisher





    Ich hoffe das ist nicht zuviel fuer kleine Scripting Fragen :D
    Mir viele nur der Weg ein die ID vom aktuellen Spieler zu speichern, und dann alle Spieler durchzugehen, und um zu schauen ob der naechste gueltige Spieler dann eine ID > aktuelle ID hat bzw < und wenn nicht zu continuen;


    Das ist mein jetziges Konstrukt von dem ich mir erhoffe dass es irgendwie im Ansatz klappt


    2 Mal editiert, zuletzt von Sub Royal ()

  • Das ist mein jetziges Konstrukt von dem ich mir erhoffe dass es irgendwie im Ansatz klappt

    Machs dir nicht so kompliziert.


    Du musst das alles mal ein bisschen modularer schreiben xD


    Also mal kurz nebenbei, du musst unter OnPlayerUpdate nicht prüfen ob der Spieler connected ist..weil dieser Callback nur für Spieler aufgerufen wird, die online sind xD


    Versuchs mal so:



    //Edit: Parameter...xD

    ast2ufdyxkb1.png


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