Beiträge von Manyula

    Hallo,


    ich würde gerne, basierend auf die Sprachauswahl des Spielers, einen Array, bzw. eine entsprechende Spalte eines Arrays durchgehen und random etwas dort auswählen lassen.


    new TrashCan_Items[][][] =
    {
    {"ein Medikit", "a Medikit"},
    {"eine Rüstung", "an Armor"},
    {"ein halbes Brot", "half a bread"},
    {"ein Stück Brot", "a piece of bread"},
    {"eine halbvolle Flasche Wasser", "a half-full bottle of water"},
    {"eine volle Flasche Wasser", "a full bottle of water"},
    {"eine halbe Gurke", "half a cucumber"},
    {"eine Gurke", "a cucumber"},
    {"eine halbe Karotte", "half a carrot"},
    {"eine Karotte", "a carrot"},
    {"eine Ratte", "a rat"},
    {"eine Schlange", "a snake"},
    {"eine Granate", "a grenade"},
    {"ein bisschen Geld", "a little money"},
    {"sehr viel Geld", "very much money"},
    {"einen Baseballschläger", "a baseball bat"},
    {"eine Katana", "a Katana"},
    {"einen Golfschläger", "a golf club"},
    {"einen schleimigen Dildo", "a slimey dildo"}
    };


    Also, wenn der Spieler Deutsch ist, dann soll "random" zufällig NUR von der ersten Spalte die Einträge auswählen, nicht von der zweiten.
    Wie stelle ich das am besten an?

    Ich hab das nun einmal in jeden CMD eingebaut. Das Problem ist nun, dass in der Textausgabe nun beide Zeilen immer geupdatet werden, obwohl nur ein CMD getätigt wurde.


    *leere Zeile*
    *leere Zeile*


    ...wird zu...


    Manyula ~>~ /ls
    Manyula ~>~ /ls


    --------------------------------------------------------------


    EDIT: Ich hab die Lösung gefunden.
    Ich hatte ja nochmals alle Update Funktionen unter dem Callback OnPlayerCommandPerformed, zuzüglich zu denen in den TeleportCMDs.


    Ich bedanke mich für eure Hilfe!

    Ich verstehs nicht ganz.


    Was soll ich dann für Parameter in den function header schreiben? cmdtext[] UND inputtext[]? Oder nochmal eine separate Funktion, die sich nur in dem einen Parameter unterscheidet?


    EDIT: Bzw. wollte ich es so anstellen, dass ich das Ganze direkt in den CMD packe, und nicht unter das Callback.

    Oh, Leichtsinnsfehler...


    Es klappt nun wunderbar, ich bedanke mich!


    -------------------------------------------------------------


    Neues Problem: Ich möchte, dass das Textdraw auf geupdatet wird, wenn ein listitem in einem Dialog ausgeführt wird.
    Nur habe ich leider keine Ahnung, wie ich die stock Funktion da reinbauen soll, wegen "cmdtext[]".


    COMMAND:ls(playerid, params[])
    {
    AddTeleport(playerid, 2492.7268, -1668.3849, 13.3438, WEST, 2492.7268, -1668.3849, 13.3438, WEST, 200, true, true, 0, 0);
    return 1;
    }


    stock UpdateMSG(playerid, cmdtext[])
    {
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(Line2, sizeof(Line2), Line1);
    format(Line1, sizeof(Line1), "~b~~h~~h~%s ~>~ ~g~~h~%s", pName, cmdtext);

    new string[100];
    format(string, sizeof(string), "%s~n~%s", Line1, Line2);
    TextDrawSetString(TeleportsTD, string);
    return 1;
    }

    Guten Morgen,


    ich hab das hier mal provisorisch gescriptet, und mit Absicht auch etwas umständlicher, damit ich die Logik dahinter verstehe, aber so recht klappen will das nicht.
    Mein Ziel ist es HP und AP in die Schadensberechnung mit einzubeziehen.


    switch(weaponid)
    {
    case BRASS_KNUCKLES:
    {
    new Float:HP = GetPlayerHealth(playerid, HP),
    Float:AP = GetPlayerArmour(playerid, AP),
    Float:DMG = 5;


    if(AP != 0)
    {
    if(DMG > AP)
    {
    SetPlayerArmour(playerid, 0);
    DMG = DMG - AP;
    SetPlayerHealth(playerid, HP - DMG);
    }
    else if(DMG <= AP) SetPlayerArmour(playerid, HP - DMG);
    else if(DMG == AP) SetPlayerArmour(playerid, 0);
    }
    else SetPlayerHealth(playerid, HP - DMG);
    }
    case KATANA:
    {
    new Float:HP = GetPlayerHealth(playerid, HP),
    Float:AP = GetPlayerArmour(playerid, AP),
    Float:DMG = 40;

    if(AP != 0)
    {
    if(DMG > AP)
    {
    SetPlayerArmour(playerid, 0);
    DMG = DMG - AP;
    SetPlayerHealth(playerid, HP - DMG);
    }
    else if(DMG <= AP) SetPlayerArmour(playerid, HP - DMG);
    else if(DMG == AP) SetPlayerArmour(playerid, 0);
    }
    else SetPlayerHealth(playerid, HP - DMG);
    }
    case KNIFE:
    {
    new Float:HP = GetPlayerHealth(playerid, HP),
    Float:AP = GetPlayerArmour(playerid, AP),
    Float:DMG = 15;


    if(AP != 0)
    {
    if(DMG > AP)
    {
    SetPlayerArmour(playerid, 0);
    DMG = DMG - AP;
    SetPlayerHealth(playerid, HP - DMG);
    }
    else if(DMG <= AP) SetPlayerArmour(playerid, HP - DMG);
    else if(DMG == AP) SetPlayerArmour(playerid, 0);
    }
    else SetPlayerHealth(playerid, HP - DMG);
    }


    Kompilieren will es zwar, aber, wenn ich z.B. mit einer Katana angreife, stirbt der Spieler sofort.
    Wo liegt mein Denkfehler?

    Gehookter Part (Include)
    new Line1[64];
    new Line2[64];


    public OnPlayerCommandPerformed(playerid, cmdtext[], success)
    {
    if(!strcmp(cmdtext, "/ls", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/skate", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/bank1", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/bank2", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/transls", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sc", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/market", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/film", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/lsmc", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/lsa", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/ammuls", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/beach", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sf", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sfa", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/bank3", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/ammusf", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/sfm", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/ct", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/mh", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/jizzy", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/pier", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/golfsf", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/lv", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/satellite", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/aa", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/chilliad", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/gfarm", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/gl", true)) TeleportMessages(playerid, cmdtext);
    if(!strcmp(cmdtext, "/pine", true)) TeleportMessages(playerid, cmdtext);
    return MSG_OnPlayerCommandPerformed(playerid, cmdtext, success); //Zeile 35
    }


    forward MSG_OnPlayerCommandPerformed(playerid, cmdtext, success);
    #if defined _ALS_OnPlayerCommandPerformed
    #undef OnPlayerCommandPerformed
    #else
    #define _ALS_OnPlayerCommandPerformed
    #endif
    #define OnPlayerCommandPerformed MSG_OnPlayerCommandPerformed


    Hauptscript
    public OnPlayerCommandPerformed(playerid, cmdtext[], success) //Zeile 1058


    error 035: argument type mismatch (argument 2) //Zeile 35
    function heading differs from prototype //Zeile 1058

    Hallöchen popöchen,


    zunächst einmal ist mir vollkommen klar, dass folgender Code Quark ist, nur bin ich mir über die Vorgehensweise noch nicht so ganz im Klaren...


    new Line1[64];
    new Line2[64];


    public OnPlayerCommandPerformed(playerid, cmdtext[], success)
    {
    if(cmdtext == "/ls") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/skate") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/bank1") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/bank2") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/transls") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sc") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/market") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/film") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/lsmc") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/lsa") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/ammuls") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/beach") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sf") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sfa") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/bank3") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/ammusf") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/sfm") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/ct") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/mh") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/jizzy") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/pier") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/golfsf") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/lv") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/satellite") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/aa") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/chilliad") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/gfarm") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/gl") TeleportMessages(playerid, cmdtext);
    if(cmdtext == "/pine") TeleportMessages(playerid, cmdtext);
    }


    stock TeleportMessages(playerid, cmdtext[])
    {
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(Line2, sizeof(Line2), Line1)
    format(Line1, sizeof(Line1), "%s ~>~ /%s", pName, cmdtext); //cmdtext???

    new string[200];
    format(string, sizeof(string), "%s~n~%s", Line1, Line2);
    TextDrawSetString(TeleportsTD, string);
    return 1;
    }


    Wenn ich es so stehen lasse, bekomme ich jede Menge "array must be indexed (variable "cmdtext")".


    Das System sieht folgendermaßen aus.


    Das hier...
    Manyula ~>~ /LS
    * zunächst leerer String*


    ...wird dazu.
    Testperson ~>~ /Chilliad
    Manyula ~>~ /LS

    naja, du hast zwei Möglichkeiten: entweder du saugst dir alles aus den Fingern und scriptest immer was dir so neues einfällt und verfeinerst deine Systeme langsam, oder du konzipierst alles im Voraus, was die wesentlich klügere Variante ist. Ich muss sagen, als Anfänger ein Loginsystem zu schreiben ist echt schwierig, also orientier dich an einer passenden Vorlage. Schreibe die User CMDs und entwickle das Admin System mitsamt CMDs. Dann gehts z.B. an die Spawncars, Pickups und Checkpoints...
    Eigentlich muss jeder für sich selbst entscheiden, wie er anfängt. Zudem hängt das auch ganz davon ab, was du scripten möchtest.

    Oh natürlich, ich hab vollkommen vergessen, dass ich zwei verschiedene Timer habe.
    Und ja, es ist gewollt.
    EndSpawnProtection gibt die HP und AP zurück, die der Spieler vor der Spawnprotection hatte, also, wenn ein Spieler sich mit 50HP portet, wird er für 3 Sekunden in die Spawnprotection mit 99999HP gesetzt, und anschließen werden die 50HP in der Abbruchbedingung des Timers wieder zurück gegeben.
    forward EndSpawnProtection(playerid);
    public EndSpawnProtection(playerid)
    {
    if(0 < PlayerHPandAP[playerid][health] < 100) ReturnPlayerHPandAP(playerid);
    else SetPlayerHealth(playerid, 100);

    if(!InProtectionMode[playerid]) return 1;
    else InProtectionMode[playerid] = false;

    DestroyDynamic3DTextLabel(SpawnProtectionInfo[playerid]);
    return 1;
    }


    EndGodMode unterscheidet sich im HP und AP Aspekt: hier werden 100HP zurückgegeben. EndGodMode ist spezifisch für DMs gedacht, da hier immer 100HP zurückgegeben werden.
    forward EndGodMode(playerid);
    public EndGodMode(playerid)
    {
    if(!InProtectionMode[playerid]) return 1;
    else InProtectionMode[playerid] = false;
    SetPlayerHealth(playerid, 100);
    return 1;
    }


    Ich hab mir auch schon überlegt beides in einen Timer zu packen, eben mit if-Abfragen zur virtuellen Welt...

    Okay, das ganze funktioniert nun zwar in der virtuellen Welt 0, aber in allen ab 1+ nicht mehr. Da will das Label nun nicht verschwinden.
    Ist es normal, dass man ein Label, dass gerade erst erstellt wurde erst sieht, wenn man sich bewegt?

    Hallöchen,


    wenn ein Spieler sich teleportiert, soll für kurze Zeit, solange die Spawnprotection aktiv ist, ein Label erscheinen. Nun ist es aber so, dass es nach dem 2x Porten immer besteht und nicht mehr zerstört wird.


    Hier ist die SpawnProtectionInfo von Relevanz.
    stock SetSpawnProtection(playerid)
    {
    SetPlayerHealth(playerid, 99999);
    InProtectionMode[playerid] = true;

    //Erstellen des Labels für playerid
    SpawnProtectionInfo[playerid] = CreateDynamic3DTextLabel("SPAWN PROTECTION", C_RED, 0.0, 0.0, 0.0, 50.0, playerid, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0);

    if(GetPlayerVirtualWorld(playerid) == 0) SetTimerEx("EndSpawnProtection", 3000, false, "i", playerid);
    else SetTimerEx("EndGodMode", 3000, false, "i", playerid);
    return 1;
    }


    forward EndSpawnProtection(playerid);
    public EndSpawnProtection(playerid)
    {
    if(0 < PlayerHPandAP[playerid][health] < 100) ReturnPlayerHPandAP(playerid);
    else SetPlayerHealth(playerid, 100);

    InProtectionMode[playerid] = false;

    //Zerstören des Labels als Abbruchbedingung für den Timer
    DestroyDynamic3DTextLabel(SpawnProtectionInfo[playerid]);
    return 1;
    }


    stock AddTeleport(playerid, textDE[], textEN[], Float:PedX, Float:PedY, Float:PedZ, Float:PedA, Float:VehX, Float:VehY, Float:VehZ, Float:VehA, cost, bool:buffer, bool:spawnprotect, bool:msgtoall, worldid = 0, interiorid = 0)
    {
    if(PlayerActionForbidden(playerid)) return 1;
    if(buffer) if(BufferCMD(playerid)) return 1;
    if(GetPlayerMoney(playerid) >= cost)
    {
    if(spawnprotect == true)
    {
    SavePlayerHPandAP(playerid);
    SetSpawnProtection(playerid);
    }

    if(msgtoall == false) return SendLanguageMessage(playerid, C_GOLD, textDE, textEN);
    else if(msgtoall == true) return SendLanguageMessageToAll(C_GOLD, textDE, textEN);


    GivePlayerMoneyEx(playerid, -cost);
    SetPlayerPos(playerid, PedX, PedY, PedZ);
    SetPlayerFacingAngle(playerid, PedA);
    SetVehiclePos(GetPlayerVehicleID(playerid), VehX, VehY, VehZ);
    SetVehicleZAngle(GetPlayerVehicleID(playerid), VehA);
    PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
    SetPlayerVirtualWorld(playerid, worldid);
    SetPlayerInterior(playerid, interiorid);
    SetCameraBehindPlayer(playerid);
    }
    else SendLanguageMessage(playerid, C_RED, "»WARNUNG« Du hast nicht genug Geld!", "»WARNING« You don't have enough money!");
    return 1;
    }


    //==================================================================================================================================================================================================================================


    COMMAND:ls(playerid, params[])
    {
    new stringDE[128],
    stringEN[128],
    pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, sizeof(pName));
    format(stringDE, sizeof(stringDE), "»TELEPORT« {%06x}%s "#C_GOLD_E"hat sich nach Los Santos teleportiert! [/LS]", GetPlayerColor(playerid) >>> 8, pName);
    format(stringEN, sizeof(stringEN), "»TELEPORT« {%06x}%s "#C_GOLD_E"has teleported to Los Santos! [/LS]", GetPlayerColor(playerid) >>> 8, pName);
    AddTeleport(playerid, stringDE, stringEN, 2492.7268, -1668.3849, 13.3438, WEST, 2492.7268, -1668.3849, 13.3438, WEST, 200, true, true, true, 0, 0);
    return 1;
    }

    Hallöchen, liebe Brötchen,


    ich habe eine kleine, aber feine DM Arena gescriptet, in der ich ein internes Event machen möchte. Es handelt sich dabei um einen Waffenspawn, der immer im 3min Abstand vorkommen soll.


    Zunächst erstelle ich einen Array, der die möglichen Spawnpositionen beinhält.
    new Float:RandomSpawnsBF_Minigun[][4] =
    {
    {261.7219, 1807.7024, 25.4985},
    {267.7146, 1895.2715, 25.4985},
    {233.9313, 1934.8359, 25.4985},
    {162.3813, 1933.1227, 25.4985},
    {104.4367, 1901.1390, 25.4985},
    {113.7279, 1814.4298, 25.4985},
    {166.4796, 1850.0391, 25.4985}
    };


    Nun lasse ich alle im DM befindlichen Pickups unter OnGameModeInit erstellen, darunter auch die Minigun, die ich random an einem der in "RandomSpawnsBF_Minigun" angegebenen Spawnpunkte spawnt.
    public OnGameModeInit()
    {
    //9 weitere Waffenpickups (BF_WEAPON[0] bis BF_WEAPON[9])

    new Random = random(sizeof(RandomSpawnsBF_Minigun));
    BF_WEAPON[10] = CreateDynamicPickup(362, 1, RandomSpawnsBF_Minigun[Random][0], RandomSpawnsBF_Minigun[Random][1], RandomSpawnsBF_Minigun[Random][2], 7, -1, -1, 100.0);
    return DM_OnGameModeInit();
    }


    Als nächstes lege ich fest, was passieren soll, wenn die Pickups aufgehoben werden.
    public OnPlayerPickUpDynamicPickup(playerid, pickupid)
    {
    //if-Abfragen für BF_WEAPON[0] bis BF_WEAPON[9]...
    else if(pickupid == BF_WEAPON[10])
    {
    GivePlayerWeapon(playerid, MINIGUN, 300);
    DestroyDynamicPickup(pickupid);
    }
    for(new i; i < 10; i++)
    {
    switch (i)
    {
    case 0..9: if(pickupid == BF_WEAPON[i]) SetTimerEx("PickupRespawn", 30*1000, false, "i", BF_WEAPON[i]); //30s Respawnzeit bei 0 bis 9
    case 10: if(pickupid == BF_WEAPON[i]) SetTimerEx("MinigunRespawn", 3*60*1000, false, "i", BF_WEAPON[i]); //3min Respawnzeit bei 10
    }
    }
    return _OnPlayerPickUpDynamicPickup(playerid, pickupid);
    }


    Timer
    forward PickupRespawn(pickupid);
    public PickupRespawn(pickupid)
    {
    if(pickupid == BF_WEAPON[0]) return BF_WEAPON[0] = CreateDynamicPickup(342, 1, 120.5242, 1934.8777, 22.7578, 7, -1, -1, 100.0); //Grenade
    if(pickupid == BF_WEAPON[1]) return BF_WEAPON[1] = CreateDynamicPickup(342, 1, 279.4142, 1829.5718, 21.4766, 7, -1, -1, 100.0); //Grenade
    if(pickupid == BF_WEAPON[2]) return BF_WEAPON[2] = CreateDynamicPickup(342, 1, 116.2530, 1875.0065, 22.4375, 7, -1, -1, 100.0); //Grenade
    if(pickupid == BF_WEAPON[3]) return BF_WEAPON[3] = CreateDynamicPickup(342, 1, 136.4600, 1874.9723, 22.4375, 7, -1, -1, 100.0); //Grenade
    if(pickupid == BF_WEAPON[4]) return BF_WEAPON[4] = CreateDynamicPickup(360, 1, 189.9938, 1940.4785, 17.6406, 7, -1, -1, 100.0); //Heat Seeker
    if(pickupid == BF_WEAPON[5]) return BF_WEAPON[5] = CreateDynamicPickup(360, 1, 206.2279, 1932.8312, 23.2422, 7, -1, -1, 100.0); //Heat Seeker
    if(pickupid == BF_WEAPON[6]) return BF_WEAPON[6] = CreateDynamicPickup(360, 1, 144.0044, 1850.1791, 25.2610, 7, -1, -1, 100.0); //Heat Seeker
    if(pickupid == BF_WEAPON[7]) return BF_WEAPON[7] = CreateDynamicPickup(360, 1, 211.4619, 1809.8109, 25.1172, 7, -1, -1, 100.0); //Heat Seeker
    if(pickupid == BF_WEAPON[8]) return BF_WEAPON[8] = CreateDynamicPickup(360, 1, 146.3869, 1907.3638, 26.3924, 7, -1, -1, 100.0); //Heat Seeker
    if(pickupid == BF_WEAPON[9]) return BF_WEAPON[9] = CreateDynamicPickup(360, 1, 197.3199, 1835.0059, 23.2422, 7, -1, -1, 100.0); //Heat Seeker
    return 1;
    }


    forward MinigunRespawn(pickupid);
    public MinigunRespawn(pickupid)
    {
    if(IsValidDynamicPickup(BF_WEAPON[10])) DestroyDynamicPickup(BF_WEAPON[10]);
    if(pickupid == BF_WEAPON[10])
    {
    new Random = random(sizeof(RandomSpawnsBF_Minigun));
    BF_WEAPON[10] = CreateDynamicPickup(362, 1, RandomSpawnsBF_Minigun[Random][0], RandomSpawnsBF_Minigun[Random][1], RandomSpawnsBF_Minigun[Random][2], 7, -1, -1, 100.0);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerVirtualWorld(i) == 7)
    {
    GameTextForPlayer(i, "Minigun Event!", 5000, 4);
    }
    }
    }
    return 1;
    }


    Das Ganze funktioniert dennoch nicht. Die Minigun wird zunächst erstellt, aber sobald ich sie aufnehme, respawnt sie nicht.

    Die erstelle ich seperat in einer include.


    #define MAX_TELEPORT_LABELS 29


    new Text3D:TeleportLabel[MAX_PLAYERS][MAX_TELEPORT_LABELS];


    public OnGameModeInit()
    {
    for(new i = 0; i < MAX_TELEPORT_LABELS; i++)
    {
    for(new g = 0; g < MAX_PLAYERS; g++)
    {
    TeleportLabel[g][i] = CreateDynamic3DTextLabel("» Teleport «\n"#C_WHITE_E"Los Santos\n/LS", C_PURPLE, 2492.7268, -1668.3849, 13.3438, 50.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0, -1, g, 50.0);
    //weitere Label...
    }
    }
    return LABEL_OnGameModeInit();
    }


    forward LABEL_OnGameModeInit();
    #if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
    #else
    #define _ALS_OnGameModeInit
    #endif
    #define OnGameModeInit LABEL_OnGameModeInit

    Es sind ja nicht direkt PlayerLabel.


    new Text3D:TeleportLabel[MAX_PLAYERS][MAX_TELEPORT_LABELS];


    ---------------------------------------------------------------------------------------------------------------------


    Nochmal ein kleines Update zum Stand der Dinge. Ich poste nun einmal alle Codeschnipsel auf einen Haufen, die relevant sind.


    #undef MAX_GANG_ZONES
    #define MAX_GANG_ZONES 83
    new Text3D:GangZoneLabel[MAX_PLAYERS][MAX_GANG_ZONES];
    //Das hier wird für die Erstellung des Labels des GW Zone benötigt. Hier klappt es wunderbar.


    #define MAX_TELEPORT_LABELS 29
    new Text3D:TeleportLabel[MAX_PLAYERS][MAX_TELEPORT_LABELS];
    //Nach demselben Prinzip läuft das ganze bei den Teleport Labels ab. Nur hier klappt es nicht, obwohl dieselbe Verfahrensweise angewendet wurde.


    stock UpdateLanguageLabels(playerid)
    {
    if(pInfo[playerid][Language] == LANGUAGE_DE)
    {
    new string[128];
    for(new i = 0; i < MAX_GANG_ZONES; i++)
    {
    format(string, sizeof(string), "» GANG ZONE «\n"#C_WHITE_E"ID: %i\n%s", i, GW_Name[i][0]);
    UpdateDynamic3DTextLabelText(GangZoneLabel[playerid][i], C_ORANGE, string);
    }//Dieser Loop erfüllt seinen Zweck. i läuft alles ab und UpdateDynamic3DTextLabelText wird korrekt aufgeführt.

    for(new t = 0; t < MAX_TELEPORT_LABELS; t++)
    {
    printf("%i", t);
    switch(t)
    {
    case 16: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Denkmal\n/SFD");
    case 23: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellit-Station\n/Satellit");
    case 24: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Verlassener Flughafen\n/VF");
    case 27: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Geistersee\n/GS");
    }
    }//Dieser Loop wird zwar durchlaufen, aber UpdateDynamic3DTextLabel wird NICHT ausgeführt, aus irgendeinem Grund.
    }
    else
    {
    new string[128];
    for(new i = 0; i < MAX_GANG_ZONES; i++)
    {
    format(string, sizeof(string), "» GANG ZONE «\n"#C_WHITE_E"ID: %i\n%s", i, GW_Name[i][1]);
    UpdateDynamic3DTextLabelText(GangZoneLabel[playerid][i], C_ORANGE, string);
    }//Dieser Loop erfüllt seinen Zweck. i läuft alles ab und UpdateDynamic3DTextLabelText wird korrekt aufgeführt.

    for(new t = 0; t < MAX_TELEPORT_LABELS; t++)
    {
    printf("%i", t);
    switch(t)
    {
    case 16: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Memorial\n/SFM");
    case 23: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellite Station\n/Satellite");
    case 24: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Abandoned Airport\n/AA");
    case 27: UpdateDynamic3DTextLabelText(TeleportLabel[playerid][t], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Ghost Lake\n/GL");
    }
    }//Dieser Loop wird zwar durchlaufen, aber UpdateDynamic3DTextLabel wird NICHT ausgeführt, aus irgendeinem Grund.
    }
    return 1;
    }


    Es ist einfach sau komisch, dass ich dieselbe Verfahrensweise anwende, und sie nur einmal klappt.

    Die Sprache wird geändert, daran liegt das Problem nicht.


    EDIT: Hier einmal der Befehl im Dialog.
    if(dialogid == DIALOG_LANGUAGES_CMD)
    {
    if(!response) return 1;
    if(response)
    {
    switch(listitem)
    {
    case 0:
    {
    pInfo[playerid][Language] = LANGUAGE_DE;
    SendClientMessage(playerid, C_RED, "»SPIELER« Du hast deine Sprache auf "#C_DARK_RED_E"Deutsch [GER]"#C_RED_E" gesetzt!");
    UpdateLanguageLabels(playerid);
    }
    case 1:
    {
    pInfo[playerid][Language] = LANGUAGE_EN;
    SendClientMessage(playerid, C_RED, "»PLAYER« You set your language to "#C_DARK_RED_E"English [ENG]"#C_RED_E"!");
    UpdateLanguageLabels(playerid);
    }
    }
    }
    }

    Dann warte ich mal den morgigen Tag ab (bzw. den heutigen) und werde das Ganze mit einem Zweiten testen!


    Vielen Dank für dein Durchhaltevermögen, du hast mir sehr geholfen. ;)


    ------------------------------------------------------------------------------------------------------------------------------------------


    Ich muss dieses Thema mal wieder ausgraben. Ich hoffe du, Jeffry, oder jemand anderes kann mir weiterhelfen.


    Momentan erstelle ich die 3DTextLabel in diesem Stil.
    for(new i = 0; i < MAX_TELEPORT_LABELS; i++)
    {
    for(new g = 0; g < MAX_PLAYERS; g++)
    {
    TeleportLabel[g][i] = CreateDynamic3DTextLabel("» Teleport «\n"#C_WHITE_E"Los Santos\n/LS", C_PURPLE, 2492.7268, -1668.3849, 13.3438, 50.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, 0, -1, g, 50.0);
    //code...
    }
    }


    Nun hatte ich ja folgendes unter meiner stock Funktion stehen.
    UpdateDynamic3DTextLabelText(TeleportLabel[playerid][16], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Denkmal\n/SFD");


    Ich bin mal probeweise an den Ort des Geschehens gegangen und habe die Sprache gewechselt, jedoch wird das Label nicht geupdated.