Beiträge von Manyula

    Hallo,


    ich habe nun folgendes Define:


    #define PREFIX_PLAYER "»PLAYER«"


    Nun möchte ich folgendes.
    Wenn die Variable pInfo[playerid][Language] == LANGUAGE_DE ist, dann soll PREFIX_PLAYER den string "»SPIELER«" enthalten.
    Wenn pInfo[playerid][Language] == LANGUAGE_EN, dann soll PREFIX_PLAYER den string "»PLAYER«" enthalten.


    Es ist schon klar, dass das ganze unter eine if-Abfrage muss, nur habe ich keine Ahnung wo, geschweige denn wie ich das mit Defines anstelle.

    Wenn du nun ESC drückst erscheint wieder das iTD Menü und du kannst auf "Export" drücken.
    Sobald du ein Textdraw erstellst, wird es (das Projekt, ind dem du das Textdraw erstellt hast) automatisch für dich gespeichert.

    Das habe ich dir bereits geschrieben.


    Du kannst das nicht manuell speichern. Wenn du deine Textdraws so verwenden möchtest, wie du sie dir gerade auf dem Bildschirm zurecht gelegt hast, dann geh ins iTD Menü und drücke auf "Export".
    Wenn du nun dein Spiel verlässt, und in deinem Serverordner unter "scriptfiles" schaust, findest du die .pwn zu deinem Projekt.

    Okay, pass auf:
    Mit "New" startest du ein neues Projekt.
    Mit "Open" öffnest du ein bereits bestehendes Projekt.
    Mit "Close" schließt du das Projekt, an dem du gerade arbeitest.
    Mit "Export" kannst du deine erstellten Textdraws exportieren. Du findest sie dann in einer .pwn in deinem scriptfiles Ordner.
    Mit "Manage" kannst du Textdraws erstellen. Option 1 ist ein Text, Option 2 eine Box und Option 3 kannst du außer Acht lassen. Im Manage Menü kannst du auch deine bereits erstellten Textdraws einsehen und auswählen. Möchtest du z.B. den Text oder die Position eines Textdraws editieren, so gehst du zunächst auf "Manage", doppelklickst das Textdraw (wird dann blau) und kannst dann mit dem Textdraw machen, was du willst.
    Gespeichert wird alles automatisch.


    Mit "Position" veränderst du die Position.
    Mit "Size" veränderst du die Größe von TextdrawBoxen (NICHT für Texte!).
    Mit "Text" editierst du den Text eines Textdraws.
    Mit "Color" veränderst du die Farbe des Textdraws.
    Mit "Box Color" veränderst du die Farbe von TextdrawBoxen.
    Mit "Letter Size" veränderst du die Größe von Texten (NICHT von Boxen!).
    Mit "Global" veränderst du die Textdraws von Global zu Playertextdraw und umgekehrt.

    Das Ding ist ja, dass ich nur diesen einen String updaten möchte. D:


    Die Label sind mit "Text3D:GangZoneLabel[MAX_GANG_ZONES];" definiert. Bedeutet dann einfach ein "GangZoneLabel[i] = " davor packen. Soweit so gut. (<= Quatsch.)


    Der String sieht folgendermaßen aus: "» GANG ZONE «\n"#C_WHITE_E"ID: %i\n%s", i, GW_Name[i][0]
    Ich möchte nur GW_Name updaten und nicht i.


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


    Es kompiliert nun.
    stock UpdateLanguageLabels(playerid)
    {
    if(pInfo[playerid][Language] == LANGUAGE_DE)
    {
    UpdateDynamic3DTextLabelText(TeleportLabel[16], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Denkmal\n/SFD");
    UpdateDynamic3DTextLabelText(TeleportLabel[23], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellit Station\n/Satellit");
    UpdateDynamic3DTextLabelText(TeleportLabel[24], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Verlassener Flughafen\n/VF");
    UpdateDynamic3DTextLabelText(TeleportLabel[27], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Geistersee\n/GS");

    for(new i = 0; i < sizeof(GW_Name); i++)
    {
    new string[128];
    format(string, sizeof(string), "» GANG ZONE «\n"#C_WHITE_E"ID: %i\n%s", i, GW_Name[i][0]);
    UpdateDynamic3DTextLabelText(GangZoneLabel[i], C_ORANGE, string);
    }
    }
    if(pInfo[playerid][Language] == LANGUAGE_EN)
    {
    UpdateDynamic3DTextLabelText(TeleportLabel[16], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Memorial\n/SFM");
    UpdateDynamic3DTextLabelText(TeleportLabel[23], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellite Station\n/Satellite");
    UpdateDynamic3DTextLabelText(TeleportLabel[24], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Abandoned Airport\n/AA");
    UpdateDynamic3DTextLabelText(TeleportLabel[27], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Ghost Lake\n/GL");


    for(new i = 0; i < sizeof(GW_Name); i++)
    {
    new string[128];
    format(string, sizeof(string), "» GANG ZONE «\n"#C_WHITE_E"ID: %i\n%s", i, GW_Name[i][1]);
    UpdateDynamic3DTextLabelText(GangZoneLabel[i], C_ORANGE, string);
    }
    }
    return 1;
    }


    Wenn ich nun ingame gehe und update steht einmal z.B. "Zug Barracken" und "ug Barracken" da. Also läuft da noch nicht alles.


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


    Des Rätsels Lösung ist ein 3D Array.

    Pass auf, weil ich gerade gute Laune hab, schreib ich dir eine Anleitung, wie du sie selber erstellen kannst.


    Gehe auf http://forum.sa-mp.com/showthread.php?t=376758.
    Scrolle runter, bis du "Download Tool" siehst. Klicke auf "iTD" und lade dir den Ordner runter.
    Gehe auf http://forum.sa-mp.com/showthread.php?t=120356.
    Lase dir das Plugin sscanf runter.


    Packe iTD.amx in deinen filterscripts Ordner.
    Packe iTD.dll in deinen plugins Ordner.
    Packe sscanf.dll in deinen plugins Ordner.
    Packe msvcr100.dll in den Überordner, wo du auch die server.cfg und die .exe Datei deines Servers hast.
    Packe die PLEO.txd in den Ordner deinen GTA Ordner (NICHT SAMP SERVER ORDNER) unter folgenden Pfad: Rockstar Games/GTA San Andreas/models/txd/.


    Öffne deine server.cfg.
    Füge die Zeile "plugins sscanf" hinzu.
    Füge in der Zeile "filterscripts" das "iTD" ein.


    Starte deinen Server mit der .exe (ACHTUNG: Du musst die .exe als Administrator ausführen!!!).
    Logge dich ingame als RCON Admin ein.
    Gib /rcon loadfs iTD ein.
    Gib /iTD ein und voilà.

    Hallo,


    die Errorcodes (warning 213: tag mismatch) sind im Code (stock Funktion) in der entsprechenden Zeile kommentiert. Ich möchte durch den Array GW_Name loopen, um Zeilen beim Updaten jedes einzelnen Labels zu sparen. Nun möchte das ganze nicht so, wie ich möchte.


    Funktion
    stock UpdateLanguageLabels(playerid)
    {
    if(pInfo[playerid][Language] == LANGUAGE_DE)
    {
    UpdateDynamic3DTextLabelText(TeleportLabel[16], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Denkmal\n/SFD");
    UpdateDynamic3DTextLabelText(TeleportLabel[23], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellit Station\n/Satellit");
    UpdateDynamic3DTextLabelText(TeleportLabel[24], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Verlassener Flughafen\n/VF");
    UpdateDynamic3DTextLabelText(TeleportLabel[27], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Geistersee\n/GS");

    for(new i = 0; i < sizeof(GW_Name); i++)
    {
    UpdateDynamic3DTextLabelText(GW_Name[i][0], C_ORANGE, GW_Name[i][1]); //warning 213: tag mismatch
    }
    }
    if(pInfo[playerid][Language] == LANGUAGE_EN)
    {
    UpdateDynamic3DTextLabelText(TeleportLabel[16], C_PURPLE, "» Teleport «\n"#C_WHITE_E"San Fierro Memorial\n/SFM");
    UpdateDynamic3DTextLabelText(TeleportLabel[23], C_PURPLE, "» Teleport «\n"#C_WHITE_E"The Big Ear Satellite Station\n/Satellite");
    UpdateDynamic3DTextLabelText(TeleportLabel[24], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Abandoned Airport\n/AA");
    UpdateDynamic3DTextLabelText(TeleportLabel[27], C_PURPLE, "» Teleport «\n"#C_WHITE_E"Ghost Lake\n/GL");


    for(new i = 0; i < sizeof(GW_Name); i++)
    {
    UpdateDynamic3DTextLabelText(GW_Name[i][1], C_ORANGE, GW_Name[i][0]); //warning 213: tag mismatch
    }
    }
    return 1;
    }


    Array
    new GW_Name[83][63] =
    {
    {"GlenPark", "Glen Park"},
    {"Obere Grove", "Upper Grove"},
    {"Grove Street", "Grove Street"},
    {"Waschanlage", "Car Wash"},
    {"LSPD Hauptquartier", "LSPD Headquarters"},
    {"LS Medical Center", "LS Medical Center"},
    {"Riesenrad", "Ferris Wheel"},
    {"Vinewood", "Vinewood"},
    {"Filmstudios", "Filmstudios"},
    {"Tankstelle", "Fuel Station"},
    {"Unity Station", "Unity Station"},
    {"Burger Shot LS Nord", "Burger Shot LS North"},
    {"LS Parkplatz", "LS Parking Lot"},
    {"Walk of Fame", "Walk of Fame"},
    {"LS Einkaufszentrum", "LS Mall"},
    {"LS Strand Kanäle", "LS Beach Canals"},
    {"The Pig Ben Bordell", "The Pig Pen Brothel"},
    {"Gebäudekomplex", "Complex of Buildings"},
    {"Modeecke", "Fashion Corner"},
    {"Leuchtturm", "Lighthouse"},
    {"Vinewood Barracken", "Vinewood Barracks"},
    {"LS Nord-Ost Gebäude", "LS North-East Building"}, //could use a rename
    {"Zug Barracken", "Tram Barracks"},
    {"LS Flughafen", "LS Airport"},
    {"Villa", "Mansion"},
    {"Ammunation LS Kanäle", "Ammunation LS Canals"},
    {"Freizeitzentrum", "Leisure Center"},
    {"LS Docks Kanäle", "LS Docks Canals"},
    {"LS Südliche Brücke", "LS Southside Bridge"},
    {"LS Cluckin' Bell Quartier", "LS Cluckin' Bell Quarters"},
    {"LS Docks", "LS Docks"},
    {"LS Süd-Ost Strandquartier", "LS South-East Beach Quarters"},
    {"SF Baustelle", "SF Building Lot"},
    {"Wang Cars", "Wang Cars"},
    {"SF Lagerhaus Areal", "SF Warehouse Area"},
    {"SF Baseball Quartier", "SF Baseball Quarters"},
    {"Missionary Hill", "Missionary Hill"},
    {"Foster Valley", "Foster Valley"},
    {"SF Flughafen", "SF Airport"},
    {"SF Industrie", "SF Industrial"},
    {"SF Hafenseite", "SF Harborside"},
    {"SF Schiff", "SF Ship"},
    {"Hippiequartier", "Hippie Quarters"},
    {"SF Westliche Strandquartiere", "SF West Beach Quarters"},
    {"SF Hotel", "SF Hotel"},
    {"SFPD Hauptquartier", "SFPD Headquarters"},
    {"SF Regierung", "SF Government"},
    {"SF Medical Center", "SF Medical Center"},
    {"SF Nord-West Quartiere", "SF North-West Quarters"},
    {"Chine Town", "China Town"},
    {"Schlangenstraße", "Snake Road"},
    {"Pier 69", "Pier 69"},
    {"Otto's Autos", "Otto's Cars"},
    {"SF Finanzinstitut", "SF Financial Institute"},
    {"SF Nördliche Quartiere", "SF North Quarters"},
    {"Gant Bridge Restaurant und Museum", "Gant Bridge Diner and Museum"},
    {"Bayside", "Bayside"},
    {"Whetstone - 'Small Farm'", "Whetstone - 'Small Farm'"},
    {"Whetstone - 'Grand Farm'", "Whetstone - 'Grand Farm'"},
    {"Hügelgipfel Farm", "Hilltop Farm"},
    {"Come-A-Lot", "Come-A-Lot"},
    {"The High Roller", "The High Roller"},
    {"The Visage", "The Visage"},
    {"LVPD Hauptquartier", "LVPD Headquarters"},
    {"LV Parkhaus", "LV Parkhouse"},
    {"LV Große Baustelle", "LV Grand Building Lot"},
    {"Vier-Treppen-Gebäude", "Four Stairs Building"},
    {"LV Süd-Westliche Baustelle", "LV Building Lot South-West"},
    {"LV Flughafen Frachtdepot", "LV Airport Freight Depot"},
    {"LV Nördliche Quartiere", "LV North Quarters"},
    {"LV Östliche Quartiere", "LV East Quarters"},
    {"LV Kirche", "LV Church"},
    {"Redsands Xoomer Distrikt", "Redsands Xoomer District"},
    {"Sumo", "Sumo"},
    {"LV Motel", "LV Motel"},
    {"Whitewood Estates", "Whitewood Estates"},
    {"Ölfelder Industrie", "Oil Fields Industrial"},
    {"Fort Carson", "Fort Carson"},
    {"Satellit Station", "Satellite Station"},
    {"Area 51", "Area 51"},
    {"Las Payasadas", "Las Payasadas"},
    {"Tierra Robada Gebäude", "Tierra Robada Building"},
    {"Geisterstadt", "Ghost Town"}
    };

    Hallo, liebe Leute,


    public OnPlayerPickUpDynamicPickup(playerid, pickupid)
    {
    //Battlefield DM
    if(pickupid == BF_WEAPON[0] || pickupid == BF_WEAPON[1] || pickupid == BF_WEAPON[2] || pickupid == BF_WEAPON[3])
    {
    GivePlayerWeapon(playerid, GRENADE, 5);
    DestroyDynamicPickup(pickupid);
    }
    else if(pickupid == BF_WEAPON[4] || pickupid == BF_WEAPON[5] || pickupid == BF_WEAPON[6] || pickupid == BF_WEAPON[7] || pickupid == BF_WEAPON[8] || pickupid == BF_WEAPON[9])
    {
    GivePlayerWeapon(playerid, HEAT_SEEKER, 5);
    DestroyDynamicPickup(pickupid);
    }


    for(new i; i < 9; i++)
    {
    if(pickupid == BF_WEAPON[i])
    {
    SetTimerEx("PickupRespawn", 60000, false, "i", i);
    }
    }
    return 1;
    }


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


    Ich habe nun einmal probeweise ein Pickup aufgenommen und abgewartet, ob es nach 60 Sekunden wieder auftaucht - tut es nicht. Wenn ich mehrere Pickups in dem DM aufnehme, respawnen einige Pickups zufällig wieder, ich hab da aber kein wirkliches System darin erkannt...
    Weiß jemand weiter?

    Dann wird es wohl an Incognito's Streamer liegen. Na toll. -.-


    EDIT: Ich hab das ganze mal mit CreatePickup versucht, und es funktioniert. Es wird wahrscheinlich wirklich am streamer liegen. Eine Sache ist aber noch komisch.


    Ich verwende OnPlayerPickUpDynamicPickup inzuwi gehookten Versionen.


    Version 1 funktioniert.
    public OnPlayerPickUpDynamicPickup(playerid, pickupid)
    {
    if(pickupid == BF_WEAPON[0] || pickupid == BF_WEAPON[1] || pickupid == BF_WEAPON[2]) GivePlayerWeapon(playerid, GRENADE, 5);
    else if(pickupid == BF_WEAPON[3] || pickupid == BF_WEAPON[4] || pickupid == BF_WEAPON[5] || pickupid == BF_WEAPON[6] || pickupid == BF_WEAPON[7] || pickupid == BF_WEAPON[8] || pickupid == BF_WEAPON[9]) GivePlayerWeapon(playerid, HEAT_SEEKER, 5);
    DestroyDynamicPickup(pickupid);


    for(new i; i < 9; i++) if(pickupid == BF_WEAPON[i]) SetTimerEx("PickupRespawn", 45000, false, "i", i);
    return _OnPlayerPickUpDynamicPickup(playerid, pickupid);
    }


    forward _OnPlayerPickUpDynamicPickup(playerid, pickupid);
    #if defined ALS_OnPlayerPickUpDynamicPickup
    #undef OnPlayerPickUpDynamicPickup
    #else
    #define ALS_OnPlayerPickUpDynamicPickup
    #endif
    #define OnPlayerPickUpDynamicPickup _OnPlayerPickUpDynamicPickup


    Version 2 funktioniert nicht.
    public OnPlayerPickUpDynamicPickup(playerid, pickupid)
    {
    if(pickupid == BankEntrance)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 2315.952880, -1.618174, 26.742187);
    }
    return BOnPlayerPickUpDynamicPickup(playerid, pickupid);
    }


    forward BOnPlayerPickUpDynamicPickup(playerid, pickupid);
    #if defined ALS_OnPlayerPickUpDynamicPickup
    #undef OnPlayerPickUpDynamicPickup
    #else
    #define ALS_OnPlayerPickUpDynamicPickup
    #endif
    #define OnPlayerPickUpDynamicPickup BOnPlayerPickUpDynamicPickup

    Es hat in der Bank an sich noch keinen Kegel, der den Spieler hinausteleportiert. Ich will erst einmal den Eingang hinkriegen, woran es gerade eben hapert. /Bank3 ist der Teleport, der einen vor das Gebäude bringt.

    COMMAND:bank3(playerid, params[])
    {
    if(PlayerActionForbidden(playerid)) return 1;
    if(BufferCMD(playerid)) return 1;
    if(GetPlayerMoney(playerid) >= 200)
    {
    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 zum Financial Institute SF teleportiert! (/Bank3)", GetPlayerColor(playerid) >>> 8, pName);
    format(stringEN, sizeof(stringEN), "»TELEPORT« {%06x}%s "#C_GOLD_E"has teleported to the SF Financial Institute! (/Bank3)", GetPlayerColor(playerid) >>> 8, pName);
    SendLanguageMessageToAll(C_GOLD, stringDE, stringEN);
    SetPlayerPos(playerid, -1911.7787, 487.1757, 35.1719);
    SetPlayerFacingAngle(playerid, WEST);
    SetVehiclePos(GetPlayerVehicleID(playerid), -1911.7787, 487.1757, 35.1719);
    SetVehicleZAngle(GetPlayerVehicleID(playerid), WEST);
    PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
    SetCameraBehindPlayer(playerid);
    GivePlayerMoneyEx(playerid, -200);
    SavePlayerHPandAP(playerid);
    SetSpawnProtection(playerid);
    }
    else SendLanguageMessage(playerid, C_RED, "»WARNUNG« Du hast nicht genug Geld!", "»WARNING« You don't have enough money!");
    return 1;
    }


    Das ist der Teleport direkt vor dem Kegel.

    Die Pickup ID müsste stimmen, da ID 1 ja niemals verschwindet.


    Ich setze bei keinem Teleport eine virtuelle Welt, und ich bezweifle, dass sie sich von selbst ändert. Auch keine Interiors. Ich habe auch schon versucht bei jedem Teleport das Interior wieder auf 0 zu setzen, bringt aber nichts. Der Kegel bleibt weg.

    Ich scheine im Moment total auf dem Schlauch zu stehen.


    new BankEntrance;


    //OnGameModeInit()
    BankEntrance = CreateDynamicPickup(1559, 1, -1897.6725, 487.1822, 35.1719, 0, -1, -1, 50.0);


    //OnPlayerPickUpDynamicPickup(playerid, pickupid)
    if(pickupid == BankEntrance)
    {
    SetPlayerInterior(playerid, 0);
    SetPlayerPos(playerid, 2315.952880, -1.618174, 26.742187);
    }


    Gehe ich das erste Mal in den Lichtkegel, lande ich normal an der genannten Position im genannten Interior. Teleportiere ich mich aber wieder vor den Eingang, so ist der Kegel verschwunden.

    Hallo,


    wie schreibe ich folgenden Code in switch case um? Habe schon versucht "case BF_WEAPON[0]: ..." etc. zu kompilieren, das funktioniert aber nicht.


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

    Um dir mal einen kleinen Denkanstoß zu geben. Es wird ja bestimmt darauf hinaus laufen, dass du einen CMD zum Betreten und einen zum Verlassen der Arena hast. So: Betreten = Variable + 1, Verlassen = Variable - 1. Bei jedem Betreten fragst du ab, ob die Variable schon 10 beträgt oder nicht. Wenn sie auf 10 ist, dann lässt du für alle weiteren, die beitreten wollen eine Nachricht ausgeben, dass die Arena voll ist.
    Das mit der Zuteilung zu den Teams würde ich machen, wenn du 10 Spieler zusammen hast.

    Ich habe diese "-1" schon so oft gesehen und bin bisher immer noch nicht dahinter gestiegen, wofür man sie überhaupt gebraucht... Könnte sich jemand dazu erbarmen mir das zu erklären? :/


    PS: Klappt, vielen Dank!

    Hi,


    Der CMD soll eigentlich so funktionieren, dass wenn ich keine Parameter eingebe, immer die eigenen Statistiken angezeigt werden. Sobald ich aber einen Parameter eingebe, sollen die Statistiken des angegebenen Spielers gezeigt werden. Nur klappt das bisher noch nicht so ganz.


    COMMAND:stats(playerid, params[])
    {
    if(IsPlayerAFK[playerid]) return SendLanguageMessage(playerid, C_RED, "»WARNUNG« Du bist AFK. Du kannst keine Aktion durchführen.", "»WARNING« You are AFK. You can't take any action.");


    new ID,
    stringDE[256],
    stringEN[256],
    pName[MAX_PLAYER_NAME],
    pAdminLevel = pInfo[ID][AdminLevel],
    pMoney = pInfo[ID][Money] + pInfo[ID][Bank],
    pScore = pInfo[ID][Score],
    pKills = pInfo[ID][Kills],
    pDeaths = pInfo[ID][Deaths],
    Float:pRatio = Float:pInfo[ID][Kills] / Float:pInfo[ID][Deaths];


    if(isnull(params)) ID = playerid;
    else return sscanf(params, "u", ID);

    if(!IsPlayerConnected(ID)) return SendLanguageMessage(playerid, C_RED, "»WARNUNG« Dieser Spieler ist nicht online!", "»WARNING« This player is not online!");


    GetPlayerName(playerid, pName, sizeof(pName));
    format(stringDE, sizeof(stringDE), ""#C_WHITE_E"Name: "#C_LIGHT_BLUE_E"%s"#C_WHITE_E"\nRang: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nGeld: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nScore: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nKills: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nTode: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nRatio: "#C_LIGHT_BLUE_E"%0.2f", pName, pAdminLevel, pMoney, pScore, pKills, pDeaths, pRatio);
    format(stringEN, sizeof(stringEN), ""#C_WHITE_E"Name: "#C_LIGHT_BLUE_E"%s"#C_WHITE_E"\nRank: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nMoney: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nScore: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nKills: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nDeaths: "#C_LIGHT_BLUE_E"%d"#C_WHITE_E"\nRatio: "#C_LIGHT_BLUE_E"%0.2f", pName, pAdminLevel, pMoney, pScore, pKills, pDeaths, pRatio);
    ShowLanguageDialog(playerid, DIALOG_STATS, DIALOG_STYLE_MSGBOX, "Spielerstatistik", "Player Statistics", stringDE, stringEN, "OK", "OK", "", "");
    return 1;
    }

    Um die Effizienz scher ich mich gerade nicht, es geht mir gerade primär um die Funktionalität. Wenn die gegeben ist, kann ich mich an die Effizienz machen. :D
    Was meinst du mit "manuell überprüfen"? Die Spawns sind in einem Array gespeichert, und werden dann, wenn der Spieler spawnt, ausgelesen und zufällig in SetPlayerPos ausgewählt. An den Positionen an sich kann es meiner Meinung nach nicht liegen.


    Die gegebenen zwei Callbacks sind für mich die einzigen, die in Frage kämen, da das Problem ja beim Spawn auftritt. Lediglich OnPlayerDeath könnte vllt noch eine Rolle spielen, was ich aber nicht glaube, da ich dort absolut keinen Bezug zum Problem sehe. Hier:


    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendDeathMessage(killerid, playerid, reason);

    JustDied[playerid] = true;


    if(killerid != INVALID_PLAYER_ID)
    {
    GivePlayerMoneyEx(playerid, -GetPlayerMoney(playerid));
    GivePlayerMoneyEx(killerid, GetPlayerMoney(playerid));
    pInfo[killerid][Score] += 1;
    pInfo[killerid][Kills] += 1;
    }
    else
    {
    GivePlayerMoneyEx(playerid, -GetPlayerMoney(playerid));
    }
    pInfo[playerid][Deaths] += 1;
    return 1;
    }

    Hallo,


    Es handelt sich um eine DM Arena. Wenn ich innerhalb der Arena gekillt werde, bzw. mich selbst per CMD kille, dann werde ich nicht auf zurück in der Arena gespawnt sondern lande irgendwo in der Luft.
    Zudem finde ich seltsam, dass wenn ich gekillt werde, die Sterbeanimation erst nach wenigen Augenblicken eintritt. Liegt das vllt an den gehookten Callbacks?
    Falls weitere Codeausschnitte gebraucht werden, sagt bitte bescheid!


    Danke!


    Haupt Script
    public OnPlayerSpawn(playerid)
    {
    SetPlayerColor(playerid, C_BLUE);


    new VirtualWorld = GetPlayerVirtualWorld(playerid);
    switch(VirtualWorld)
    {
    case 0:
    {
    if(pInfo[playerid][JustLoggedIn] == true)
    {
    SetCameraBehindPlayer(playerid);
    GivePlayerMoneyEx(playerid, pInfo[playerid][Money]);
    SetPlayerScore(playerid, pInfo[playerid][Score]);
    pInfo[playerid][JustLoggedIn] = false;
    return 1;
    }
    if(pInfo[playerid][JustRegistered] == true)
    {
    cmd_rules(playerid, "");
    pInfo[playerid][JustRegistered] = false;
    return 1;
    }
    if(pInfo[playerid][JustLoggedIn] == false) return GivePlayerMoneyEx(playerid, 5000);
    SetSpawnProtection(playerid);
    }
    }
    return 1;
    }


    Include
    public OnPlayerSpawn(playerid)
    {
    new VirtualWorld = GetPlayerVirtualWorld(playerid);
    switch(VirtualWorld)
    {
    case 1: if(IsPlayerInDM[playerid]) //DM1
    {
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    new Random = random(sizeof(RandomSpawnsDM1));
    UseTeleports[playerid] = false;
    ResetPlayerWeapons(playerid);
    SetPlayerPos(playerid, RandomSpawnsDM1[Random][0], RandomSpawnsDM1[Random][1], RandomSpawnsDM1[Random][2]);
    GivePlayerWeapon(playerid, DESERT_EAGLE, 5000);
    GivePlayerWeapon(playerid, SHOTGUN, 5000);
    GivePlayerWeapon(playerid, SNIPER_RIFLE, 5000);
    SetSpawnProtection(playerid);
    }
    case 2: if(IsPlayerInDM[playerid]) //DM2
    {
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    new Random = random(sizeof(RandomSpawnsDM2));
    UseTeleports[playerid] = false;
    ResetPlayerWeapons(playerid);
    SetPlayerPos(playerid, RandomSpawnsDM2[Random][0], RandomSpawnsDM2[Random][1], RandomSpawnsDM2[Random][2]);
    GivePlayerWeapon(playerid, DESERT_EAGLE, 5000);
    GivePlayerWeapon(playerid, COMBAT_SHOTGUN, 5000);
    GivePlayerWeapon(playerid, COUNTRY_RIFLE, 5000);
    SetSpawnProtection(playerid);
    }
    case 3: if(IsPlayerInDM[playerid]) //DM3
    {
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    new Random = random(sizeof(RandomSpawnsDM3));
    UseTeleports[playerid] = false;
    ResetPlayerWeapons(playerid);
    SetPlayerPos(playerid, RandomSpawnsDM3[Random][0], RandomSpawnsDM3[Random][1], RandomSpawnsDM3[Random][2]);
    GivePlayerWeapon(playerid, SAWNOFF_SHOTGUN, 5000);
    GivePlayerWeapon(playerid, UZI, 5000);
    SetSpawnProtection(playerid);
    }
    case 4: if(IsPlayerInDM[playerid]) //DM4
    {
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    new Random = random(sizeof(RandomSpawnsDM4));
    UseTeleports[playerid] = false;
    ResetPlayerWeapons(playerid);
    SetPlayerPos(playerid, RandomSpawnsDM4[Random][0], RandomSpawnsDM4[Random][1], RandomSpawnsDM4[Random][2]);
    GivePlayerWeapon(playerid, CHAINSAW, 1);
    SetSpawnProtection(playerid);
    }
    case 5: if(IsPlayerInDM[playerid]) //DM5
    {
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    new Random = random(sizeof(RandomSpawnsDM5));
    UseTeleports[playerid] = false;
    ResetPlayerWeapons(playerid);
    SetPlayerPos(playerid, RandomSpawnsDM5[Random][0], RandomSpawnsDM5[Random][1], RandomSpawnsDM5[Random][2]);
    GivePlayerWeapon(playerid, MINIGUN, 9999);
    SetSpawnProtection(playerid);
    }
    case 6: if(IsPlayerInDM[playerid]) //Paintball
    {
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    new Random = random(sizeof(RandomSpawnsPB));
    UseTeleports[playerid] = false;
    ResetPlayerWeapons(playerid);
    SetPlayerPos(playerid, RandomSpawnsPB[Random][0], RandomSpawnsPB[Random][1], RandomSpawnsPB[Random][2]);
    SetPlayerSkillLevel(playerid, WEAPONSKILL_PISTOL, 1);
    GivePlayerWeapon(playerid, PISTOL, 9999);
    GivePlayerWeapon(playerid, COUNTRY_RIFLE, 9999);
    SetSpawnProtection(playerid);
    }
    case 7: if(IsPlayerInDM[playerid]) //Battlefield
    {
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    new Random = random(sizeof(RandomSpawnsBF));
    UseTeleports[playerid] = false;
    ResetPlayerWeapons(playerid);
    SetPlayerPos(playerid, RandomSpawnsBF[Random][0], RandomSpawnsBF[Random][1], RandomSpawnsBF[Random][2]);
    GivePlayerWeapon(playerid, M4, 1000);
    GivePlayerWeapon(playerid, UZI, 2000);
    GivePlayerWeapon(playerid, GRENADE, 5);
    GivePlayerWeapon(playerid, COMBAT_SHOTGUN, 200);
    SetSpawnProtection(playerid);
    }
    }
    return DM_OnPlayerSpawn(playerid);
    }


    forward DM_OnPlayerSpawn(playerid);
    #if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
    #else
    #define _ALS_OnPlayerSpawn
    #endif
    #define OnPlayerSpawn DM_OnPlayerSpawn

    Hallo, liebste Brötchen,


    Ich hatte vor die ganze San Andreas Map als Textdraw auf dem Screen anzeigen zu lassen. Nun hab ich entdeckt, dass das nicht so ohne weiteres geht, da die Map (RadarMap) in mehrere Teile zerstückelt ist. Im Editor wäre das das reinste Puzzle mit dem Zusammenfügen der Teile und dem Abstimmen der genauen Größe der Teile. Hat da jemand vllt eine Lösung parat? Kennt jemand schon ein vorgefertigtes Map Textdraw? Bin schon kräftig am googlen, finde jedoch nichts.


    Danke!