Wie kann ich machen das der befehl auch mit den namen funktioniert?
funktion GetWeaponModelIDFromName(params); und die waffennamen habe ich schon nur komme irgendwie net weiter..
YCMD:weapon(playerid, params[], help)
{
if(help) return SendClientMessage(playerid, yellow, "[HELP]: Give you a weapon");
if(isnull(params)) return SendClientMessage(playerid, cyanblue, "[USAGE]: /weapon [WEAPONID] [ammo]" );
new wid, ammo, wstr[128];
if(sscanf(params, "ii", wid, ammo)) return SendClientMessage(playerid, red, "Syntax Error: [WEAPONID/NAME] [ammo] ");
GivePlayerWeapon(playerid, wid, ammo);
format(wstr,sizeof(wstr),"[SUCCESS]: You were given [WEAPONID: %d] [AMMO: %d].",wid, ammo);
SendClientMessage(playerid, green, wstr);
return 1;
}
/weapon [id/name] [ammo]
- SkaterDenis
- Geschlossen
- Erledigt
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
-
-
s(tring) statt i(nteger) verwenden und die Funktionen in If-Abfragen einbauen.
-
Warum soll ich kein integer verwenden?
Also ich habe das jetzt so.. Funktioniert zwar wollte aber trotzdem nachfragen ob das so richtig ist?
#define MIN_WEAPON_ID 0
#define MAX_WEAPON_ID 47new WeaponNames[48][] = {
{"Unarmed Fist"}, {"Brass Knuckles"}, {"Golf Club"}, {"Night Stick"}, {"Knife"}, {"Baseball Bat"},
{"Shovel"}, {"Pool Cue"}, {"Katana"}, {"Chainsaw"}, {"Purple Dildo"}, {"Big White Vibrator"},
{"Medium White Vibrator"}, {"Small White Vibrator"}, {"Flowers"}, {"Cane"}, {"Grenade"}, {"Teargas"},
{"Molotov"}, {" "}, {" "}, {" "}, {"Colt 45"}, {"Colt 45 Silenced"}, {"Desert Eagle"}, {"Shotgun"},
{"Sawnoff Shotgun"}, {"Combat Shotgun"}, {"Micro Uzi Mac 10"}, {"MP5"}, {"AK47"}, {"M4"}, {"Tec9"},
{"Country Rifle"}, {"Sniper Rifle"}, {"Rocket Launcher"}, {"Heat Seeking Rocket Launcher"},
{"Flamethrower"}, {"Minigun"}, {"Satchel Charge"}, {"Detonator"}, {"Spray Can"}, {"Fire Extinguisher"},
{"Camera"}, {"Night Vision Goggles"}, {"Infrared Vision Goggles"}, {"Parachute"}, {"Fake Pistol"}
};YCMD:weapon(playerid, params[], help)
{
if(help) return SendClientMessage(playerid, yellow, "[HELP]: Give you a weapon");
if(isnull(params)) return SendClientMessage(playerid, cyanblue, "[USAGE]: /weapon [WEAPONID/NAME] [ammo]" );
new wid, wname[128], ammo = 500, wstr[128];
if(!sscanf(params, "ii", wid, ammo))
{
}
else if(!sscanf(params, "s[128]i", wname, ammo))
{
wid = GetWeaponModelIDFromName(wname);
}
else
{
if(!sscanf(params, "i", wid))
{
}
else if(!sscanf(params, "s[128]", wname))
{
wid = GetWeaponModelIDFromName(wname);
}
}
if(wid == -1) return SendClientMessage(playerid, red, "[ERROR]: Invalid WEAPONNAME");
if(wid < MIN_WEAPON_ID || wid > MAX_WEAPON_ID || wid == 19 || wid == 20 || wid == 21) return SendClientMessage(playerid, red, "[ERROR]: Invalid WEAPONID");
GivePlayerWeapon(playerid, wid, ammo);
format(wstr,sizeof(wstr),"[SUCCESS]: You were given a [%s] [WEAPONID: %d] [AMMO: %d]", WeaponNames[wid], wid, ammo);
SendClientMessage(playerid, green, wstr);
return 1;
} -
Da die Eingabe von einem Waffennamen nunmal ein String und keine Zahl ist.
-
//EDIT
Ja schon klar!
Aber ich brauch ja nicht nur die string Abfrage wegen (waffen namen) sodern auch den Integer wegen (waffenids) ?!??
Sind die 4 sscanf abfragen so wirklich nötig oder kann man das noch irgendwie kürzen???
Sonst funktioniert eig alles bis auf das man nicht die Colt 45 Silenced per waffen namen spawnen kann.. man bekommt ne normale mit 45 munni.. -
Ich zeig dir mal wie ich da sganze in meinem selfmade habe.
Als erstes habe ich ein 2 Dimensionales Array erstellt mit gepackten strings daher wird auch char verwendet un dieses ausrufezeichen der Vorteil daran es wird weniger memory benötigt
pro Zelle 1 Bit da nur werte von 0 - 254 gespeichert werden können aufgrund der verwendung von char was den datentyp ändert.
Das const steht für einen konstanten werden was zusätzlich beim ausführen von funktionen den dynamischen memory reduziert.stock const WeaponNames[44][20 char] = {
!"Unarmed",!"Brass Knuckles",!"Golf Club",!"Night Stick",!"Knife",!"Baseball Bat",!"Shovel",!"Katana",
!"Chainsaw",!"Purple Dildo",!"White Dildo",!"Long White Dildo",!"White Dildo 2",!"Flowers",!"Cane",
!"Grenades",!"Tear Gas",!"Molotovs",!"Pistol",!"Silenced Pistol",!"Desert Eagle",!"Shotgun",!"Sawn Off Shotgun",
!"Combat Shotgun",!"Micro Uzi",!"Mac 10",!"MP5",!"AK47",!"M4",!"Tec9",!"Rifle",!"Sniper Rifle",!"RPG",!"Missile Launcher",
!"Flame Thrower",!"Minigun",!"Sachel Charges",!"Detonator",!"Spray Paint",!"Fire Extinguisher",!"Camera",
!"Nightvision Goggles",!"Thermal Goggles",!"Parachute"
};Nun zum Befehl:
CMD->giveweapon(playerid,params[]){
new gun[3];
if(sscanf(params,"uk<weapon>d",gun[0],gun[1],gun[2]))return SendClientMessage(playerid,-1,"Benutze: /giveweapon [ID/Name] [Munition]");
else if(!IsPlayerConnected(gun[0]))return SendClientMessage(playerid,COLOR_YELLOW,"Der Spieler ist nicht Online!");
else if(gun[1] == -1)return SendClientMessage(playerid,COLOR_RED,"Falsche Waffenid");
GivePlayerWeapon(gun[0],gun[1],gun[2]);
new string[20];
strunpack(string,WeaponNames[(gun[1]-(18 > gun[1])?(3):(0))]);
format(ALLSTRING,64,"Du hast dir eine %s mit %d Schuss gegeben",string,gun[2]);
SendClientMessage(gun[0],COLOR_GREEN,ALLSTRING);
return 1;
}
Ich verwende hier mein eigenen CMD prozessor daher CMD-> das wichtige ist heir der specifer k<weapon> das bedeutet das du einen eigenen specifer erstellen kannst der sieht so aus und ist schon standartmäßig in der sscanf2 include vorhanden daher benutze die plugin version also sscanf 2.8.1
SSCANF:weapon(string[])
{
new ret = strval(string);
if (0 <= ret <= 18 || 22 <= ret <= 46)return ret;
else if (!strcmp(string, "Unarmed")) return 0;
else if (!strcmp(string, "Brass Knuckles")) return 1;
else if (!strcmp(string, "Golf Club")) return 2;
else if (!strcmp(string, "Night Stick")) return 3;
else if (!strcmp(string, "Knife")) return 4;
else if (!strcmp(string, "Baseball Bat")) return 5;
else if (!strcmp(string, "Shovel")) return 6;
else if (!strcmp(string, "Pool cue")) return 7;
else if (!strcmp(string, "Katana")) return 8;
else if (!strcmp(string, "Chainsaw")) return 9;
else if (!strcmp(string, "Purple Dildo")) return 10;
else if (!strcmp(string, "White Dildo")) return 11;
else if (!strcmp(string, "Long White Dildo")) return 12;
else if (!strcmp(string, "White Dildo 2")) return 13;
else if (!strcmp(string, "Flowers")) return 14;
else if (!strcmp(string, "Cane")) return 15;
else if (!strcmp(string, "Grenades")) return 16;
else if (!strcmp(string, "Tear Gas")) return 17;
else if (!strcmp(string, "Molotovs")) return 18;
else if (!strcmp(string, "Pistol")) return 22;
else if (!strcmp(string, "Silenced Pistol")) return 23;
else if (!strcmp(string, "Desert Eagle")) return 24;
else if (!strcmp(string, "Shotgun")) return 25;
else if (!strcmp(string, "Sawn Off Shotgun")) return 26;
else if (!strcmp(string, "Combat Shotgun")) return 27;
else if (!strcmp(string, "Micro Uzi")) return 28;
else if (!strcmp(string, "Mac 10")) return 28;
else if (!strcmp(string, "MP5")) return 29;
else if (!strcmp(string, "AK47")) return 30;
else if (!strcmp(string, "M4")) return 31;
else if (!strcmp(string, "Tec9")) return 32;
else if (!strcmp(string, "Rifle")) return 33;
else if (!strcmp(string, "Sniper Rifle")) return 34;
else if (!strcmp(string, "RPG")) return 35;
else if (!strcmp(string, "Missile Launcher")) return 36;
else if (!strcmp(string, "Flame Thrower")) return 37;
else if (!strcmp(string, "Minigun")) return 38;
else if (!strcmp(string, "Sachel Charges")) return 39;
else if (!strcmp(string, "Detonator")) return 40;
else if (!strcmp(string, "Spray Paint")) return 41;
else if (!strcmp(string, "Fire Extinguisher")) return 42;
else if (!strcmp(string, "Camera")) return 43;
else if (!strcmp(string, "Nightvision Goggles")) return 44;
else if (!strcmp(string, "Thermal Goggles")) return 45;
else if (!strcmp(string, "Parachute")) return 46;
return -1;
}Was halt ein kleiner nachteil ist um memory zu sparen benutz ich hier ein ternären operator
WeaponNames[(gun[1]-(18 > gun[1])?(3):(0))]
Da gewisse waffenids nicht gefüllt sind also nummern werden hier übersprungen. -
breadfish.de
Hat das Thema geschlossen.