[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
  • Beitrag von MGPK-1323 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Es kommt aus irgendeinem Grund immer SERVER: Unknown Command


    ocmd:veh(playerid,params[])
    {
    if(!isAdmin(playerid, 3))return SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    new mID, pID;
    if(sscanf(params,"ui",pID,mID))return SendClientMessage(playerid,DUNKELROT,"[INFO] /veh [playerid] [modelid]");
    if(mID<=400 ||mID>611)return SendClientMessage(playerid,DUNKELROT,"Ungültige Model ID!");
    new Float:xc,Float:yc,Float:zc,Float:rc;
    GetPlayerPos(playerid,xc,yc,zc);
    GetPlayerFacingAngle(playerid,rc);
    createPlayerCar(pID,mID,xc,yc,zc,rc);
    return 1;
    }
    Aber wenn ich z.B /veh [SPIELERID] [FahrzeugID] eingebe kommt Ungültige Model ID!


    aber anders rum SERVER: Unknown Command

  • Aber wenn ich z.B /veh [SPIELERID] [FahrzeugID] eingebe kommt Ungültige Model ID!

    Nutzt du das sscanf Plugin oder nur die Funktion im Code?
    Und was genau gibst du ein? Liegt die ModelID (!) zwischen 400 und 611?


    Versuche es eventuell mal testweise so:
    if(sscanf(params,"ii",pID,mID))return SendClientMessage(playerid,DUNKELROT,"[INFO] /veh [playerid] [modelid]");


    Falls das nicht hilft, poste bitte die createPlayerCar Funktion.

  • @Jeffry mit dem if(sscanf(params,"ii",pID,mID))return SendClientMessage(playerid,DUNKELROT,"[INFO] /veh [playerid] [modelid]");
    hat es funktioniert danke dir



    /edit habe ein weiteres Problem:


    Ingame sieht es so aus:
    http://prntscr.com/gongh5


    und so sieht meine Datenbank aus:
    http://prntscr.com/gonh6x


    so sieht mein pDataEnum aus:


    enum pDataEnum
    {
    p_id,
    bool:pLoggedIn,
    pName[MAX_PLAYER_NAME],
    pLevel,
    pMoney,
    pKills,
    pDeaths,
    pAlevel,
    pFraktion,
    pRank,
    pPerso,
    pSpawnchange,
    pPayday,
    pXP,
    pXPMax,
    pCarlic,
    pBikelic,
    pFlylic,
    pWaffenlic,
    pBoatlic,
    pDrugs,
    pStartbonus,
    pMats,
    pMatpacks,
    pBusfahrer,
    pLandwirt,
    pStrassenfeger,
    pDrogendealer,
    pHure,
    pWaffendealer
    }


    und so sieht mein gesamter /set code aus:


    ocmd:set(playerid,params[])
    {
    if(!isAdmin(playerid, 3))return SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    new pID,string[128],cmd[30],menge;
    if(sscanf(params,"usi",pID,cmd,menge))
    {
    SendClientMessage(playerid,GELB,"[INFO]: /set [playerid/Name][Aktion] [Menge/Betrag]");
    return SendClientMessage(playerid,GRAU,"[Bank/Level/Skin/Geld/Respektpunkte/Drogen/Mats]");
    }
    if(strcmp(cmd,"Level",true) == 0)
    {
    if(!isAdmin(playerid, 3))return SendClientMessage(playerid,DUNKELROT,"Dein Adminlevel ist zu Niedrig!");
    if(menge<1||menge>100)return SendClientMessage(playerid,GELB,"/set Level [playerid/Name][Level 1-100]");
    format(string,sizeof(string),"AdmCmd: Der Admin %s (ID:%i) hat dein Level auf %i gesetzt.",SpielerName(playerid),playerid,menge);
    SendClientMessage(pID,HELLBLAU,string);
    format(string,sizeof(string),"AdmCmd: Du hast dem Spieler %s (ID:%i) das Level auf %i gesetzt.",SpielerName(pID),pID,menge);
    SendClientMessage(playerid,HELLBLAU,string);
    SetPlayerLevel(pID,menge);


    SaveUserStats(pID);
    }
    if(strcmp(cmd,"Skin",true) == 0)
    {
    if(menge<1||menge>311)return SendClientMessage(playerid,GELB,"/set Skin [playerid/Name][1-311]");
    SetPlayerSkin(pID,menge);
    format(string,sizeof(string),"AdmCmd: Der Admin %s (ID: %i) hat dir den Skin %i zugewiesen.",SpielerName(playerid),playerid,menge);
    SendClientMessage(pID,HELLBLAU,string);
    format(string,sizeof(string),"AdmCmd: Du hast dem Spieler %s (ID:%i) den Skin %i zugewiesen.",SpielerName(pID),pID,menge);
    SendClientMessage(playerid,HELLBLAU,string);
    SaveUserStats(pID);
    }
    if(strcmp(cmd,"Geld",true) == 0)
    {
    if(menge<1||90000000)return SendClientMessage(playerid,GELB,"/set Geld [playerid/Name][1-90000000]");
    ResetPlayerMoney(pID);
    GivePlayerMoney(pID, menge);
    PlayerInfo[pID][pMoney] = menge;
    format(string, sizeof(string), "AdmCmd: %s hat dein Geld auf $%i gesetzt.", SpielerName(playerid), menge);
    SendClientMessage(pID, HELLBLAU, string);
    format(string, sizeof(string), "AdmCmd: Du hast %s den Geldbetrag auf $%i gesetzt.", SpielerName(pID), menge);
    SendClientMessage(playerid, HELLBLAU, string);
    SaveUserStats(pID);
    }
    if(strcmp(cmd,"Drogen",true) == 0)
    {
    PlayerInfo[pID][pDrugs] += menge;
    format(string,sizeof(string),"AdmCmd: Der Admin %s (ID:%i) hat dir deine Drogen auf %i gesetzt.",SpielerName(playerid),playerid,menge);
    SendClientMessage(pID,HELLBLAU,string);
    format(string,sizeof(string),"AdmCmd: Du hast dem Spieler %s (ID:%i) die Drogen auf %i gesetzt.",SpielerName(pID),pID,menge);
    SendClientMessage(playerid,HELLBLAU,string);
    SaveUserStats(pID);
    }
    if(strcmp(cmd,"Mats",true) == 0)
    {
    PlayerInfo[pID][pMats] = menge;
    format(string,sizeof(string),"AdmCmd: Der Admin %s (ID:%i) hat dir deine Mats auf %i gesetzt.",SpielerName(playerid),playerid,menge);
    SendClientMessage(pID,HELLBLAU,string);
    format(string,sizeof(string),"AdmCmd: Du hast dem Spieler %s (ID:%i) die Mats auf %i gesetzt.",SpielerName(pID),pID,menge);
    SendClientMessage(playerid,HELLBLAU,string);
    SaveUserStats(pID);
    }
    return 1;
    }


    und da wäre noch etwas wenn ich /set 0 Geld [menge] angebe sieht so aus:


    http://prntscr.com/gonhtq


    kommt halt immer diese Nachricht die im Chat auf dem Screenshot ist.


    Mfg.

    Einmal editiert, zuletzt von KinGRaPTiiC ()

    • Offizieller Beitrag

    /edit habe ein weiteres Problem:


    Ingame sieht es so aus:
    prntscr.com/gongh5


    und so sieht meine Datenbank aus:
    prntscr.com/gonh6x

    Speicherst du die Drogen denn bei SaveUserStats auch in die Datenbank?


    Weiterhin ist dein Drogenbefehl ein wenig komisch.
    Du schreibst in der Nachricht, dass die Drogen gesetzt werden format(string,sizeof(string),"AdmCmd: Der Admin %s (ID:%i) hat dir deine Drogen auf %i gesetzt.",SpielerName(playerid),playerid,menge);, du addiest die Menge allerdings zu der derzeitigen Menge hinzu: PlayerInfo[pID][pDrugs] += menge;


    Richtig wäre es so: PlayerInfo[pID][pDrugs] = menge;

  • hier die funktion:


    stock SaveUserStats(playerid)
    {
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    new query[350];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d',\
    alevel = '%d', fraktion = '%d', rank = '%d', perso = '%d', spawnchange = '%d', payday = '%d', xp = '%d', xpmax = '%d',\
    carlic = '%d', bikelic = '%d',flylic = '%d',waffenlic = '%d',boatlic = '%d',drugs = '%d',mats = '%d',drogendealer = '%d',\
    waffendealer = '%d',busfahrer = '%d',landwirt = '%d',hure = '%d',straßenfeger = '%d',matpacks = '%d', startbonus = '%d',\
    WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths],
    PlayerInfo[playerid][pAlevel], PlayerInfo[playerid][pFraktion], PlayerInfo[playerid][pRank], PlayerInfo[playerid][pPerso],PlayerInfo[playerid][pSpawnchange],
    PlayerInfo[playerid][pPayday],PlayerInfo[playerid][pXP],PlayerInfo[playerid][pXPMax],PlayerInfo[playerid][pCarlic],PlayerInfo[playerid][pBikelic],PlayerInfo[playerid][pFlylic],PlayerInfo[playerid][pWaffenlic],PlayerInfo[playerid][pBoatlic],
    PlayerInfo[playerid][pDrugs], PlayerInfo[playerid][pMats],PlayerInfo[playerid][pDrogendealer],PlayerInfo[playerid][pWaffendealer],PlayerInfo[playerid][pBusfahrer],
    PlayerInfo[playerid][pLandwirt],PlayerInfo[playerid][pHure],PlayerInfo[playerid][pStrassenfeger],PlayerInfo[playerid][pMatpacks],PlayerInfo[playerid][pStartbonus],
    PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query);
    return 1;
    }


    und das ist bei logs unter errors:


    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'ffraktionsname' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fdrugs' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fmats' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'ffraktionsname' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fdrugs' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fmats' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'ffraktionsname' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fdrugs' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fmats' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'ffraktionsname' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fdrugs' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fmats' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: invalid reference passed
    [15:47:33] [plugins/mysql] cache_get_value_name_int: invalid reference passed
    [15:47:33] [plugins/mysql] cache_get_value_name_int: invalid reference passed
    [15:47:33] [plugins/mysql] cache_get_value_name_int: invalid reference passed
    [15:47:33] [plugins/mysql] cache_get_value_name_int: invalid reference passed
    [15:47:33] [plugins/mysql] cache_get_value_name_int: invalid reference passed
    [15:48:40] [plugins/mysql] mysql_format: destination size '350' is too small
    [15:48:40] [plugins/mysql] error #1065 while executing query "": Query was empty
    [15:49:47] [plugins/mysql] mysql_format: destination size '350' is too small
    [15:49:47] [plugins/mysql] error #1065 while executing query "": Query was empty
    [15:49:55] [plugins/mysql] mysql_format: destination size '350' is too small
    [15:49:56] [plugins/mysql] error #1065 while executing query "": Query was empty

    • Offizieller Beitrag

    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'ffraktionsname' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fdrugs' not found
    [15:47:33] [plugins/mysql] cache_get_value_name_int: field 'fmats' not found

    Du müsstest mal in deiner Mysql-Tabelle die drei Spalten hinzufügen (ffraktionsname fdrugs fmats)
    Weiterhin sagt folgendes:

    [15:49:55] [plugins/mysql] mysql_format: destination size '350' is too small
    [15:49:56] [plugins/mysql] error #1065 while executing query "": Query was empty

    Das die new query[350]; zu klein ist, du müsstest den Wert hochsetzten, danach sollte es gehen


  • Hallo, Ich habe das Problem wen ich mit der Fraktion ID 13 /open mache Passiert nichts was mache ich falsch?

  • Hallo, Ich habe das Problem wen ich mit der Fraktion ID 13 /open mache Passiert nichts was mache ich falsch?

  • Beim IsPlayerConnected hat das ! gefehlt.
    Und die Abfrage auf Fraktion 13 war falsch herum, die habe ich negiert:
    ocmd:open(playerid, params[])
    {
    if(!IsPlayerConnected(playerid)) return 1;
    if(IsPlayerInRangeOfPoint(playerid, 2.0, 2495.2378,-1690.5319,14.7656)) //Grove Street Eingang
    {
    if(PlayerInfo[playerid][pMember] != 13 && PlayerInfo[playerid][pLeader] != 13) return GameTextForPlayer(playerid, "~r~Du hast keinen~n~Schluessel.", 5000, 6);
    if(gGroveDoor == 0)
    {
    gGroveDoor = 1;
    GameTextForPlayer(playerid, "~r~Abgeschlossen", 3000, 6);
    }
    else if(gGroveDoor == 1)
    {
    gGroveDoor = 0;
    GameTextForPlayer(playerid, "~g~Aufgeschlossen", 3000, 6);
    }
    }
    else if(IsPlayerInRangeOfPoint(playerid, 2.0, 2807.619873,-1171.899902,1025.570312)) //Grove Street Ausgang
    {
    if(PlayerInfo[playerid][pMember] != 13 && PlayerInfo[playerid][pLeader] != 13) return GameTextForPlayer(playerid, "~r~Du hast keinen~n~Schluessel.", 5000, 6);
    if(gGroveDoor == 0)
    {
    gGroveDoor = 1;
    GameTextForPlayer(playerid, "~r~Abgeschlossen", 3000, 6);
    }
    else if(gGroveDoor == 1)
    {
    gGroveDoor = 0;
    GameTextForPlayer(playerid, "~g~Aufgeschlossen", 3000, 6);
    }
    }
    return 1;
    }

  • Egal was für Befehle ich InGame schicke, es kommt nichts. Ich habe keinerlei Errors/Warnings .


  • Langsam Nervt es mich.....
    Raus komme ich aber Rein komme ich nicht mehr was das -.-?


    @Jeffry

  • Hey ich habe mal eine Frage und zwar möchte ich ein Dice und einen Diceinvite befehl erstellen und ich verstehe unter anderem nicht wie ich eine zufällige zahl von 1-6 mache und wie ich es mache das wenn die person /diceinvite [ID] [Preis] [Runden 1-3] eingebe das der andere Spieler ein Dialog bekommt wodrin er sieht um Wieviel und wieviele runden


    PS ich habe noch nicht angefangen aufgrund da ich halt nicht weiß wie man eine random zahl generieren lässt.


    mfg

  • Ich will das ganz gern verstehen deswegen frag ich dich jetzt einfach mal warum dieses +1? das mit der 6 kann ich ja verstehen...


    Meine frage jetzt noch wenn ich z.B einen /bankrob befehl mache soll er einen Maximal Betrag von 120k bekommen heißt das es müsste so aussehen?


    new beute = random(120000)+1;


    @Kaliber



    So habe nun einiges gemacht nun weiß ich einfach nicht weiter, weiß nichtmal ob das alles richtig ist aber habe das versucht wie ich es jetzt verstanden habe, vielleicht kann mal jemand drüber schauen aber es ist bestimmt noch lange nicht fertig. Das ist das was ich jetzt alles habe:


    ocmd:dice(playerid,params[])
    {
    if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,ROT,"Du kannst den Befehl noch nicht benutzen!");
    new string[64];
    new zahl = random(6)+1;
    format(string,sizeof(string), "Der Spieler %s würfelte die Zahl %i",SpielerName(playerid),zahl);
    SendClientMessage(playerid,0xBE44FFFF,string);
    return 1;
    }


    ocmd:diceinvite(playerid,params[])
    {
    if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid,ROT,"Du kannst den Befehl noch nicht benutzen!");
    new pID, runden, string[128], einsatz;
    if(sscanf(params,"uii",pID,runden,einsatz))return SendClientMessage(playerid,GELB,"[INFO]: /diceinvite [playerid/Name][Runden 1-3] [Menge/Betrag]");
    {
    format(string,sizeof(string),"Der Spieler %s hat dich zu %i Runde/n um %i$ eingeladen!",SpielerName(playerid),runden,einsatz);
    SendClientMessage(playerid,HELLBLAU,string);
    SendClientMessage(playerid,HELLBLAU,"Um die einladung anzunehmen tippe: /accept diceinvite");
    }
    return 1;
    }


    ocmd:accept(playerid,params[])
    {
    new cmd;
    if(strcmp(cmd,"dice",true) == 0)
    {
    SendClientMessage(playerid,GELB,"Die Würfelrunde wird nun gestartet, viel Glück!");
    }
    return 1;
    }

    2 Mal editiert, zuletzt von KinGRaPTiiC ()

  • deswegen frag ich dich jetzt einfach mal warum dieses +1?

    Die Funktion random(x) gibt dir eine zufällige Zahl in dem Bereich von [0, ..., x-1] wieder.


    Da ein Würfel aber keine 0 als Zahl hat und auch eine 6 musst du dementsprechend noch +1 machen, damit das Intervall von [1, ..., x] geht :)


    new beute = random(120000)+1;


    Hier könnte der User eine Beute von 1$ - 120.000$ machen, korrekt.


    Bei deinem Code, bin ich gerade zu faul dir das zu schreiben, sry xD

    ast2ufdyxkb1.png


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