Ort wiedergeben

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
  • Hi ich hab seit kurzem versucht, dass bei dem Befehl /wobinich eine Nachricht kommt wo man sich gerade befindet.


    Bisher habe ich es so gemacht:


    Der Befehl:


    if (strcmp("/wobinich", cmdtext, true) == 0)
    {
    GetZoneName(playerid);
    return 1;
    }


    Hier der Stock wie es auch funktioniert


    stock GetZoneName(playerid)
    {
    if(IsPlayerInArea(playerid,44.60, -2892.90, 2997.00, -768.00))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Los Santos");
    return 1;
    }
    if(IsPlayerInArea(playerid,869.40, 596.30, 2997.00, 2993.80))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Las Venturas");
    return 1;
    }
    if(IsPlayerInArea(playerid,-480.50, 596.30, 869.40, 2993.80))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Bone County");
    return 1;
    }
    if(IsPlayerInArea(playerid,2997.40, 1659.60, -480.50, 2993.80))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Tierra Robada");
    return 1;
    }
    if(IsPlayerInArea(playerid,-1213.90, 596.30, -480.50, 1659.60))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Tierra Robada");
    return 1;
    }
    if(IsPlayerInArea(playerid,-2997.40, -1115.50, -1213.90, 1659.60))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:San Fierro");
    return 1;
    }
    if(IsPlayerInArea(playerid,-1213.90, -768.00, 2997.00, 596.30))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Red County");
    return 1;
    }
    if(IsPlayerInArea(playerid, -1213.90, -2892.90, 44.60, -768.00))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Flint County");
    return 1;
    }
    if(IsPlayerInArea(playerid, -2997.40, -2892.90, -1213.90, -1115.50))
    {
    SendClientMessage(playerid, rot, "Aktuelle Region:Whetstone");
    return 1;
    }
    return 1;
    }


    und jetzt hatte ich mir gedacht das bisschen sparrender und übersichtlicher zumachen und hatte mir vorgestellt es so zumachen:


    stock GetZoneName(playerid)
    {
    new Float:minX,Float:minY,Float:maxX,Float:maxY;
    new areastring[128];
    new area[64];
    format(areastring,sizeof(areastring),"Aktueller Ort:%s", area);
    switch(IsPlayerInArea(playerid, Float:minX,Float:minY,Float:maxX,Float:maxY))
    {
    case 44.60, -2892.90, 2997.00, -768.00:{area="Los Santos";}
    case 869.40, 596.30, 2997.00, 2993.80:{area="Las Venturas";}
    case -480.50, 596.30, 869.40, 2993.80:{area="Bone County";}
    case 2997.40, 1659.60, -480.50, 2993.80:{area="Tierra Robada";}
    case -1213.90, 596.30, -480.50, 1659.60:{area="Tierra Robada";}
    case -2997.40, -1115.50, -1213.90, 1659.60:{area="San Fierro";}
    case -1213.90, -768.00, 2997.00, 596.30:{area="Red County";}
    case -1213.90, -2892.90, 44.60, -768.00:{area="Flint County";}
    case -2997.40, -2892.90, -1213.90, -1115.50:{area="Whetstone";}
    }
    return 1;
    }


    Nur geht das mit den case nicht: könnte mir dort jemand helfen? bzw gibt es noch eine andere Möglichkeit?


    We are Anonymous.


    We are Legion.


    We do not forgive.


    We do not forget.


    Expect us.

  • switch / case überprüft (Anmerkung: in den meisten Fällen) auf einen numerischen Fall.
    Du gibst jedoch immer true / false (1/0) wieder, und hättest somit nur die Fälle 0 und 1.
    Du kannst nicht die einzelnen Parameter durch eine komb. switch/case Überprüfung behandeln.

  • OK dann kann ich das vergessen, aber gibt es eine andere möglichkeit ohne das es so extrem viel Code entsteht.


    Ich hätte noch so ne Idee aber keine Ahnung wie ich es umsetzten soll:


    Zonen Definieren(zoneinfo(minX,minY,maxX,maxY) und dann abfragen ob der in einer der ingesammt 366 Zonen von Gta ist. hab eine datei da stehen alle Orte drin jedoch mit minX,minY,minZ und maxX,maxY,maxZ


    We are Anonymous.


    We are Legion.


    We do not forgive.


    We do not forget.


    Expect us.

  • Du könntest ein enum sowie ein Array anlegen, sprich du addest dann einfach oben in dem Array z.B per folgender Zeile einen neuen Ort:


    -1213.90, -768.00, 2997.00, 596.30, "Red County"



    Und GetZone läuft dann das komplette Array durch.

  • ich hab sowas schon im script:


    enum zoneinfo {
    zone_name[128],
    Float:zone_minx,
    Float:zone_miny,
    Float:zone_minz,
    Float:zone_maxx,
    Float:zone_maxy,
    Float:zone_maxz
    }


    und


    new Float:izones[2][zoneinfo] = {
    { "Caligula's Palace", 2087.30, 1543.20, 900.00, 2437.30, 1703.20, 1200.90}}// Indoor zones


    new Float:ozones[355][zoneinfo] = {
    { "The Big Ear", -410.00, 1403.30, -3.00, -137.90, 1681.20, 200.00}}// Outdoor Zones


    new Float:bzones[9][zoneinfo] = {
    { "Los Santos", 44.60, -2892.90, -242.90, 2997.00, -768.00, 900.00}}// Main Zones


    wie kann ich jetzt abfragen in welcher Indoor,Outdoor und Main zoner man sich befindet?


    We are Anonymous.


    We are Legion.


    We do not forgive.


    We do not forget.


    Expect us.

  • Kann mir jemand sagen wie ich die Schleife bzw die komplette Abfrage schreibe?


    Ich selber komme nicht weiter und finde nix im Forum was mir hilft.


    We are Anonymous.


    We are Legion.


    We do not forgive.


    We do not forget.


    Expect us.

    Einmal editiert, zuletzt von Devel ()