[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

  • Es macht mehr Sinn eine Funktion dafür zu erstellen, zumal dadurch auch viele unnötige Zeilen gespart werden.
    Außerdem hatte dein Code eins zwei Fehler, die ich zusätzlich behoben habe.



    ocmd:motor(playerid,params[])
    {
    SetTimerEx("Motorstarten",1000,false,"i",playerid);
    return 1;
    }


    public Motorstarten(playerid)
    {
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER)return 1;
    new vID=GetPlayerVehicleID(playerid);
    if(!HatVehEinMotor(GetVehicleModel(vID)))return 1;

    new tmp_motor,tmp_licht,tmp_alarm,tmp_tuer,tmp_mhaube,tmp_kraum,tmp_objective;
    GetVehicleParamsEx(vID,tmp_motor,tmp_licht,tmp_alarm,tmp_tuer,tmp_mhaube,tmp_kraum,tmp_objective);
    if(tmp_motor==1)
    {
    tmp_motor =0;
    format(string,sizeof(string), "((%s: stoppt den Motor und zieht die Handbremse an.))", getPlayerName(playerid));
    SendClientMessageInRangeOfPoint(playerid, FARBE_FUNK, string, 15.0);
    }
    else
    {
    tmp_motor=1;
    format(string,sizeof(string), "((%s: dreht den Zündschlüssel um und startet den Motor.))", getPlayerName(playerid));
    SendClientMessageInRangeOfPoint(playerid, FARBE_FUNK, string, 15.0);
    }
    SetVehicleParamsEx(vID,tmp_motor,tmp_licht,tmp_alarm,tmp_tuer,tmp_mhaube,tmp_kraum,tmp_objective);
    return 1;
    }


    stock SendClientMessageInRangeOfPoint(playerid, color, msg[], Float:range)
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);

    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) {
    if(!IsPlayerConnected(i)) continue;
    if(!IsPlayerInRangeOfPoint(i, range, X, Y, Z)) continue;
    SendClientMessage(i, color, msg);
    }
    return 1;
    }

  • Hey,


    Ich habe eine frage ich wollte kennzeichen machen.


    z.b er heißt Chris sollte kommen CH 147999 als kennzeichen z.b nicht Ch 147999 das die Anfangsbuchstaben groß sind



    new playerName[MAX_PLAYER_NAME+1], nPlate[32], [24+1];
    GetPlayerName(playerid, playerName, sizeof(playerName));
    strmid(cutName, playerName, 0, 1, sizeof(cutName));
    format(nPlate, sizeof(nPlate), "%s %d", cutName, PrivateVehicle[playerid][slot][vehID]);

  • Probier es mal so:


    new playerName[MAX_PLAYER_NAME+1], nPlate[32];
    GetPlayerName(playerid, playerName, sizeof(playerName));
    format(nPlate, sizeof(nPlate), "%s%s %d", toupper(playerName[0]), toupper(playerName[1]), PrivateVehicle[playerid][slot][vehID]);


  • new playerName[MAX_PLAYER_NAME+1], nPlate[32];
    GetPlayerName(playerid, playerName, sizeof(playerName));
    format(nPlate, sizeof(nPlate), "%s%s %d", toupper(playerName[0]), toupper(playerName[1]), PrivateVehicle[playerid][slot][vehID]);


    Nein klappt nicht :/

  • format(nPlate, sizeof(nPlate), "%s%s %d", toupper(playerName[0]), toupper(playerName[1]), PrivateVehicle[playerid][slot][vehID]);
    zu
    format(nPlate, sizeof(nPlate), "%c%c %d", toupper(playerName[0]), toupper(playerName[1]), PrivateVehicle[playerid][slot][vehID]);

  • Tacho wird nicht angezeigt warum?

  • Hey kann mir jemand sagen, wie man in einen LOG. noch vorher DATUM und Uhrzeit mit Abspeichern lassen kann?
    Ich habe jetzt so Angefangen



    forward CMDLog(string[]);


    ocmd:freeze(playerid,params[])
    {
    if(!IsPlayerGM(playerid,1))return 1;
    new pID,string1[128],string2[128];
    if(sscanf(params,"u[128]",pID))return SendClientMessage(playerid,FARBE_ROT,"INFO: /freeze [Playerid]");
    if (pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,FARBE_ROT,"Diese Spieler (ID) existiert nicht.");
    TogglePlayerControllable(pID, false);
    format(string1,sizeof(string1), "Du hast den Spieler %s gefreezt!",getPlayerName(pID));
    SendClientMessage(playerid, FARBE_ACCEPT,string1);
    format(string2,sizeof(string2), "Das Teammitglied %s hat Dich gefreezt.",getPlayerName(playerid));
    SendClientMessage(pID, FARBE_ACCEPT,string2);
    CMDLog(string1);
    return 1;
    }


    public CMDLog(string[])
    {
    new entry[128];
    format(entry, sizeof(entry), "%s\n",string);
    new File:hFile;
    hFile = fopen("CMDLOG.log", io_append);
    fwrite(hFile, entry);
    fclose(hFile);
    }







    Wobei dann dan das in einer TXT gespeichert wird.Du hast den Spieler Patrick_Stewart gefreezt!


    Des weiteren habe ich einen /me CMD gemacht, stimmt er oweit? Kann es aktull nicht testen:



    ocmd:me(playerid, params[])
    {
    new string[128];
    if(sscanf(params, "s[128]", string)) return SendClientMessage(playerid,FARBE_ROT," INFO: /me [Text] (Um eine Handlung zu beschreiben)");
    format(string,sizeof(string), "%s %s)", getPlayerName(playerid),string);
    SendClientMessageInRangeOfPoint(playerid, 0x8471FFA4, string, 15.0);
    return 1;
    }


    VielenDank für Rückeldungen^^

  • @xPatrick


    Also dein /me Befehl stimmt soweit.
    Um bei deiner Log Funktion das Datum und Uhrzeit zu speichern, verwende einfach die Funktion [wiki]getdate[/wiki] und [wiki]gettime[/wiki].


    Das ganze sollte dann so aussehen:



    In der Log sollte es dann so aussehen:
    [22.02.2017][23:23:06] Test123 Test
    Wenn du dich fragst, was das %02d zu bedeuten hat, dies ist dafür da das gegebenen Falls eine '0' erstellt wird, wenn es Bespielsweiße 9 Uhr ist, wird es jetzt als 09... angezeigt, du kannst es auch mit %d schreiben dann sollte es so aussehen:
    [22.2.2017][23:23:6] Test123 Test


    Mit freundlichen Grüßen
    German_ScripterHD


  • new playerName[MAX_PLAYER_NAME+1], nPlate[32];
    new Zahlen = random(199999);
    GetPlayerName(playerid, playerName, sizeof(playerName));
    format(nPlate, sizeof(nPlate), "%c%c %d", toupper(playerName[0]), toupper(playerName[1]), Zahlen);



    Hey,


    Ich habe ein Problem
    Wen ich ein Auto kaufe sind es Random Zahlen ist auch Richtig.
    So aber wen ich z.b relogge ist wider ein ganz anderes Kennzeichen da :/ warum?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Kann ich folgenden Code eventuell effizienter oder besser schreiben, vorallem wegen der Kontrollstrukturen?


    Ich moechte weiterhin folgendes umsetzen:
    Ich will nicht dass ein Spieler das eigene "Bett" mit /blowup zerstoert.
    Also will ich irgendwie ausschliessen dass der beispielsweise bedstateviolet auf -1 setzen kann wenn er selbst gPlayerTeamSelection[playerid] == TEAM_VIOLET ist.
    Daher habe ich irgendwie das gefuehl dass ich alles umbauen muss, vielleicht hat jemand einen Vorschlag

    Wenn jemand noch Zeit hat, auch folgenden Befehl

    Einmal editiert, zuletzt von Sub Royal ()

  • Hallo, kann mir jemand helfen? beim compilen mit dem Filterscript: Interaktive Mülltonnen 1.0 bekomme ich immer diese Errors..

    error 017: undefined symbol "CreateDynamicObject"
    C:\Users\wieme\Desktop\Müll.txt(120) : error 017: undefined symbol "CreateDynamicSphere"
    C:\Users\wieme\Desktop\Müll.txt(209) : error 017: undefined symbol "IsPlayerInDynamicArea"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    Danke im Vorraus!

  • Hallo, kann mir jemand helfen? beim compilen mit dem Filterscript: Interaktive Mülltonnen 1.0 bekomme ich immer diese Errors..
    error 017: undefined symbol "CreateDynamicObject"C:\Users\wieme\Desktop\Müll.txt(120) : error 017: undefined symbol "CreateDynamicSphere"C:\Users\wieme\Desktop\Müll.txt(209) : error 017: undefined symbol "IsPlayerInDynamicArea"Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    Danke im Vorraus!

    Klick Mich

  • Ich kann dir nicht sagen, ob es funktioniert, da ich es logischerweise nicht testen kann.



    Du musst allerdings die Variable gPlayerTeamSelection[] umdeklarieren.

  • ok ERLEDIGT
    das die fehlermeldung war irreführend, problem lag wo anders


    Tag mismatch?! Bitte hilfe >.> bei zeile "format(query ...


    BoughtOwnedCar(playerid,carid) // auto kaufen{ new query[256]; format(query,sizeof(query),"INSERT INTO cars (OwnerID,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",pInfo[playerid][id_db],cInfo[carid][carmodel],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]); mysql_function_query(dbhandle,query,true,"carsavedtoDB","i",carid); return 1;}

  • Hey,


    Ich habe eine Frage wie lasse ich den Checkpoint nach 120 Sekunden Löschen?
    wen der Beamte den Auftrag angenommen hat soll so ein Gametext mit Timer kommen wo es von 120 Sekunden runterzählt?

  • Nach dem du den Checkpoint gesetzt hast Startest du einen TimerEx. [wiki]SetTimerEx[/wiki]
    Dann brauchst du noch eine Globale Veriable zB "new OAMtTimer[MAX_PLAYERS];" und in dem Timer machst du dann "OAmtTimer[playerid] --;" und über einen string lässt du ihn dann per Gametext Anzeigen.
    Sprich:

    new string[64];
    format(string, sizeof(string), "Du hast noch~n~%d Sekunden.", OAmtTimer[playerid]);
    GameTextForPlayer(playerid, string, 988, 1);


    if(OAMtTimer[playerid] <= 0)
    {
    // Hier dann Checkpoint Entfernen
    }


    Das ist eigentlich schon die ganze Magie dahinter. Und eine Abfrage noch zum Überprüfen wenn die Zeit abgelaufen ist.


    Und wenn er im Checkpoint angekommen ist bevor die Zeit abgelaufen ist, Killst du den Timer.


    MfG. Aaron!

    Die Missglückte Persönlichkeit, Ciao!

  • SetTimerEx funktioniert nicht die Seite

  • Nicht auf Funktion Getestet.
    Mit der SA:MP Grundlagen ist dies aber kein Thema.
    Hier ein Beispiel wie es sein könnte!



    new OAmtTest[MAX_PLAYERS];
    new OAmtTestTimer[MAX_PLAYERS];


    else if(strcmp(option, "oamt", true) == 0)
    {
    if(Spieler[playerid][pFraktion] != 6)return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Beamter.");
    if(pServiceOrdnungsamt[pPlayer] == 0)return SendClientMessage(playerid, COLOR_GREY, "Der Spieler benötigt keinen Beamten.");
    if(GetPlayerInterior(pPlayer) > 0)return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist in einem Interior. Ortung nicht möglich.");
    if(GetPlayerVirtualWorld(pPlayer) > 0)return SendClientMessage(playerid, COLOR_GREY, "Der Spieler ist in einem Interior. Ortung nicht möglich.");
    format(string, sizeof(string), "Polizist %s hat deine Meldung entgegengenommen und ist nun auf dem Weg zu dir.", GetName(playerid));
    SendClientMessage(pPlayer, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Du hast den Auftrag von %s angenommen. Du hast 2 Minuten zum Roten Punkt zu fahren.", GetName(pPlayer));
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    GameTextForPlayer(playerid, "~w~anrufer~n~~r~redmarker", 5000, 1);
    pServiceOrdnungsamt[pPlayer] = 0;
    OAmtTest = 120;
    OAmtTestTimer = SetTimerEx("OAmtTimerTest", 988, true, "i", playerid);
    new Float:pos[3];
    GetPlayerPos(pPlayer, pos[0], pos[1], pos[2]);
    SetPlayerCheckpointEx(playerid, pos[0], pos[1], pos[2], 4.0, CP_SERVICEMEDIC, CP_TYPE_MEDIC);
    return 1;
    }

    // Hier dein Timer
    public OAmtTimerTest(playerid)
    {
    OAmtTestTimer[playerid] --;
    new string[64];
    format(string, sizeof(string), "%d", OAmtTest[playerid]);
    GameTextForPlayer(playerid, string, 988, 1);
    if(OAmtTestTimer[playerid] <= 0)
    {
    DisablePlayerCheckpointEx(playerid);
    KillTimer(OAmtTestTimer[playerid]);
    }
    }

    Die Missglückte Persönlichkeit, Ciao!

  • C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\German\gamemodes\GTA.pwn(4011) : error 025: function heading differs from prototype
    C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\German\gamemodes\GTA.pwn(9317) : error 033: array must be indexed (variable "OAmtTest")
    C:\Users\Medion\Desktop\Daten Medion\GTA SA Datein\GTA Scripts\German\gamemodes\GTA.pwn(9318) : error 033: array must be indexed (variable "OAmtTestTimer")




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