←  Szukam pluginu

AMXX.pl: Support AMX Mod X i SourceMod

»

[Szukam] Licznik zabójstw granatem

  • +
  • -
therealfr0zen - zdjęcie therealfr0zen 07.11.2019

Witam.

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
Odpowiedz

  • +
  • -
therealfr0zen - zdjęcie therealfr0zen 08.11.2019

Plus za pomysł, ale...

Edytowałem sobie kod w taki sposób:

#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
}

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ć.

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
Odpowiedz

  • +
  • -
Deus Vult - zdjęcie 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)
{

Odpowiedz

  • +
  • -
therealfr0zen - zdjęcie 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)

Odpowiedz

  • +
  • -
Deus Vult - zdjęcie Deus Vult 09.11.2019

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 Devastator edytował ten post 09.11.2019 15:05
Odpowiedz

  • +
  • -
therealfr0zen - zdjęcie therealfr0zen 09.11.2019

Jak kompilujesz lokalnie czy online? Sądząc po błędzie to masz wadliwy kompilator.
Zmieniałeś coś w kodzie prócz tablic?

Nic więcej nie zmieniałem, a kompilowałem online tu na forum.
Użytkownik therealfr0zen edytował ten post 09.11.2019 15:29
Odpowiedz

  • +
  • -
therealfr0zen - zdjęcie therealfr0zen 09.11.2019

Nie mogę edytować postu, a chciałbym zapytać. Może jest ktoś w stanie przerobić powyższy plugin (stattrak) lub napisać od 0, który ma za zadanie naliczać zabójstwa wyłącznie granatem zaczepnym (he), zapisywać ilość zdobytych fragów oraz stwórzyć ranking w motd pod komendą /hetop15?
Odpowiedz

  • +
  • -
Deus Vult - zdjęcie Deus Vult 09.11.2019

Skompiluj lokalnie
https://amxx.pl/topi...ilacja-lokalna/

Jak kompilujesz lokalnie czy online? Sądząc po błędzie to masz wadliwy kompilator.
Zmieniałeś coś w kodzie prócz tablic?

Nic więcej nie zmieniałem, a kompilowałem online tu na forum.
Odpowiedz

  • +
  • -
therealfr0zen - zdjęcie therealfr0zen 09.11.2019

Skompiluj lokalnie
https://amxx.pl/topi...ilacja-lokalna/

Jak kompilujesz lokalnie czy online? Sądząc po błędzie to masz wadliwy kompilator.
Zmieniałeś coś w kodzie prócz tablic?

Nic więcej nie zmieniałem, a kompilowałem online tu na forum.

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.
Odpowiedz

  • +
  • -
Deus Vult - zdjęcie Deus Vult 09.11.2019

Masz

 

a tu skompilowaną wersje

https://www107.zippy...opqJo/file.html

Załączone pliki

Odpowiedz

  • +
  • -
therealfr0zen - zdjęcie therealfr0zen 09.11.2019

Niestety w dalszym ciągu nie działa. Spróbuję to zrobić inspirując się innym pluginem, dzięki za czas i chęć pomocy.
Odpowiedz

  • +
  • -
Deus Vult - zdjęcie Deus Vult 09.11.2019

Bez logów nic nie zdziałam a muszą na pewno być
Odpowiedz