←  Szukam pluginu

AMXX.pl: Support AMX Mod X i SourceMod

»

[Szukam] Licznik zabójstw granatem

  • +
  • -
therealfr0zen's Photo 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ę.
Edited by therealfr0zen, 07.11.2019 23:46.
Quote

  • +
  • -
therealfr0zen's Photo 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
Edited by therealfr0zen, 08.11.2019 18:59.
Quote

  • +
  • -
Deus Vult's Photo 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)
{

Quote

  • +
  • -
therealfr0zen's Photo 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)

Quote

  • +
  • -
Deus Vult's Photo 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?
Edited by Devastator, 09.11.2019 15:05.
Quote

  • +
  • -
therealfr0zen's Photo 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.
Edited by therealfr0zen, 09.11.2019 15:29.
Quote

  • +
  • -
therealfr0zen's Photo 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?
Quote

  • +
  • -
Deus Vult's Photo 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.
Quote

  • +
  • -
therealfr0zen's Photo 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.
Quote

  • +
  • -
Deus Vult's Photo Deus Vult 09.11.2019

Masz

 

a tu skompilowaną wersje

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

Attached Files

Quote

  • +
  • -
therealfr0zen's Photo 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.
Quote

  • +
  • -
Deus Vult's Photo Deus Vult 09.11.2019

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