Spoiler
//// stattrak.sma
// C:\Users\Maciej\Desktop\kompilator\stattrak.sma(79) : error 001: expected token: "{", but found "}"
// C:\Users\Maciej\Desktop\kompilator\stattrak.sma(79) : error 008: must be a constant expression; assumed zero
// C:\Users\Maciej\Desktop\kompilator\stattrak.sma(100) : error 032: array index out of bounds (variable "nativesData")
// C:\Users\Maciej\Desktop\kompilator\stattrak.sma(79) : error 001: expected token: "{", but found "}"
// C:\Users\Maciej\Desktop\kompilator\stattrak.sma(79) : error 008: must be a constant expression; assumed zero
// C:\Users\Maciej\Desktop\kompilator\stattrak.sma(100) : error 032: array index out of bounds (variable "nativesData")
// C:\Users\Maciej\Desktop\kompilator\stattrak.sma(270) : error 017: undefined symbol "fmt"
Witam, posiadam plugin Stattrak znaleziony tutaj na forum, jest przerobiony aby widniał w HUD jako jedna linijka, lecz niestety sie nie kompiluje. Moglyby ktos pomoc?
Spoiler
#include
#include
#include
#include
#define AUTHOR "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[][] =
{
"/stattrak"
};
new const weaponsData[][] =
{
"AK47",
"M4A1",
"AWP",
"MP5",
"FAMAS",
"AUG",
"MAC10",
"SG550",
"UMP45",
"GALIL",
"P90",
"TMP",
"M249",
"XM1014",
"M3",
"SCOUT",
"AWP",
"G3SG1 (autokampa)",
"SG552 (autokampa)",
"USP",
"GLOCK18",
"DEAGLE",
"ELITE",
"P228",
"FIVESEVEN",
"NOZ"
};
new const weaponIndexes[] =
{
CSW_AK47,
CSW_M4A1,
CSW_AWP,
CSW_MP5NAVY,
CSW_FAMAS,
CSW_AUG,
CSW_MAC10,
CSW_SG550,
CSW_UMP45,
CSW_GALI,
CSW_TMP,
CSW_P90,
CSW_M249,
CSW_XM1014,
CSW_M3,
CSW_SCOUT,
CSW_AWP,
CSW_G3SG1,
CSW_SG552,
CSW_USP,
CSW_GLOCK18,
CSW_DEAGLE,
CSW_ELITE,
CSW_P228,
CSW_FIVESEVEN,
CSW_KNIFE
};
new const nativesData[][][] =
{
{ "get_user_kills_on_weapon", "native_get_user_kills_on_weapon", 1 },
};
new userStatTrak[33][33],
vaultFile;
public plugin_init()
{
register_plugin("Stattrak", "v1.0", AUTHOR);
registerCommands(statTrakMenuCommands, sizeof(statTrakMenuCommands), "statTrakMenu");
register_event("DeathMsg", "playerDeathEvent", "a");
vaultFile = nvault_open("statTrak");
}
public plugin_natives()
{
ForArray(i, nativesData)
{
register_native(nativesData[i][0], nativesData[i][1], nativesData[i][2][0]);
}
}
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:", "statTrakMenu_handler"),
item[48],
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);
}
public client_disconnect(index)
{
saveData(index);
}
saveData(index)
{
new userName[33],
vaultKey[33],
vaultData[64];
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[64],
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;
}
public GetUserWeapon(id, wid)
{
const m_pActiveItem = 373;
const m_iId = 43;
if(!is_user_alive(id) || pev_valid((wid = get_pdata_cbase(id, m_pActiveItem, 5))) != 2)
{
return 0;
}
return get_pdata_int(wid, m_iId, 4);
}
//Stocks
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
}
stock get_user_kills_on_weapon(index)
{
if(!is_user_connected(index))
{
return 0;
}
new wid,
weapon = GetUserWeapon(index, wid);
return userStatTrak[index][weapon];
}
//Natives
public native_get_user_kills_on_weapon(index)
{
return get_user_kills_on_weapon(index);
}
#include
#include
#include
#define AUTHOR "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[][] =
{
"/stattrak"
};
new const weaponsData[][] =
{
"AK47",
"M4A1",
"AWP",
"MP5",
"FAMAS",
"AUG",
"MAC10",
"SG550",
"UMP45",
"GALIL",
"P90",
"TMP",
"M249",
"XM1014",
"M3",
"SCOUT",
"AWP",
"G3SG1 (autokampa)",
"SG552 (autokampa)",
"USP",
"GLOCK18",
"DEAGLE",
"ELITE",
"P228",
"FIVESEVEN",
"NOZ"
};
new const weaponIndexes[] =
{
CSW_AK47,
CSW_M4A1,
CSW_AWP,
CSW_MP5NAVY,
CSW_FAMAS,
CSW_AUG,
CSW_MAC10,
CSW_SG550,
CSW_UMP45,
CSW_GALI,
CSW_TMP,
CSW_P90,
CSW_M249,
CSW_XM1014,
CSW_M3,
CSW_SCOUT,
CSW_AWP,
CSW_G3SG1,
CSW_SG552,
CSW_USP,
CSW_GLOCK18,
CSW_DEAGLE,
CSW_ELITE,
CSW_P228,
CSW_FIVESEVEN,
CSW_KNIFE
};
new const nativesData[][][] =
{
{ "get_user_kills_on_weapon", "native_get_user_kills_on_weapon", 1 },
};
new userStatTrak[33][33],
vaultFile;
public plugin_init()
{
register_plugin("Stattrak", "v1.0", AUTHOR);
registerCommands(statTrakMenuCommands, sizeof(statTrakMenuCommands), "statTrakMenu");
register_event("DeathMsg", "playerDeathEvent", "a");
vaultFile = nvault_open("statTrak");
}
public plugin_natives()
{
ForArray(i, nativesData)
{
register_native(nativesData[i][0], nativesData[i][1], nativesData[i][2][0]);
}
}
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:", "statTrakMenu_handler"),
item[48],
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);
}
public client_disconnect(index)
{
saveData(index);
}
saveData(index)
{
new userName[33],
vaultKey[33],
vaultData[64];
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[64],
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;
}
public GetUserWeapon(id, wid)
{
const m_pActiveItem = 373;
const m_iId = 43;
if(!is_user_alive(id) || pev_valid((wid = get_pdata_cbase(id, m_pActiveItem, 5))) != 2)
{
return 0;
}
return get_pdata_int(wid, m_iId, 4);
}
//Stocks
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
}
stock get_user_kills_on_weapon(index)
{
if(!is_user_connected(index))
{
return 0;
}
new wid,
weapon = GetUserWeapon(index, wid);
return userStatTrak[index][weapon];
}
//Natives
public native_get_user_kills_on_weapon(index)
{
return get_user_kills_on_weapon(index);
}
Użytkownik peja222 edytował ten post 12.02.2023 16:30