Hilfe beo Eventsystem

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
  • Hallo Commonuity!
    Ich mache gerade ein Dynamisches Event-System, aber wenn ich es erstelle und dann mich hin porte portet der mich ganz wo anders hin ?(


    enum event{
    e_name, //Event name
    Float:ex,
    Float:ey,
    Float:ez,
    Float:er,
    eventaktiv[MAX_PLAYERS] = 1
    }


    new eInfo[MAX_PLAYERS][event];


    ocmd:eventan(playerid,params[])
    {
    if(IsAdmin(playerid, 1))
    {
    new ename[64], string[128];
    if(sscanf(params,"s[128]",ename))return SendClientMessage(playerid,GRAU,"Verwendung: /eventan [name]");
    GetPlayerPos(playerid,eInfo[playerid][ex],eInfo[playerid][ey],eInfo[playerid][ez]);
    GetPlayerFacingAngle(playerid,eInfo[playerid][er]);
    format(string,sizeof(string),"Admin %s hat ein Event gestartet. Name: %s",SpielerName(playerid),ename);
    SendClientMessageToAll(CBLAU,"Mit /eventport könnt ihr euch zum Event porten");
    SendClientMessageToAll(CBLAU,string);
    eInfo[playerid][eventaktiv] = 1;
    }
    else
    {
    SendClientMessage(playerid,GRAU,"Fehler: Du bist nicht befugt diesen Befehl zu nutzen.");
    }
    return 1;
    }
    ocmd:eventport(playerid,params[])
    {
    if(eInfo[playerid][eventaktiv])
    {
    new pID, string[128];
    SetPlayerPos(playerid, eInfo[playerid][ex],eInfo[playerid][ey],eInfo[playerid][ez]);
    SendClientMessage(playerid,BLAU,"Du hast dich zum Event geportet");
    format(string,sizeof(string),"%s hat sich zum Event geportet",SpielerName(pID));
    SendAdminMessage(DROT,string);
    }
    else
    {
    SendClientMessage(playerid,DROT,"Es ist kein Event aktiv.");
    }
    return 1;
    }

  • GetPlayerPos(playerid,eInfo[playerid][ex],eInfo[playerid][ey],eInfo[playerid][ez]);


    SetPlayerPos(playerid, eInfo[playerid][ex],eInfo[playerid][ey],eInfo[playerid][ez]);


    ..
    nur der admin der das event erstellt kann dort hin.
    verstehe nicht den sinn von playerid in deinem enum.

  • new getUserID;
    ocmd:eventan(playerid,params[])
    {
    if(IsAdmin(playerid, 1))
    {
    new ename[64], string[128];
    if(sscanf(params,"s[128]",ename))return SendClientMessage(playerid,GRAU,"Verwendung: /eventan [name]");
    GetPlayerPos(playerid,eInfo[playerid][ex],eInfo[playerid][ey],eInfo[playerid][ez]);
    getUserID = playerid;
    GetPlayerFacingAngle(playerid,eInfo[playerid][er]);
    format(string,sizeof(string),"Admin %s hat ein Event gestartet. Name: %s",SpielerName(playerid),ename);
    SendClientMessageToAll(CBLAU,"Mit /eventport könnt ihr euch zum Event porten");
    SendClientMessageToAll(CBLAU,string);
    eInfo[playerid][eventaktiv] = 1;
    }
    else
    {
    SendClientMessage(playerid,GRAU,"Fehler: Du bist nicht befugt diesen Befehl zu nutzen.");
    }
    return 1;
    }
    ocmd:eventport(playerid,params[])
    {
    if(eInfo[playerid][eventaktiv])
    {
    new pID, string[128];
    SetPlayerPos(playerid, eInfo[getUserID][ex],eInfo[getUserID][ey],eInfo[getUserID][ez]);
    SendClientMessage(playerid,BLAU,"Du hast dich zum Event geportet");
    format(string,sizeof(string),"%s hat sich zum Event geportet",SpielerName(pID));
    SendAdminMessage(DROT,string);
    }
    else
    {
    SendClientMessage(playerid,DROT,"Es ist kein Event aktiv.");
    }
    return 1;
    }


    Tround: Nicht fragen warum, einfach nur so das es klappt. Sonst kommen wieder zu viele Fragen.


  • Kriege dort ein Warning,

    Code
    Unbenutzte Variable: "getUserID"


    Und was soll das bitte bringen?

  • Dann schau dir mal das ganze an was ich gemacht habe. Zur Erklärung:
    Da du ja playerid verwendest (warum auch immer) habe ich, wenn das Event gestartet wird die playerid vom ersteller in einer Variable Zischengespeichert um sie nachher wieder zu benutzen.
    Alle Spieler die sich zum event Porten wollen, nehmen jetzt die Position die Zwischengespeichert wurde von dem spiele der es erstellt hat. (getUserID)

  • Okay habe es nun verstanden aber ich spawne immer noch da als wie vorher.


    ocmd:eventan(playerid,params[])
    {
    new getUserID;
    if(IsAdmin(playerid, 1))
    {
    new ename[64], string[128];
    if(sscanf(params,"s[128]",ename))return SendClientMessage(playerid,GRAU,"Verwendung: /eventan [name]");
    GetPlayerPos(playerid,eInfo[getUserID][ex],eInfo[getUserID][ey],eInfo[getUserID][ez]);
    getUserID = playerid;
    GetPlayerFacingAngle(playerid,eInfo[getUserID][er]);
    format(string,sizeof(string),"Admin %s hat ein Event gestartet. Name: %s",SpielerName(playerid),ename);
    SendClientMessageToAll(CBLAU,"Mit /eventport könnt ihr euch zum Event porten");
    SendClientMessageToAll(CBLAU,string);
    eInfo[getUserID][eventaktiv] = 1;
    }
    else
    {
    SendClientMessage(playerid,GRAU,"Fehler: Du bist nicht befugt diesen Befehl zu nutzen.");
    }
    return 1;
    }
    ocmd:eventport(playerid,params[])
    {
    if(eInfo[playerid][eventaktiv])
    {
    new pID, string[128];
    SetPlayerPos(playerid, eInfo[playerid][ex],eInfo[playerid][ey],eInfo[playerid][ez]);
    SendClientMessage(playerid,BLAU,"Du hast dich zum Event geportet");
    format(string,sizeof(string),"%s hat sich zum Event geportet",SpielerName(pID));
    SendAdminMessage(DROT,string);
    }
    else
    {
    SendClientMessage(playerid,DROT,"Es ist kein Event aktiv.");
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • das is sowas von furchtbar ^^
    warum hast du denn getuserid in den befehl eventan mit rein ? die sollte global sein so wie der kollege das oben gepostet hat.


    1. "playerid" ist komplett unnötig für das was du da vorhast.
    2. new ename[64] + if(sscanf(params,"s[128]",ename)) der string ist nur 64 lang und im sscanf haste den mit 128 angegeben.
    3. bei eventan liest du facing angle aus aber bei eventport setzt du den wert nicht.
    4. was aber nicht schlimm ist nur ein tipp von mir.. du musst nicht für jedes if auch ein else haben. du kannst auch direkt returnen wie bei der sscanf zeile.
    z.b. so: if(!IsAdmin(playerid, 1))return SendClientMessage(playerid,GRAU,"Fehler: Du bist nicht befugt diesen Befehl zu nutzen.");

  • habs mal bisschen überarbeitet.. aber keine garantie wie immer


    enum event
    {
    e_name[128], // sollte ja ein string sein deshalb die größe dahinter
    eventaktiv,
    Float:epos[4], // kann man auch die größe angeben (array)
    }
    new eInfo[event]; //playerid unnötig



    ocmd:eventan(playerid,params[])
    {
    new string[128]; // würde dir empfehlen einfach einen string global zu erstellen.. dann musst du nicht immer einen erstellen in jedem befehl.
    if(!IsAdmin(playerid,1))return SendClientMessage(playerid,GRAU,"Fehler: Du bist nicht befugt diesen Befehl zu nutzen."); //kann man direkt returnen
    if(sscanf(params,"s[128]",eInfo[e_name]))return SendClientMessage(playerid,GRAU,"Verwendung: /eventan [name]"); // "s[größe vom string]" nicht irgendwas random eingeben und den namen vom event kann man auch direkt einspeichern mit sscanf. brauchste kein extra string
    GetPlayerPos(playerid,eInfo[epos][0],eInfo[epos][1],eInfo[epos][2]);
    GetPlayerFacingAngle(playerid,eInfo[epos][3]);
    format(string,sizeof(string),"Admin %s hat ein Event gestartet. Name: %s",SpielerName(playerid),eInfo[e_name]);
    SendClientMessageToAll(CBLAU,string);
    SendClientMessageToAll(CBLAU,"Mit /eventport könnt ihr euch zum Event porten.");
    eInfo[eventaktiv]=1;
    return 1;
    }
    ocmd:eventport(playerid,params[])
    {
    new string[128];
    if(!eInfo[eventaktiv])return SendClientMessage(playerid,DROT,"Es ist kein Event aktiv.");
    SetPlayerPos(playerid,eInfo[epos][0],eInfo[epos][1],eInfo[epos][2]);
    SetPlayerFacingAngle(playerid,eInfo[epos][3]); //facingangle haste vergessen gehabt
    format(string,sizeof(string),"Du hast dich zum Event %s geportet.",eInfo[e_name]);
    SendClientMessage(playerid,BLAU,string);
    format(string,sizeof(string),"%s hat sich zum Event geportet.",SpielerName(playerid));
    SendAdminMessage(DROT,string);
    return 1;
    }


  • Danke hat geklappt :)