[Szukam] Licznik zabójstw granatem
therealfr0zen
07.11.2019
Szukałem, ale nie znalazłem więc postanowiłem, że zapytam. Otóż szukam pluginu (o ile taki jest, jeśli nie, będę wdzięczny za kod), który ma za zadanie naliczać zabójstwa z granatów (he). Może być to coś na wzór /top15, tzn. po wpisaniu odpowiedniej komendy na say (np. /granat) otwierałoby się okno motd z przykładowymi informacjami:
Łączna ilość zabójstw: X
Łączna ilość zadanych obrażeń: X
lub
po wpisaniu odpowiedniej komendy (w/w) na czacie pojawiałaby się przykładowa informacja:
say /granat
Zdobyłeś X zabójstw z granatów odłamkowych.
Za każdą pomoc z góry dziękuję.
Użytkownik therealfr0zen edytował ten post 07.11.2019 23:46
therealfr0zen
08.11.2019
Edytowałem sobie kod w taki sposób:
Kompiluje się to bez żadnego problemu. Do tego odblokowałem moduł nvault oraz dopisałem oczywiście granat.amxx do plugin.ini,niestety po wpisaniu komendy /granat na serwerze totalnie nic się nie dzieje, a serwer nie wywala żadnych błędów, więc logów nawet nie mogę podać.#include <amxmodx>
#include <nvault>
#define AUTHOR "Alelluja | aSior - amxx.pl/user/60210-asiorr/"
#define ForRange(%1,%2,%3) for(new %1 = %2; %1 <= %3; %1++)
#define ForArray(%1,%2) for(new %1 = 0; %1 < sizeof %2; %1++)
new const statTrakMenuCommands[][] =
{
"/granat"
};
new const weaponsData[][] =
{
"Fragi"
};
new const weaponIndexes[] =
{
"CSW_HEGRANADE"
};
new userStatTrak[33][33],
vaultFile;
public plugin_init()
{
register_plugin("Stattrak CSGO", "v0.1", AUTHOR);
registerCommands(statTrakMenuCommands, charsmax(statTrakMenuCommands), "statTrakMenu");
register_event("DeathMsg", "playerDeathEvent", "a");
vaultFile = nvault_open("statTrak");
}
public playerDeathEvent()
{
new killer = read_data(1),
victim = read_data(2),
weaponName[33],
weaponIndex;
if(killer == victim || !is_user_connected(killer) || !is_user_connected(victim))
{
return;
}
read_data(4, weaponName, charsmax(weaponName));
format(weaponName, charsmax(weaponName), "weapon_%s", weaponName);
weaponIndex = get_weaponid(weaponName);
if(!weaponIndex || !inArray(weaponIndex, weaponIndexes, sizeof(weaponIndexes)))
{
return;
}
userStatTrak[killer][weaponIndex]++;
saveData(killer)
}
public statTrakMenu(index)
{
new menuIndex = menu_create("Menu StatTrak:", "statTrakMenu_handler"),
item[64],
menuCallback = menu_makecallback("blockOptions");
ForArray(i, weaponsData)
{
formatex(item, charsmax(item), "\r%s \w--> \rZabojstwa: %i", weaponsData[i], userStatTrak[index][weaponIndexes[i]]);
menu_additem(menuIndex, item, _, _, menuCallback);
}
menu_display(index, menuIndex);
return PLUGIN_HANDLED;
}
public statTrakMenu_handler(id, menu, item)
{
menu_destroy(menu);
if(item == MENU_EXIT)
{
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
public blockOptions(index, menu, item)
{
return ITEM_DISABLED;
}
public client_putinserver(index)
{
readData(index);
}
saveData(index)
{
new userName[33],
vaultKey[33],
vaultData[33];
get_user_name(index, userName, charsmax(userName));
formatex(vaultKey, charsmax(vaultKey), "%s-statTrak", userName);
ForArray(i, weaponIndexes)
{
format(vaultData, charsmax(vaultData), "%s%i#", vaultData, userStatTrak[index][weaponIndexes[i]]);
}
nvault_set(vaultFile, vaultKey, vaultData);
}
readData(index)
{
new userName[33],
vaultKey[33],
vaultData[33],
intValues[30][30];
get_user_name(index, userName, charsmax(userName));
formatex(vaultKey, charsmax(vaultKey), "%s-statTrak", userName);
nvault_get(vaultFile, vaultKey, vaultData, charsmax(vaultData));
explode(vaultData, '#', intValues, charsmax(intValues), sizeof(weaponIndexes))
ForArray(i, weaponIndexes)
{
userStatTrak[index][weaponIndexes[i]] = str_to_num(intValues[i]);
}
}
inArray(value, const array[], arraySize)
{
ForRange(i, 0, arraySize)
{
if(array[i] == value)
{
return true;
}
}
return false;
}
stock explode(const string[],const character,output[][],const maxs,const maxlen)
{
new iDo = 0,
len = strlen(string),
oLen = 0;
do
{
oLen += (1+copyc(output[iDo++],maxlen,string[oLen],character))
}
while(oLen < len && iDo < maxs)
}
stock registerCommands(const array[][], arraySize, function[])
{
#if !defined ForRange
#define ForRange(%1,%2,%3) for(new %1 = %2; %1 <= %3; %1++)
#endif
#if AMXX_VERSION_NUM >= 183
ForRange(i, 0, arraySize - 1)
{
ForRange(j, 0, 1)
{
register_clcmd(fmt("%s %s", !j ? "say" : "say_team", array[i]), function);
}
}
#else
new newCommand[33];
ForRange(i, 0, arraySize - 1)
{
ForRange(j, 0, 1)
{
formatex(newCommand, charsmax(newCommand), "%s %s", !j ? "say" : "say_team", array[i]);
register_clcmd(newCommand, function);
}
}
#endif
}
Ma ktoś jakiś pomysł co mogło pójść nie tak?
@edit
Sprawdzane na serwerze testowym z wersją amx 1.8.3
Użytkownik therealfr0zen edytował ten post 08.11.2019 18:59
Deus Vult
09.11.2019
#include <amxmodx> #include <nvault> #define AUTHOR "Alelluja | aSior - amxx.pl/user/60210-asiorr/" #define ForRange(%1,%2,%3) for(new %1 = %2; %1 <= %3; %1++) #define ForArray(%1,%2) for(new %1 = 0; %1 < sizeof %2; %1++) new const statTrakMenuCommands[][] = { "/granat" }; new const weaponsData[][] = { "Fragi" }; new const weaponIndexes[] = { CSW_HEGRANADE }; new userStatTrak[33][33], vaultFile; public plugin_init() { register_plugin("Stattrak CSGO", "v0.1", AUTHOR); registerCommands(statTrakMenuCommands, charsmax(statTrakMenuCommands), "statTrakMenu"); register_event("DeathMsg", "playerDeathEvent", "a"); vaultFile = nvault_open("statTrak"); } public playerDeathEvent() { new killer = read_data(1), victim = read_data(2), weaponName[33], weaponIndex; if(killer == victim || !is_user_connected(killer) || !is_user_connected(victim)) { return; } read_data(4, weaponName, charsmax(weaponName)); format(weaponName, charsmax(weaponName), "weapon_%s", weaponName); weaponIndex = get_weaponid(weaponName); if(!weaponIndex || !inArray(weaponIndex, weaponIndexes, sizeof(weaponIndexes))) { return; } userStatTrak[killer][weaponIndex]++; saveData(killer) } public statTrakMenu(index) { new menuIndex = menu_create("Menu StatTrak:", "statTrakMenu_handler"), item[64], menuCallback = menu_makecallback("blockOptions"); ForArray(i, weaponsData) { formatex(item, charsmax(item), "\r%s \w--> \rZabojstwa: %i", weaponsData[i], userStatTrak[index][weaponIndexes[i]]); menu_additem(menuIndex, item, _, _, menuCallback); } menu_display(index, menuIndex); return PLUGIN_HANDLED; } public statTrakMenu_handler(id, menu, item) { menu_destroy(menu); if(item == MENU_EXIT) { return PLUGIN_HANDLED; } return PLUGIN_HANDLED; } public blockOptions(index, menu, item) { return ITEM_DISABLED; } public client_putinserver(index) { readData(index); } saveData(index) { new userName[33], vaultKey[33], vaultData[33]; get_user_name(index, userName, charsmax(userName)); formatex(vaultKey, charsmax(vaultKey), "%s-statTrak", userName); ForArray(i, weaponIndexes) { format(vaultData, charsmax(vaultData), "%s%i#", vaultData, userStatTrak[index][weaponIndexes[i]]); } nvault_set(vaultFile, vaultKey, vaultData); } readData(index) { new userName[33], vaultKey[33], vaultData[33], intValues[30][30]; get_user_name(index, userName, charsmax(userName)); formatex(vaultKey, charsmax(vaultKey), "%s-statTrak", userName); nvault_get(vaultFile, vaultKey, vaultData, charsmax(vaultData)); explode(vaultData, '#', intValues, charsmax(intValues), sizeof(weaponIndexes)) ForArray(i, weaponIndexes) { userStatTrak[index][weaponIndexes[i]] = str_to_num(intValues[i]); } } inArray(value, const array[], arraySize) { ForRange(i, 0, arraySize) {
therealfr0zen
09.11.2019
#include <amxmodx> #include <nvault> #define AUTHOR "Alelluja | aSior - amxx.pl/user/60210-asiorr/" #define ForRange(%1,%2,%3) for(new %1 = %2; %1 <= %3; %1++) #define ForArray(%1,%2) for(new %1 = 0; %1 < sizeof %2; %1++) new const statTrakMenuCommands[][] = { "/granat" }; new const weaponsData[][] = { "Fragi" }; new const weaponIndexes[] = { CSW_HEGRANADE }; new userStatTrak[33][33], vaultFile; public plugin_init() { register_plugin("Stattrak CSGO", "v0.1", AUTHOR); registerCommands(statTrakMenuCommands, charsmax(statTrakMenuCommands), "statTrakMenu"); register_event("DeathMsg", "playerDeathEvent", "a"); vaultFile = nvault_open("statTrak"); } public playerDeathEvent() { new killer = read_data(1), victim = read_data(2), weaponName[33], weaponIndex; if(killer == victim || !is_user_connected(killer) || !is_user_connected(victim)) { return; } read_data(4, weaponName, charsmax(weaponName)); format(weaponName, charsmax(weaponName), "weapon_%s", weaponName); weaponIndex = get_weaponid(weaponName); if(!weaponIndex || !inArray(weaponIndex, weaponIndexes, sizeof(weaponIndexes))) { return; } userStatTrak[killer][weaponIndex]++; saveData(killer) } public statTrakMenu(index) { new menuIndex = menu_create("Menu StatTrak:", "statTrakMenu_handler"), item[64], menuCallback = menu_makecallback("blockOptions"); ForArray(i, weaponsData) { formatex(item, charsmax(item), "\r%s \w--> \rZabojstwa: %i", weaponsData[i], userStatTrak[index][weaponIndexes[i]]); menu_additem(menuIndex, item, _, _, menuCallback); } menu_display(index, menuIndex); return PLUGIN_HANDLED; } public statTrakMenu_handler(id, menu, item) { menu_destroy(menu); if(item == MENU_EXIT) { return PLUGIN_HANDLED; } return PLUGIN_HANDLED; } public blockOptions(index, menu, item) { return ITEM_DISABLED; } public client_putinserver(index) { readData(index); } saveData(index) { new userName[33], vaultKey[33], vaultData[33]; get_user_name(index, userName, charsmax(userName)); formatex(vaultKey, charsmax(vaultKey), "%s-statTrak", userName); ForArray(i, weaponIndexes) { format(vaultData, charsmax(vaultData), "%s%i#", vaultData, userStatTrak[index][weaponIndexes[i]]); } nvault_set(vaultFile, vaultKey, vaultData); } readData(index) { new userName[33], vaultKey[33], vaultData[33], intValues[30][30]; get_user_name(index, userName, charsmax(userName)); formatex(vaultKey, charsmax(vaultKey), "%s-statTrak", userName); nvault_get(vaultFile, vaultKey, vaultData, charsmax(vaultData)); explode(vaultData, '#', intValues, charsmax(intValues), sizeof(weaponIndexes)) ForArray(i, weaponIndexes) { userStatTrak[index][weaponIndexes[i]] = str_to_num(intValues[i]); } } inArray(value, const array[], arraySize) { ForRange(i, 0, arraySize) {
Błąd przy kompilacji.
Wystąpił nieznany błąd (134)
Deus Vult
09.11.2019
Zmieniałeś coś w kodzie prócz tablic?
Użytkownik Devastator edytował ten post 09.11.2019 15:05
therealfr0zen
09.11.2019
Nic więcej nie zmieniałem, a kompilowałem online tu na forum.Jak kompilujesz lokalnie czy online? Sądząc po błędzie to masz wadliwy kompilator.
Zmieniałeś coś w kodzie prócz tablic?
Użytkownik therealfr0zen edytował ten post 09.11.2019 15:29
therealfr0zen
09.11.2019
Deus Vult
09.11.2019
https://amxx.pl/topi...ilacja-lokalna/
Nic więcej nie zmieniałem, a kompilowałem online tu na forum.Jak kompilujesz lokalnie czy online? Sądząc po błędzie to masz wadliwy kompilator.
Zmieniałeś coś w kodzie prócz tablic?
therealfr0zen
09.11.2019
Skompiluj lokalnie
https://amxx.pl/topi...ilacja-lokalna/Nic więcej nie zmieniałem, a kompilowałem online tu na forum.Jak kompilujesz lokalnie czy online? Sądząc po błędzie to masz wadliwy kompilator.
Zmieniałeś coś w kodzie prócz tablic?
Niestety nie mam takiej możliwości, z tego względu, że nie mam dostępu do komputera. Jeśli byłbyś tak miły i podesłał gotowe, skomplikowane, działające pliki .sma oraz .amx to będę Ci wdzięczny.