[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • kann ich damit auch machen das wenn dem spieler seine waffe leer ist also muni leer geworden ist das dann
    weapon[playerid] --;
    kommt ?
    @!ULLIK: Habs jetzt so:
    if((waffe <= 43 && waffe > 0) || waffe == 46)
    {
    new weap, ammo;
    for(new i=0; i < 13; i++)
    {
    GetPlayerWeaponData(playerid, i+1, weap, ammo);
    if(Weapon[playerid] != i)
    {
    new wname[40];
    GetWeaponName(waffe,wname, sizeof wname);
    new kname[20], stringk[128];
    GetPlayerName(playerid, kname, sizeof(kname));
    format(stringk, sizeof(stringk), "AdmCmd: %s wurde vom Server gebannt, Grund: Waffenhack (%s)", kname,wname);
    SendClientMessageToAll(COLOR_LIGHTRED, stringk);
    pInfo[playerid][banned] = 1;
    new year, month,day;
    format(string, sizeof(string), "AdmCmd: %s wurde vom Server gebannt, Grund: Waffenhack (%s) (%d-%d-%d)", kname, wname, day, month, year);
    getdate(year,month,day);
    Ban(playerid);
    BanLog(string);
    }
    }
    }
    Aber werde dann gebannt :o was hab ich falsch gemacht ?
    /edit weapondata prob

    Einmal editiert, zuletzt von Tommyx3 ()

  • Hab ma wieder ein Problem ich hab mir ein Array erstellt der sieht so aus


    new aWeaponIDs[44] = {
    {331},{333},{334},{335},{336},{337},{338},{339},{341},{321},{322},{323},{324},{325},{326},{342},{343},{344},{346},{347},{348},{349},
    {350},{351},{352},{353},{355},{356},{372},{357},{358},{359},{360},{361},{362},{363},{364},{365},{366},{367},{368},{369},{371}
    };


    Ich bekomm aber ein Fehler:
    error 052: multi-dimensional arrays must be fully initialized
    error 008: must be a constant expression; assumed zero


    Mach ich dann so
    new aWeaponIDs[44][] = {
    {331},{333},{334},{335},{336},{337},{338},{339},{341},{321},{322},{323},{324},{325},{326},{342},{343},{344},{346},{347},{348},{349},
    {350},{351},{352},{353},{355},{356},{372},{357},{358},{359},{360},{361},{362},{363},{364},{365},{366},{367},{368},{369},{371}
    };


    Stürtzt der Compiler ab (?)


    Wie soll ich das den richtig machen?

  • VaTeR325
    new aWeaponIDs[44] = //array mit einer dimension erstellen
    {//erste dimension öffnen
    {331},//eine zweite dimension öffnen, wert eintragen (331) und dimension wieder schliessen.
    {333},{334},{335},{336},{337},{338},{339},{341},{321},{322},{323},{324},{325},{326},{342},{343},{344},{346},{347},{348},{349},
    {350},{351},{352},{353},{355},{356},{372},{357},{358},{359},{360},{361},{362},{363},{364},{365},{366},{367},{368},{369},{371}
    };
    Also erstellst du ein array mit nur einer Dimension, arbeitest dann aber mit einer 2.
    Ich hoffe das war verständlich^^
    So wäre es richtig:
    new aWeaponIDs[44] = {
    331,333,334,335,336,337,338,339,341,321,322,323,324,325,326,342,343,344,346,347,348,349,
    350,351,352,353,355,356,372,357,358,359,360,361,362,363,364,365,366,367,368,369,371
    };

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Oke habs korrigiert ^^ Danke für die Information aber hab immer noch ein Fehler!


    Code:
    new aWeaponIDs[44] = {
    331,333,334,335,336,337,338,339,341,321,322,323,324,325,326,342,343,344,346,347,348,349,
    350,351,352,353,355,356,372,357,358,359,360,361,362,363,364,365,366,367,368,369,371
    };


    Fehler:
    error 052: multi-dimensional arrays must be fully initialized

  • Versuchs mal so:
    new aWeaponIDs[] = {
    331,333,334,335,336,337,338,339,341,321,322,323,324,325,326,342,343,344,346,347,348,349,
    350,351,352,353,355,356,372,357,358,359,360,361,362,363,364,365,366,367,368,369,371
    };
    Die größe wird dann automatisch erkannt. Das heisst du kannst weiterhin z.b
    sizeof(aWeaponIDs)
    usw. benutzen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Hab ich schon ^^ Naja jetzt hab ich mir umentschieden, hab meine beiden arrays nun verbunden das sieht jetzt so aus


    new aWeaponNames[44][3] = {
    {331, "Brass Knuckles"},{333, "Golf Club"},{334, "Nite Stick"},{335, "Knife"},{336, "Baseball Bat"},{337, "Shovel"},{338, "Pool Cue"},
    {339, "Katana"},{341, "Chainsaw"},{321, "Purple Dildo"},{322, "Small White Vibrator"},{323, "Large White Vibrator"},{324, "Silver Vibrator"},
    {325, "Flowers"},{326, "Cane"},{342, "Grenade"},{343, "Tear Gas"},{344, "Molotov Cocktail"},{346, "9mm"},{347, "Silenced 9mm"},
    {348, "Desert Eagle"},{349, "Shotgun"},{350, "Sawn-off Shotgun"},{351, "Combat Shotgun"},{352, "Micro SMG"},{353, "MP5"},{355, "AK-47"},
    {356, "M4"},{372, "Tec9"},{357, "Country Rifle"},{358, "Sniper Rifle"},{359, "Rocket Launcher"},{360, "HS Rocket Launcher"},
    {361, "Flamethrower"},{362, "Minigun"},{363, "Satchel Charge"},{364, "Detonator"},{365, "Spraycan"},{366, "Fire Extinguisher"},{367, "Camera"},
    {368, "Nightvision Goggles"},{369, "Thermal Goggles"},{371, "Parachute"}
    };


    Mein Befehl dazu sieht so aus:
    dcmd_waffe(playerid, params[])
    {
    new pid, waffe[32], muni;
    if(sscanf(params, "us[32]i", pid, waffe, muni)) return SendClientMessage(playerid, COLOR_GRAU, "Verwendung: /waffe [Spieler/ID] [Waffe] [Munition]");
    for(new i = 0; i < 43; i++)
    {
    if(strfind(aWeaponNames[i][2], waffe, true) != -1)
    {
    GivePlayerWeapon(playerid, aWeaponNames[i][1], muni);
    return 1;
    }
    else return SendClientMessage(playerid, COLOR_GRAU, "Ungültige Waffe!");
    }
    return 1;
    }


    Und bekomme diesen Fehler:
    error 018: initialization data exceeds declared size ( Zeile 9 im ersten Codefenster )

  • Du hast 3 angegeben, benutzt aber nur 2 sachen (id un name), zudem musst du weil du einen string benutzt noch die länge angeben. Mit nem enum lässt sich das konfortabler lösen.
    enum WeaponData
    {
    weaponID,
    weaponName[32],
    }
    new aWeaponNames[44][WeaponData] = {
    {331, "Brass Knuckles"},{333, "Golf Club"},{334, "Nite Stick"},{335, "Knife"},{336, "Baseball Bat"},{337, "Shovel"},{338, "Pool Cue"},
    {339, "Katana"},{341, "Chainsaw"},{321, "Purple Dildo"},{322, "Small White Vibrator"},{323, "Large White Vibrator"},{324, "Silver Vibrator"},
    {325, "Flowers"},{326, "Cane"},{342, "Grenade"},{343, "Tear Gas"},{344, "Molotov Cocktail"},{346, "9mm"},{347, "Silenced 9mm"},
    {348, "Desert Eagle"},{349, "Shotgun"},{350, "Sawn-off Shotgun"},{351, "Combat Shotgun"},{352, "Micro SMG"},{353, "MP5"},{355, "AK-47"},
    {356, "M4"},{372, "Tec9"},{357, "Country Rifle"},{358, "Sniper Rifle"},{359, "Rocket Launcher"},{360, "HS Rocket Launcher"},
    {361, "Flamethrower"},{362, "Minigun"},{363, "Satchel Charge"},{364, "Detonator"},{365, "Spraycan"},{366, "Fire Extinguisher"},{367, "Camera"},
    {368, "Nightvision Goggles"},{369, "Thermal Goggles"},{371, "Parachute"}
    };
    Ausserdem würd dein befehl nicht funktionieren da er direkt nach dem ersten schleifendurchlauf schon beendet wird durch das else return. Und du gibst die Waffe immer dem Spieler den den Befehl ausführt (playerid) und nicht dem, der als Spieler angegeben wurde (pid).
    Ich würde es so machen:
    dcmd_waffe(playerid, params[])
    {
    new pid, waffe[32], muni, string[128];
    if(sscanf(params, "us[32]i", pid, waffe, muni)) return SendClientMessage(playerid, COLOR_GRAU, "Verwendung: /waffe [Spieler/ID] [Waffe] [Munition]");
    for(new i = 0; i < 44; i++)
    {
    if(strfind(aWeaponNames[i][weaponName], waffe, true) != -1)
    {
    GivePlayerWeapon(pid, aWeaponNames[i][weaponID], muni);
    format(string,sizeof(string),"Du hast die Waffe %s mit %d Munition bekommen!",aWeaponNames[i][weaponName], muni);
    SendClientMessage(pid, COLOR_GRAU, string);
    return 1;
    }
    }
    format(string,sizeof(string),"Es wurde keine Waffe mit namen '%s' gefunden!",waffe);
    SendClientMessage(playerid, COLOR_GRAU, string);
    return 1;
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Ja ich hab 3 genommen denn als ich 2 geschrieben habe hab ich zusätzlich diesen Fehler bekommen:
    error 032: array index out of bounds (variable "aWeaponNames")


    Und den Befehl konnt ich ja noch nich richtig testen xD
    Hab grad gemerkt das ich das mit pid nicht machen wollte ^^


    Ja und nun hab ich genau so mit dem enum und hab jetzt diesen Fehler xD
    error 052: multi-dimensional arrays must be fully initialized


    Codes
    enum WeaponData
    {
    WeaponID,
    WeaponName[32]
    };


    new aWeaponNames[44][WeaponData] = {
    {331, "Brass Knuckles"},{333, "Golf Club"},{334, "Nite Stick"},{335, "Knife"},{336, "Baseball Bat"},{337, "Shovel"},{338, "Pool Cue"},
    {339, "Katana"},{341, "Chainsaw"},{321, "Purple Dildo"},{322, "Small White Vibrator"},{323, "Large White Vibrator"},{324, "Silver Vibrator"},
    {325, "Flowers"},{326, "Cane"},{342, "Grenade"},{343, "Tear Gas"},{344, "Molotov Cocktail"},{346, "9mm"},{347, "Silenced 9mm"},
    {348, "Desert Eagle"},{349, "Shotgun"},{350, "Sawn-off Shotgun"},{351, "Combat Shotgun"},{352, "Micro SMG"},{353, "MP5"},{355, "AK-47"},
    {356, "M4"},{372, "Tec9"},{357, "Country Rifle"},{358, "Sniper Rifle"},{359, "Rocket Launcher"},{360, "HS Rocket Launcher"},
    {361, "Flamethrower"},{362, "Minigun"},{363, "Satchel Charge"},{364, "Detonator"},{365, "Spraycan"},{366, "Fire Extinguisher"},{367, "Camera"},
    {368, "Nightvision Goggles"},{369, "Thermal Goggles"},{371, "Parachute"}
    };


    dcmd_waffe(playerid, params[])
    {
    new waffe[32], muni;
    if(sscanf(params, "s[32]i", waffe, muni)) return SendClientMessage(playerid, COLOR_GRAU, "Verwendung: /waffe [Waffe] [Munition]");
    for(new i = 0; i < 43; i++)
    {
    if(strfind(aWeaponNames[i][WeaponName], waffe, true) != -1)
    {
    GivePlayerWeapon(playerid, aWeaponNames[i][WeaponID], muni);
    return 1;
    }
    }
    return SendClientMessage(playerid, COLOR_GRAU, "Ungültige Waffe!");
    }


    edit: oke hab nun das erste mal in meinem Leben einen Fehler mit rumklicken entfernt xD hab die die 44 jetzt entfernt nun is der Fehler behoben
    von aWeaponNames[44][WeaponData] wurde aWeaponNames[][WeaponData]

    2 Mal editiert, zuletzt von VaTeR325 ()

  • Hallo zusammen,


    hab erst grade angefangen zu scripten und habe schon ein problem bei der sache wenn man ein tor auf und zu machen soll.


    Ich habe die Objecte alle eingefügt ins script (vorher umgewandelt (von MTA nach sa:mp)


    nun hab ich bzw versuche ich 2 befehle zu machen vonwegen /auf und /zu da sieht so aus bei mir:


    ocmd:auf(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,20,2237.2810058594, 2452.916015625, 12.449571609497))return SendClientMessage(playerid,DROT,"Du bist nicht in der nähe von einem Tor!");
    MoveObject(tor,2237.2810058594, 2452.916015625+10, 12.449571609497,5);
    return 1;
    }
    ocmd:zu(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,20,2237.2810058594, 2452.916015625, 12.449571609497))return SendClientMessage(playerid,DROT,"Du bist nicht in der nähe von einem Tor!");
    MoveObject(tor,2237.2810058594, 2452.916015625, 12.449571609497,5);
    return 1;
    }


    sooooo.... nun wenn ich kompelieren will kommen 2 errors:


    (560) : warning 203: symbol is never used: "auf"


    (560) : warning 203: symbol is never used: "zu"


    soo und wenn ihr die zeile 560 haben wollt: sry aber das ist eine leere zeile unzwar die letzte in der liste...


    bitte um hilfe. danke im vorraus

  • Hab nen Problem bekomme errors als ich die if abfragen bei OnPlayerPickUpPickup mit switch & case ersetzt habe:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    switch(pickupid)
    {
    case bsnenter: // error zeile
    {
    SetPlayerPos(playerid,365.4714,-73.2430,1001.5078);
    SetPlayerInterior(playerid,10);
    GameTextForPlayer(playerid, "Burger Shot North",3000,4);
    }
    case bsnexit: // error zeile
    {
    SetPlayerPos(playerid,1199.4618,-920.8215,43.1059);
    SetPlayerFacingAngle(playerid,185.7090);
    SetCameraBehindPlayer(playerid);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    }
    }
    return 1;
    }
    Errors:
    Zeile (2150) : error 008: must be a constant expression; assumed zero
    Zeile (2156) : error 008: must be a constant expression; assumed zero