#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#pragma semicolon 1
#define PLUGIN "KnifeSystem"
#define VERSION "1.0.0"
#define AUTHOR "Akosch:."
#define SLOT 32
#define MAXLEVEL 50
#define KNIVES 10
#define ADDFLAG ADMIN_CVAR
#define XPMIN 10
#define XPMAX 20
enum _:eKnifeDatas
{
mName[32],
mModel[32],
mLevel,
Float:mSpeed,
Float:mGravity,
Float:mDamage,
mKnockback,
mHealth,
mVisibly
};
enum _:ePlayerInfo
{
mPlayerLevel,
mPlayerXp,
mPlayerPoints
};
new g_eKnives[KNIVES][eKnifeDatas], g_ePlayerInfo[SLOT + 1][ePlayerInfo];
new g_iLevels[MAXLEVEL], g_iSelected[SLOT + 1], g_iTarget[SLOT + 1], g_pCvar[9], g_iOpening;
stock const g_sServerPrefix[] = {"[Információ]"};
stock const g_sServerSaveFile[] = {"ServerDatas.ini"};
stock const g_sPlayerSaveFile[] = {"PlayerDatas.ini"};
public plugin_init()
{
RegisterHam(Ham_Spawn, "player", "fwdSpawnPost", 1);
RegisterHam(Ham_TakeDamage, "player", "fwdDamagePre", 0);
RegisterHam(Ham_Killed, "player", "fwdDeathPost", 1);
register_event("CurWeapon", "eWeapon", "be", "1=1");
register_clcmd("drop", "MainMenu");
register_clcmd("say /menu", "MainMenu");
register_clcmd("POINT", "Give");
register_clcmd("POINT_ADD", "Add");
g_pCvar[0] = register_cvar("kill_messages", "0");
g_pCvar[1] = register_cvar("kill_xp", "1");
g_pCvar[2] = register_cvar("kill_point", "2");
g_pCvar[3] = register_cvar("hs_xp", "3");
g_pCvar[4] = register_cvar("hs_point", "4");
g_pCvar[5] = register_cvar("hp_prise", "100");
g_pCvar[6] = register_cvar("armor_prise", "75");
g_pCvar[7] = register_cvar("xp_prise", "150");
g_pCvar[8] = register_cvar("gambling_prise", "125");
register_plugin(PLUGIN, VERSION, AUTHOR);
LoadServerDatas();
}
public plugin_end()
{
SaveServerDatas();
}
public plugin_precache()
{
new sData[10][32], sBuffer[256], sFile[64], pFile, i;
get_configsdir(sFile, charsmax(sFile));
format(sFile, charsmax(sFile), "%s/knives.txt", sFile);
pFile = fopen(sFile, "rt");
if(pFile)
{
while(!feof(pFile))
{
fgets(pFile, sBuffer, charsmax(sBuffer));
parse(sBuffer, sData[0], 31, sData[1], 31, sData[2], 31, sData[3], 31, sData[4], 31, sData[5], 31, sData[6], 31, sData[7], 31, sData[8], 31);
copy(g_eKnives[i][mName], 31, sData[0]);
if(ValidMdl(sData[1]))
{
copy(g_eKnives[i][mModel], 31, sData[1]);
precache_model(g_eKnives[i][mModel]);
}
else
copy(g_eKnives[i][mModel], 31, "models/v_knife.mdl");
g_eKnives[i][mLevel] = str_to_num(sData[2]);
g_eKnives[i][mSpeed] = _:str_to_float(sData[3]);
g_eKnives[i][mGravity] = _:str_to_float(sData[4]);
g_eKnives[i][mDamage] = _:str_to_float(sData[5]);
g_eKnives[i][mKnockback] = str_to_num(sData[6]);
g_eKnives[i][mHealth] = str_to_num(sData[7]);
g_eKnives[i][mVisibly] = str_to_num(sData[8]);
i++;
}
fclose(pFile);
}
else
write_file(sFile, "^"Default^" ^"models/v_knife.mdl^" ^"0^" ^"250.0^" ^"1.0^" ^"1.0^" ^"0^" ^"0^" ^"255^"");
get_configsdir(sFile, charsmax(sFile));
format(sFile, charsmax(sFile), "%s/levels.txt", sFile);
pFile = fopen(sFile, "rt");
if(pFile)
{
i = 0;
while(!feof(pFile))
{
fgets(pFile, sBuffer, charsmax(sBuffer));
g_iLevels[i] = str_to_num(sBuffer);
i++;
}
fclose(pFile);
}
else
write_file(sFile, "1");
}
public client_connect(id)
{
LoadPlayerDatas(id);
}
public client_disconnect(id)
{
SavePlayerDatas(id);
}
public fwdDamagePre(victim, inflictor, attacker, Float:damage)
{
if(is_user_alive(attacker) && is_user_alive(victim))
{
SetHamParamFloat(4, damage * g_eKnives[g_iSelected[attacker]][mDamage]);
if(g_eKnives[g_iSelected[attacker]][mKnockback] > 0.0 && get_user_team(attacker) != get_user_team(victim))
{
new Float:fVec[3];
new Float:fOldVelo[3];
pev(victim, pev_velocity, fOldVelo);
create_velocity_vector(victim, attacker, fVec);
fVec[0] += fOldVelo[0];
fVec[1] += fOldVelo[1];
set_pev(victim, pev_velocity,fVec);
}
}
}
public fwdSpawnPost(id)
{
set_user_health(id, get_user_health(id) + g_eKnives[g_iSelected[id]][mHealth]);
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, g_eKnives[g_iSelected[id]][mVisibly]);
set_pev(id, pev_gravity, g_eKnives[g_iSelected[id]][mGravity]);
}
public fwdDeathPost(iVictim, iKiller)
{
new sName[32];
get_user_name(iVictim, sName, charsmax(sName));
if(get_pdata_int(iVictim, 75) == HIT_HEAD)
{
g_ePlayerInfo[iKiller][mPlayerXp] += get_pcvar_num(g_pCvar[3]);
g_ePlayerInfo[iKiller][mPlayerPoints] += get_pcvar_num(g_pCvar[4]);
if(get_pcvar_num(g_pCvar[0]) == 1)
ColorChat(iKiller, GREEN, "%s ^3%i ^1xp-t és ^3%i ^1pontot kaptál ^3%s fejbelövéséért^4!", g_sServerPrefix, get_pcvar_num(g_pCvar[3]), get_pcvar_num(g_pCvar[4]), sName);
}
else if(iKiller != iVictim && get_user_team(iKiller) != get_user_team(iVictim))
{
g_ePlayerInfo[iKiller][mPlayerXp] += get_pcvar_num(g_pCvar[1]);
g_ePlayerInfo[iKiller][mPlayerPoints] += get_pcvar_num(g_pCvar[2]);
if(get_pcvar_num(g_pCvar[0]) == 1)
ColorChat(iKiller, GREEN, "%s ^3%i ^1xp-t és ^3%i ^1pontot kaptál ^3%s megöléséért^4!", g_sServerPrefix, get_pcvar_num(g_pCvar[1]), get_pcvar_num(g_pCvar[2]), sName);
}
LevelUp(iKiller);
}
public eWeapon(id)
{
set_pev(id, pev_gravity, g_eKnives[g_iSelected[id]][mGravity]);
set_user_maxspeed(id, g_eKnives[g_iSelected[id]][mSpeed]);
if(get_user_weapon(id) == CSW_KNIFE)
set_pev(id, pev_viewmodel2, g_eKnives[g_iSelected[id]][mModel]);
}
public MainMenu(id)
{
g_iOpening++;
new sMenu[64], pMenu;
formatex(sMenu, charsmax(sMenu), "Főmenü \r[\wMegnyitások: %i\r]", g_iOpening);
pMenu = menu_create(sMenu, "MainHandler");
menu_additem(pMenu, "Kések", "");
menu_additem(pMenu, "Bolt", "");
menu_additem(pMenu, "Ajándékozás", "");
menu_additem(pMenu, "Játékosok", "");
if(access(id, ADDFLAG))
menu_additem(pMenu, "Addolás", "");
menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
menu_display(id, pMenu, 0);
return PLUGIN_HANDLED;
}
public MainHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
switch(item)
{
case 0: KnifeMenu(id);
case 1: ShopMenu(id);
case 2: GiftMenu(id);
case 3: PlayersMenu(id);
case 4: AddMenu(id);
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public KnifeMenu(id)
{
new sMenu[128], pMenu;
formatex(sMenu, charsmax(sMenu), "Válaszd ki a késed!^n Szinted: %i | Tapasztalatod: %i / %i", g_ePlayerInfo[id][mPlayerLevel], g_ePlayerInfo[id][mPlayerXp], g_iLevels[g_ePlayerInfo[id][mPlayerLevel]]);
pMenu = menu_create(sMenu, "KnifeHandler");
for(new i; i < KNIVES; i++)
{
formatex(sMenu, charsmax(sMenu), "%s \r[\w%i\r]", g_eKnives[i][mName], g_eKnives[i][mLevel]);
menu_additem(pMenu, sMenu, "");
}
menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
menu_display(id, pMenu, 0);
return PLUGIN_HANDLED;
}
public KnifeHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
if(g_ePlayerInfo[id][mPlayerLevel] < g_eKnives[item][mLevel])
{
ColorChat(id, GREEN, "%s ^1Sajnos nincs elég szinted ehhez a késhez^4!", g_sServerPrefix);
menu_display(id, menu, 0);
}
else
{
g_iSelected[id] = item;
strip_user_weapons(id);
give_item(id, "weapon_knife");
ColorChat(id, GREEN, "%s ^3%s ^1kiválasztva, sok sikert^4!", g_sServerPrefix, g_eKnives[item][mName]);
menu_destroy(menu);
}
return PLUGIN_HANDLED;
}
public ShopMenu(id)
{
new sMenu[64], pMenu;
formatex(sMenu, charsmax(sMenu), "Bolt^nPontjaid: %i", g_ePlayerInfo[id][mPlayerPoints]);
pMenu = menu_create(sMenu, "ShopHandler");
formatex(sMenu, charsmax(sMenu), "+50hp \r[\w%i\r]", get_pcvar_num(g_pCvar[5]));
menu_additem(pMenu, sMenu, "");
formatex(sMenu, charsmax(sMenu), "+50ap \r[\w%i\r]", get_pcvar_num(g_pCvar[6]));
menu_additem(pMenu, sMenu, "");
formatex(sMenu, charsmax(sMenu), "Random xp bónusz \r[\w%i\r]", get_pcvar_num(g_pCvar[7]));
menu_additem(pMenu, sMenu, "");
formatex(sMenu, charsmax(sMenu), "Szerencsejáték \r[\w%i\r]", get_pcvar_num(g_pCvar[8]));
menu_additem(pMenu, sMenu, "");
menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
menu_display(id, pMenu, 0);
return PLUGIN_HANDLED;
}
public ShopHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
if(g_ePlayerInfo[id][mPlayerPoints] < get_pcvar_num(g_pCvar[item + 5]))
{
ColorChat(id, GREEN, "%s ^1 Sajnos nincs elég pénzed erre^4!", g_sServerPrefix);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
switch(item)
{
case 0:
{
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál +50hp-t^4!", g_sServerPrefix);
set_user_health(id, get_user_health(id) + 50);
}
case 1:
{
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál +50ap-t^4!", g_sServerPrefix);
set_user_armor(id, get_user_armor(id) + 50);
}
case 2:
{
new random_xp = random_num(XPMIN, XPMAX);
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %ixp-t^4!", g_sServerPrefix, random_xp);
g_ePlayerInfo[id][mPlayerXp] += random_xp;
}
case 3:
{
switch(random(5))
{
case 0:
{
new random_hp = random_num(25, 75);
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %ihp-t^4!", g_sServerPrefix, random_hp);
set_user_health(id, get_user_health(id) + random_hp);
}
case 1:
{
new random_ap = random_num(25, 75);
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %iap-t^4!", g_sServerPrefix, random_ap);
set_user_armor(id, get_user_armor(id) + random_ap);
}
case 2:
{
new random_xp = random_num(XPMIN, XPMAX);
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %ixp-t^4!", g_sServerPrefix, random_xp);
g_ePlayerInfo[id][mPlayerXp] += random_xp;
}
case 3:
{
new random_points = random_num(50,250);
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál %iPontot^4!", g_sServerPrefix, random_points);
g_ePlayerInfo[id][mPlayerPoints] += random_points;
}
case 4:
{
ColorChat(id, GREEN, "%s ^1Sajnos nem kaptál semmit^4!", g_sServerPrefix);
}
case 5:
{
ColorChat(id, GREEN, "%s ^1Sikeres vásárlás, kaptál +1 szintet ^4!", g_sServerPrefix);
g_ePlayerInfo[id][mPlayerLevel] ++;
g_ePlayerInfo[id][mPlayerXp] = 0;
}
}
}
}
g_ePlayerInfo[id][mPlayerPoints] -= get_pcvar_num(g_pCvar[item + 5]);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public GiftMenu(id)
{
new sMenu[64], sInfo[8], pMenu, iUser;
formatex(sMenu, charsmax(sMenu), "Válaszd ki kinek akarsz pontot küldeni!^n Pontjaid: \r%i", g_ePlayerInfo[id][mPlayerPoints]);
pMenu = menu_create(sMenu, "GiftHandler");
while(++iUser <= SLOT)
{
if(!is_user_connected(iUser))
continue;
formatex(sMenu, charsmax(sMenu), "%s", get_player_name(iUser));
num_to_str(iUser, sInfo, charsmax(sInfo));
menu_additem(pMenu, sMenu, sInfo);
}
menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
menu_display(id, pMenu, 0);
return PLUGIN_HANDLED;
}
public GiftHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new access, info[8], name[64], callback;
menu_item_getinfo(menu, item, access, info, charsmax(info), name, charsmax(name), callback);
g_iTarget[id] = str_to_num(info);
if(!is_user_connected(g_iTarget[id]))
{
ColorChat(id, GREEN, "%s ^1Sajnos lecsatlakozott a kiválasztott játékos^4!", g_sServerPrefix);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
client_cmd(id, "messagemode POINT");
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public PlayersMenu(id)
{
new sMenu[128], sInfo[8], pMenu, iUser;
pMenu = menu_create("Itt láthatod a többiek szintjét stb.", "PlayersHandler");
while(++iUser <= SLOT)
{
if(!is_user_connected(iUser))
continue;
formatex(sMenu, charsmax(sMenu), "%s \r[\wSzint: %i\r] \r[\wKés: %s\r]", get_player_name(iUser), g_ePlayerInfo[iUser][mPlayerLevel], g_eKnives[g_iSelected[iUser]][mName]);
num_to_str(iUser, sInfo, charsmax(sInfo));
menu_additem(pMenu, sMenu, sInfo);
}
menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
menu_display(id, pMenu, 0);
return PLUGIN_HANDLED;
}
public PlayersHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new access, info[8], name[64], callback, key;
menu_item_getinfo(menu, item, access, info, charsmax(info), name, charsmax(name), callback);
key = str_to_num(info);
if(!is_user_connected(key))
{
ColorChat(id, GREEN, "%s ^1Sajnos lecsatlakozott a kiválasztott játékos^4!", g_sServerPrefix);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
ColorChat(id, GREEN, "%s ^1Név: ^4%s ^1Kés: ^3%s ^1Szint: ^3%i ^1Élet: ^3%i", g_sServerPrefix, get_player_name(key), g_eKnives[g_iSelected[key]][mName], g_ePlayerInfo[key][mPlayerLevel], pev(key, pev_health));
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public AddMenu(id)
{
new sMenu[64], sInfo[8], pMenu, iUser;
formatex(sMenu, charsmax(sMenu), "Válaszd ki kinek akarsz pontot adni!", g_ePlayerInfo[id][mPlayerPoints]);
pMenu = menu_create(sMenu, "AddHandler");
while(++iUser <= SLOT)
{
if(!is_user_connected(iUser))
continue;
formatex(sMenu, charsmax(sMenu), "%s", get_player_name(iUser));
num_to_str(iUser, sInfo, charsmax(sInfo));
menu_additem(pMenu, sMenu, sInfo);
}
menu_setprop(pMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(pMenu, MPROP_BACKNAME, "Vissza");
menu_setprop(pMenu, MPROP_NEXTNAME, "Tovább");
menu_setprop(pMenu, MPROP_EXITNAME, "Kilépés");
menu_display(id, pMenu, 0);
return PLUGIN_HANDLED;
}
public AddHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new access, info[8], name[64], callback;
menu_item_getinfo(menu, item, access, info, charsmax(info), name, charsmax(name), callback);
g_iTarget[id] = str_to_num(info);
if(!is_user_connected(g_iTarget[id]))
{
ColorChat(id, GREEN, "%s ^1Sajnos lecsatlakozott a kiválasztott játékos^4!", g_sServerPrefix);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
client_cmd(id, "messagemode POINT_ADD");
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public Give(id)
{
new sData[192], num;
read_args(sData, charsmax(sData));
remove_quotes(sData);
if(is_str_num(sData))
{
num = str_to_num(sData);
if(g_ePlayerInfo[id][mPlayerPoints] > num)
{
g_ePlayerInfo[id][mPlayerPoints] -= num;
g_ePlayerInfo[g_iTarget[id]][mPlayerPoints] += num;
new sName[32];
get_user_name(g_iTarget[id], sName, charsmax(sName));
ColorChat(id, GREEN, "%s ^1Sikeres ajándékozás, ^3%i ^1pont elküdve ^3%s ^1-nak^4!", g_sServerPrefix, num, sName);
ColorChat(g_iTarget[id], GREEN, "%s ^1Kaptál %i pontot %s-tól!", g_sServerPrefix, get_player_name(id));
}
else
ColorChat(id, GREEN, "%s ^1Nincs elég pontod, hogy ennyit küldj^4!", g_sServerPrefix);
}
else
ColorChat(id, GREEN, "%s ^1Nem csak számok szerepelnek a beírt szövegben^4!", g_sServerPrefix);
return PLUGIN_HANDLED;
}
public Add(id)
{
new sData[192], num;
read_args(sData, charsmax(sData));
remove_quotes(sData);
if(is_str_num(sData))
{
num = str_to_num(sData);
if(num)
{
g_ePlayerInfo[g_iTarget[id]][mPlayerPoints] += num;
new sName[32];
get_user_name(g_iTarget[id], sName, charsmax(sName));
ColorChat(id, GREEN, "%s ^1Sikeres addolás! %i pont elküdve %s -nak.", g_sServerPrefix, num, sName);
ColorChat(g_iTarget[id], GREEN, "%s ^1Kaptál %i pontot %s-tól!", g_sServerPrefix, get_player_name(id));
}
else
ColorChat(id, GREEN, "%s ^1 0 pontot fölösleges küldeni^4!", g_sServerPrefix);
}
else
ColorChat(id, GREEN, "%s ^1Nem csak számok szerepelnek a beírt szövegben^4!", g_sServerPrefix);
return PLUGIN_HANDLED;
}
public LevelUp(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
if(g_ePlayerInfo[id][mPlayerLevel] < MAXLEVEL)
while(g_ePlayerInfo[id][mPlayerXp] > g_iLevels[g_ePlayerInfo[id][mPlayerLevel]])
{
g_ePlayerInfo[id][mPlayerLevel]++;
if(g_ePlayerInfo[id][mPlayerLevel] == MAXLEVEL)
{
new sName[32];
get_user_name(id, sName, charsmax(sName));
ColorChat(0, GREEN, "%s ^3%s ^1elérte a maximum szintet^4!", g_sServerPrefix, sName);
break;
}
else
ColorChat(id, GREEN, "%s ^1Gratulálunk szintet léptél, jelenlegi szinted: %i^4!", g_sServerPrefix, g_ePlayerInfo[id][mPlayerLevel]);
}
return PLUGIN_CONTINUE;
}
public SaveServerDatas()
{
new sFile[128], pFile;
get_configsdir(sFile, charsmax(sFile));
format(sFile, charsmax(sFile), "%s/%s", sFile, g_sServerSaveFile);
pFile = fopen(sFile, "wt");
if(pFile)
{
fprintf(pFile, "%i", g_iOpening);
fclose(pFile);
}
return PLUGIN_CONTINUE;
}
public LoadServerDatas()
{
new sLine[192], sFile[128], pFile;
get_configsdir(sFile, charsmax(sFile));
format(sFile, charsmax(sFile), "%s/%s", sFile, g_sServerSaveFile);
pFile = fopen(sFile, "rt");
if(pFile)
{
fgets(pFile, sLine, charsmax(sLine));
g_iOpening = str_to_num(sLine);
}
else
{
formatex(sLine, charsmax(sLine), "%i", g_iOpening);
write_file(sFile, sLine);
}
return PLUGIN_CONTINUE;
}
public SavePlayerDatas(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED;
new sFile[64], pFile;
get_configsdir(sFile, charsmax(sFile));
format(sFile, charsmax(sFile), "%s/%s", sFile, g_sPlayerSaveFile);
pFile = fopen(sFile, "rt");
if(pFile)
{
new sLine[128], sSaveLine[128], sName[32], sLineName[32], LineNum, bool:bFound;
get_user_name(id, sName, charsmax(sName));
while(!feof(pFile))
{
fgets(pFile, sLine, charsmax(sLine));
parse(sLine, sLineName, charsmax(sLineName));
if(equal(sLineName, sName))
{
formatex(sSaveLine, charsmax(sSaveLine), "^"%s^" %i %i %i %i", sName, g_ePlayerInfo[id][mPlayerLevel], g_ePlayerInfo[id][mPlayerXp], g_ePlayerInfo[id][mPlayerPoints], g_iSelected[id]);
write_file(sFile, sSaveLine, LineNum);
bFound = true;
return PLUGIN_HANDLED;
}
LineNum++;
}
if(!bFound)
{
formatex(sSaveLine, charsmax(sSaveLine), "^"%s^" %i %i %i %i", sName, g_ePlayerInfo[id][mPlayerLevel], g_ePlayerInfo[id][mPlayerXp], g_ePlayerInfo[id][mPlayerPoints], g_iSelected[id]);
write_file(sFile, sSaveLine);
return PLUGIN_HANDLED;
}
fclose(pFile);
}
return PLUGIN_CONTINUE;
}
public LoadPlayerDatas(id)
{
new sFile[64], pFile;
get_configsdir(sFile, charsmax(sFile));
format(sFile, charsmax(sFile), "%s/%s", sFile, g_sPlayerSaveFile);
pFile = fopen(sFile, "rt");
if(pFile)
{
new sLine[128],sData[5][32], sName[32], sLineName[32];
get_user_name(id, sName, charsmax(sName));
while(!feof(pFile))
{
fgets(pFile, sLine, charsmax(sLine));
parse(sLine, sLineName, charsmax(sLineName));
remove_quotes(sLineName);
if(equal(sLineName, sName))
{
parse(sLine, sData[0], 31, sData[1], 31, sData[2], 31, sData[3], 31, sData[4], 31);
g_ePlayerInfo[id][mPlayerLevel] = str_to_num(sData[1]);
g_ePlayerInfo[id][mPlayerXp] = str_to_num(sData[2]);
g_ePlayerInfo[id][mPlayerPoints] = str_to_num(sData[3]);
g_iSelected[id] = str_to_num(sData[4]);
return PLUGIN_HANDLED;
}
}
fclose(pFile);
}
else
write_file(sFile, "");
return PLUGIN_CONTINUE;
}
stock get_player_name(index)
{
new sName[32];
get_user_name(index, sName, charsmax(sName));
return sName;
}
stock bool:ValidMdl(Mdl[])
return (containi(Mdl, ".mdl") != -1);
stock create_velocity_vector(victim,attacker,Float:velocity[3])
{
if(!is_user_alive(victim) || !is_user_alive(attacker))
return 0;
new Float:vicorigin[3];
new Float:attorigin[3];
pev(victim, pev_origin, vicorigin);
pev(attacker, pev_origin, attorigin);
new Float:origin2[3];
origin2[0] = vicorigin[0] - attorigin[0];
origin2[1] = vicorigin[1] - attorigin[1];
new Float:largestnum = 0.0;
if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
origin2[0] /= largestnum;
origin2[1] /= largestnum;
velocity[0] = ( origin2[0] * (g_eKnives[g_iSelected[attacker]][mKnockback] * 3000) ) / get_distance_f(vicorigin, attorigin);
velocity[1] = ( origin2[1] * (g_eKnives[g_iSelected[attacker]][mKnockback] * 3000) ) / get_distance_f(vicorigin, attorigin);
if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
velocity[2] = random_float(200.0 , 275.0);
return 1;
}