Beiträge von Kaliber

    hab ich ja


    Schreib deinen Befehl mal so:


    ocmd:sduty(playerid)
    {
    if(!isPlayerAnAdmin(playerid,1))return SCM(playerid, COLOR_FADE3,"Diesen Befehl kannst du nicht nutzen.");
    new adminname[30];
    switch(GetPVarInt(playerid,"Adminlevel")) {
    case 0:{adminname="Nein";}
    case 1:{adminname="{00FF5A}Supporter";}
    case 2:{adminname="{572B54}Moderator";}
    case 3:{adminname="{0000FF}Administrator";}
    case 4:{adminname="{FF0000}Server Manager";}
    case 5:{adminname="{FF0000}Projektleiter";}
    case 6:{adminname="{FF0000}Projektleiter";}
    }
    if(GetPVarInt(playerid,"AdminDuty"))
    {
    SetPlayerColor(playerid,WHITE);
    s_SetPlayerHealth(playerid,GetPVarFloat(playerid,"healsave"));
    DeletePVar(playerid,"AdminDuty"),DeletePVar(playerid,"healsave");
    Delete3DTextLabel(SDUTY[playerid]),TextDrawHideForPlayer(playerid,ADUTY);
    if(lsduty[playerid] == 1) SetPlayerColor(playerid,0x0055FFFF);
    if(armyduty[playerid] == 1) SetPlayerColor(playerid,0x006400FF);
    if(medicduty[playerid] == 1) SetPlayerColor(playerid,0xFF005FFF);
    if(oamtduty[playerid] == 1) SetPlayerColor(playerid,0x53969cFF);
    return 1;
    }
    new Float:heal,str[145], name[MAX_PLAYER_NAME];
    GetPlayerHealth(playerid,heal);
    SetPVarFloat(playerid,"healsave",heal);
    SetPlayerColor(playerid,ROT),s_SetPlayerHealth(playerid,200);
    GetPlayerName (playerid, name, MAX_PLAYER_NAME);
    format(str, 145, "%s ist jetzt Duty.", name);
    for(new i; i < MAX_PLAYERS; i++) if(i!= playerid) SendClientMessage(i, ROT, str);
    SetPVarInt(playerid,"AdminDuty",1);
    TextDrawShowForPlayer(playerid,ADUTY);
    switch(GetPVarInt(playerid,"Adminlevel")) {
    case 1: SDUTY[playerid] = Create3DTextLabel("*Supporter onduty*",AdminGelb,30.0,40.0,50.0,40.0,0);
    case 2: SDUTY[playerid] = Create3DTextLabel("*Moderator onduty*",AdminGrun,30.0,40.0,50.0,40.0,0);
    case 3: SDUTY[playerid] = Create3DTextLabel("*Administrator onduty*",AdminBlau,30.0,40.0,50.0,40.0,0);
    case 4: SDUTY[playerid] = Create3DTextLabel("*Server Manager onduty*",AdminRot,30.0,40.0,50.0,40.0,0);
    case 5: SDUTY[playerid] = Create3DTextLabel("*Projektleiter onduty*",AdminRot,30.0,40.0,50.0,40.0,0);
    case 6: SDUTY[playerid] = Create3DTextLabel("*Projektleiter onduty*",AdminRot,30.0,40.0,50.0,40.0,0);
    }
    return Attach3DTextLabelToPlayer(SDUTY[playerid], playerid, 0.0, 0.0, 0.4);
    }


    mfg. :thumbup:

    Destroy und neu erstellen ;)
    Natürlich erst mit GetObjectPos die Koordinaten raussuchen


    Um Gottes Willen, nein nicht so machen!


    Dadurch bricht EditObject ab und alles hängt.


    Mach es einfach so:


    public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
    {
    if(!playerobject)
    {
    if(!IsValidObject(objectid)) return 1;
    MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
    }
    return 1;
    }


    mfg. :thumbup:

    Dazu sollte man noch sagen, das man AObjectID nicht einfach drin stehen lassen kann


    Doch natürlich, wenn man ein Objekt vorher erstellt hat (so wie ich es beschrieben habe), kann man das genau so lassen ;)


    Das Objekt welches man erstellt hat, gibt doch die objektid zurück, die in dieser Variable gespeichert wird und auf diese man zugreift um es zu editieren :)


    mfg. :thumbup:

    1. Musst du das Enum über deiner Variablen Deklaration stehen, sprich so:


    enum AdminObjectsInfo
    {
    AObjectID,
    Float:AObjectX,
    Float:AObjectY,
    Float:AObjectZ,
    ANewsObject
    };
    new AdminObjects[MAX_PLAYERS][AdminObjectsInfo];


    2. Musst du die Variable erstmal initialisieren.


    AdminObjects[playerid][AObjectID] = CreateObject(...); //Hier erstmal das Objekt, welches du dann später editieren willst.


    3. Und dann kannst du auf diesen Wert zugreifen:


    if(!strcmp(cmdtext, "/oedit", true))
    {
    EditObject(playerid, AdminObjects[playerid][AObjectID]);
    SendClientMessage(playerid, 0xFFFFFFFF, "SERVER: You can now edit the object!");
    return 1;
    }


    mfg. :thumbup:

    Ja, mehrere Sachen, schreib das so:


    Tore[0][TorID][0] = CreateObject(987, -1522.80005, 482.5, 6.2, 0, 0, 180);//Army Oben
    Tore[1][TorID][1] = CreateObject(980, -1631.7, 688.20001, 8.5, 0, 0, 0); //SFPD


    //Dann das so schreiben:
    if(newkeys & KEY_CROUCH) {
    for(new Gateid = 0; Gateid < sizeof(Tore); Gateid++) {
    if(!IsPlayerInRangeOfPoint(playerid,20.0, Tore[Gateid][CloseX],Tore[Gateid][CloseY],Tore[Gateid][CloseZ])) continue;
    if(SpielerInfo[playerid][pTeam] != Tore[Gateid][Gateteam]) break;
    MoveObject(Tore[Gateid][TorID], Tore[Gateid][OpenX], Tore[Gateid][OpenY], Tore[Gateid][OpenZ], 5);
    SendClientMessage(playerid,tortext, Tore[Gateid][Text]);
    SetTimer("CloseTor", 8000, 0);
    }
    }


    mfg. :thumbup:

    Muss ich da nicht noch was machen?


    Ja, einfach so:


    public OnPlayerEnterDynamicArea(playerid, areaid) {
    if(areaid == ADAC[0])
    {
    SendClientMessage(playerid,-1,"Zone betreten");
    }
    return 1;
    }


    Solange du nur 1ne Zone hast, kannst du es lassen, aber wenn du mehrere Zonen hast wo unterschiedliche Regeln gelten, dann so :)


    mfg. :thumbup: