| egbertjan |
05-16-2014 16:07 |
Function that cause lag
Hello again!
I'm working on a plugin and I got lag issues and I'm wondering what could cause it! Upon roundstart I got issues (spikes) and when shooting / spraying it's also a bit lagging.
What are functions to check out what could cause the lag / what should I be aware off?
Thanks in advance!
Code:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <fun>
#include <sqlx>
#define MAX 32 //Max number of valid player entities
#define CS_PLAYER_HEIGHT 72.0
#define GLOBAL_COOLDOWN 0.5
#define TASK_HUD 120
#define task_revive 4985
#define MAX_PLAYERS 32
#define BASE_SPEED 245.0
#define GLUTON 95841
#define x 0
#define y 1
#define z 2
#define TASK_CHARGE 100
#define TASK_FLASH_LIGHT 81184
#define pev_zorigin pev_fuser4
#define seconds(%1) ((1<<12) * (%1))
#define MAX_FLASH 15
stock get_loguser_index() {
new loguser[80], name[32]
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
return get_user_index(name)
}
stock const maxClip[31] = { -1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 };
stock const maxAmmo[31] = { -1, 52, -1, 90, -1, 32, -1, 100, 90, -1, 120, 100, 100, 90, 90, 90, 100, 100, 30, 120, 200, 32, 90, 120, 60, -1, 35, 90, 90, -1, 100 };
new g_szPrefix[ ] = "DiabloMod"
new Basepath[128]
new gmsgSayText
new gmsgDeathMsg
new gmsgStatusText
new g_msg_screenfade
new flashlight[33]
new flashbattery[33]
new flashlight_r
new flashlight_g
new flashlight_b
new Float:agi=BASE_SPEED
new DemageTake[33]
new planter
new defuser
new map_end = 0
new gmsgBartimer
new gmsgScoreInfo
new gmsgHealth
new bool:freeze_ended
new sprite_blood_drop = 0
new sprite_blood_spray = 0
new sprite_white = 0
new sprite_line = 0
new player_xp[33] = 0 //Holds players experience
new player_lvl[33] = 1 //Holds players level
new player_point[33] = 0 //Holds players level points
new player_intelligence[33]
new player_strength[33]
new player_agility[33]
new player_power[33]
new player_vampyric[33]
new Float:player_damreduction[33]
new player_dextery[33]
new player_class[33]
new Float:player_huddelay[33]
new player_b_gravity[33] = 1 //Gravity bonus : 1 = best
new player_sorc_heal[33] = 0
new player_ultra_armor[33]
new player_ultra_armor_left[33]
new bool:new_class[33]
new bool:paladin_bullet[33]
new bool:HunterUlt_active[33]
new bool:NinjaUlt_active[33]
new NecroRevive[33]
new bool:BarbUlt[33]
new bool:BarbUlt_used[33]
new jumpnum[33] = 0
new bool:dojump[33] = false
new bool:autobuyxp[33]
new KNIFE_VIEW[] = "models/v_knife.mdl"
new KNIFE_PLAYER[] = "models/p_knife.mdl"
new Ninja_katana[] ="models/diablomod/dbo/ninja_katana.mdl"
new Deagle_view[] ="models/diablomod/dbo/v_paladin_deagle.mdl"
new Deagle_player[] ="models/diablomod/dbo/p_paladin_deagle.mdl"
new C4_VIEW[] = "models/v_c4.mdl"
new C4_PLAYER[] = "models/p_c4.mdl"
new HE_VIEW[] = "models/v_hegrenade.mdl"
new HE_PLAYER[] = "models/p_hegrenade.mdl"
new FL_VIEW[] = "models/v_flashbang.mdl"
new FL_PLAYER[] = "models/p_flashbang.mdl"
new SE_VIEW[] = "models/v_smokegrenade.mdl"
new SE_PLAYER[] = "models/p_smokegrenade.mdl"
new cbow_VIEW[] = "models/diablomod/dbo/v_hunter.mdl"
new cvow_PLAYER[]= "models/diablomod/dbo/p_hunter.mdl"
new cbow_bolt[] = "models/diablomod/Crossbow_bolt.mdl"
new Barb_Rage[] = "dbmod/Barbarian_Rage.wav"
enum { NONE = 0, Mag, Paladin, Assassin, Necromancer, Barbarian, Ninja, Hunter, Bot }
new Race[][18] = { "None","Sorcerer","Paladin","Assassin","Necromancer","Barbarian", "Ninja", "Hunter", "Bot Class" }
new race_heal[9] = { 100,80,50,100,70,50,170,120, 150 }
new LevelXP[152] = { 0,50,125,225,350,500,675,875,1100,1350,1625,1925,2250,2600,2975,3375,3800,4250,4725,5225,5750,6300,6875,7475,8100,8750, //26
9450,10200,11000,11850,12750,13700,14700,15750,16850,18000,19200,20450,21750,23100,24500,25950,27450,29000,30600,32250,33950,35700,37500,39350,41250,43200, //51
45200,47300,49500,51800,54200,56700,59300,62000,62800,65700,68700,71800,75000,78300,81700,85200,88800,92400,96100,99900,103800,107800,111900,116100,120400, //76
125000,130000,135000,140000,145000,150000,156000,162000,168000,174000,180000,187000,194000,201000,208000,216000,224000,232000,240000,250000,260000,270000,280000,290000,300000,310000, //101
330000,350000,370000,390000,410000,430000,450000,470000,490000,510000,530000,550000,570000,590000,610000,630000,650000,670000,690000,710000,730000,750000,770000,790000,810000,830000, //126
850000,900000,950000,1000000,1050000,1100000,1150000,1200000,1250000,1300000,1350000,1400000,1450000,1500000,1550000,1600000,1650000,1700000,1750000,1800000,1850000,1900000,99909999/*151*/}
#define TARACE_TASK 91203
#define NADE_VELOCITY EV_INT_iuser1
#define NADE_ACTIVE EV_INT_iuser2
#define NADE_TEAM EV_INT_iuser3
#define NADE_PAUSE EV_INT_iuser4
new LeaderCT = -1
new LeaderT = -1
new GodLeft[33]
new AssassinUlt[33]
new HunterUlt[33]
new NecroUlt[33]
new NinjaUlt[33]
new loaded_xp[33]
new sqlstart = 30
new asked_sql[33]
new asked_klass[33]
new olny_one_time=0
new player_class_lvl[33][8]
new player_class_lvl_save[33]
new player_xp_old[33]
new database_user_created[33]
new srv_avg[8] = {1,1,1,1,1,1,1,1}
new last_update_xp[33]
new Float:last_update_perc[33]
new max_knife[33]
new player_knife[33]
new Float:tossdelay[33]
new Float:bowdelay[33]
new bow[33]
new button[33]
new trace_bool[33]
new cvar_throw_vel = 90 // def: 90
new cvar_activate_dis = 175 // def 190
new cvar_nade_vel = 280 //def 280
new g_TrapMode[33]
new g_GrenadeTrap[33] = {0, ... }
new Float:g_PreThinkDelay[33]
new casting[33]
new Float:cast_end[33]
new Float:HunterUlt_end[33]
new on_knife[33]
new golden_bulet[33]
new ultra_armor[33]
new after_bullet[33]
new invisible_cast[33]
new player_dmg[33]
new Handle:g_SqlTuple
new g_sqlTable[64] = "dbmod_tables"
new g_boolsqlOK=0
public plugin_init() {
register_cvar("diablo_sql_host","127.0.0.1",FCVAR_PROTECTED)
register_cvar("diablo_sql_user","root",FCVAR_PROTECTED)
register_cvar("diablo_sql_pass","pi3141592654",FCVAR_PROTECTED)
register_cvar("diablo_sql_database","dbmod",FCVAR_PROTECTED)
register_cvar("diablo_sql_table","dbmod_tablet",FCVAR_PROTECTED)
register_cvar("diablo_sql_save","2",FCVAR_PROTECTED)
register_cvar("diablo_classes", "abcdefgh")
register_cvar("diablo_avg", "1")
register_cvar("diablomod_version","6.0",FCVAR_SERVER)
register_cvar("flashlight_custom","1");
register_cvar("flashlight_drain","1.0");
register_cvar("flashlight_charge","0.5");
register_cvar("flashlight_radius","8");
register_cvar("flashlight_decay","90");
register_cvar("diablo_dmg_exp","20",0)
register_cvar("diablo_xpbonus","5",0) //bomb planted / bomb defused
register_cvar("diablo_xpbonus2","20",0) //planted / defused
register_cvar("diablo_knife","20")
register_cvar("diablo_knife_speed","1000")
register_cvar("diablo_arrow","80.0") //dmg
register_cvar("diablo_arrow_multi","4.0")
register_cvar("diablo_arrow_speed","1500")
register_cvar("diablo_klass_delay","0.5")
register_cvar("diablo_dir", "addons/amxmodx/diablo/")
register_cvar("diablo_show_health","1")
g_msg_screenfade= get_user_msgid("ScreenFade")
register_forward(FM_Touch, "fwd_touch")
register_plugin("DiabloMod","6.0","Dbo version")
register_event("Flashlight","event_flashlight","b");
register_event("CurWeapon","CurWeapon","be")
register_event("ResetHUD", "ResetHUD", "abe")
register_event("DeathMsg","DeathMsg","ade")
register_event("Damage", "Damage", "b", "2!0")
register_event("SendAudio","freeze_over","b","2=%!MRAD_GO","2=%!MRAD_MOVEOUT","2=%!MRAD_LETSGO","2=%!MRAD_LOCKNLOAD")
register_event("SendAudio","freeze_begin","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
register_event( "SendAudio", "eT_win" , "a", "2&%!MRAD_terwin" )
register_event( "SendAudio", "eCT_win", "a", "2&%!MRAD_ctwin" )
register_event("SendAudio", "award_defuse", "a", "2&%!MRAD_BOMBDEF")
register_event("BarTime", "bomb_defusing", "be", "1=10", "1=5")
register_event("StatusIcon", "got_bomb", "be", "1=1", "1=2", "2=c4")
register_event("TextMsg", "award_hostageALL", "a", "2&#All_Hostages_R" )
register_event("TextMsg","host_killed","b","2&#Killed_Hostage")
register_event("TextMsg", "freeze_begin", "a", "2=#Game_will_restart_in")
register_event("SendAudio","freeze_over1","b","2=%!MRAD_GO","2=%!MRAD_MOVEOUT","2=%!MRAD_LETSGO","2=%!MRAD_LOCKNLOAD")
register_event("Health", "Health", "be", "1!255")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "Paladin_deagle", 1 )
register_clcmd( "ultimate", "cmd_Ultimate")
register_clcmd("say","on_Chat");
register_clcmd("say_team","on_Chat");
register_logevent("award_plant", 3, "2=Planted_The_Bomb");
register_logevent("award_rescuehostage", 3, "1=triggered", "2=Rescued_A_Hostage");
register_logevent("RoundStart", 2, "0=World triggered", "1=Round_Start")
register_concmd("db_givexp", "CmdGiveXp", ADMIN_KICK, "<name/userid/steamid> <Amount>")
gmsgSayText = get_user_msgid("SayText")
gmsgDeathMsg = get_user_msgid("DeathMsg")
gmsgStatusText = get_user_msgid("StatusText")
gmsgBartimer = get_user_msgid("BarTime")
gmsgScoreInfo = get_user_msgid("ScoreInfo")
set_msg_block ( gmsgDeathMsg, BLOCK_SET )
gmsgHealth = get_user_msgid("Health")
set_task(2.0, "UpdateHUD",0,"",0,"b")
register_think("PowerUp","Think_PowerUp")
register_think("Effect_Healing_Totem","Effect_Healing_Totem_Think")
register_think("grenade", "think_Grenade")
register_think("think_bot", "think_Bot")
register_forward(FM_WriteString, "FW_WriteString")
register_forward(FM_AddToFullPack, "client_AddToFullPack")
register_forward(FM_TraceLine,"fw_traceline")
get_cvar_string("diablo_dir",Basepath,127)
register_touch("throwing_knife", "player", "touchKnife")
register_touch("throwing_knife", "worldspawn", "touchWorld")
register_touch("throwing_knife", "func_wall", "touchWorld")
register_touch("throwing_knife", "func_door", "touchWorld")
register_touch("throwing_knife", "func_door_rotating", "touchWorld")
register_touch("throwing_knife", "func_wall_toggle", "touchWorld")
register_touch("throwing_knife", "dbmod_shild", "touchWorld")
register_touch("throwing_knife", "func_breakable", "touchbreakable")
register_touch("func_breakable", "throwing_knife", "touchbreakable")
register_touch("xbow_arrow", "player", "toucharrow")
register_touch("xbow_arrow", "worldspawn", "touchWorld2")
register_touch("xbow_arrow", "func_wall", "touchWorld2")
register_touch("xbow_arrow", "func_door", "touchWorld2")
register_touch("xbow_arrow", "func_door_rotating", "touchWorld2")
register_touch("xbow_arrow", "func_wall_toggle", "touchWorld2")
register_touch("xbow_arrow", "dbmod_shild", "touchWorld2")
register_touch("xbow_arrow", "func_breakable", "touchbreakable")
register_touch("func_breakable", "xbow_arrow", "touchbreakable")
_create_ThinkBot()
return PLUGIN_CONTINUE
}
public on_Chat(id) {
new szSaid[32]
read_args(szSaid, 31)
if (equali(szSaid,"^"/class^"") || equali(szSaid,"^"/changerace^"") || equali(szSaid,"^"/changeclass^"") ) {
changerace(id)
}
if (equali(szSaid,"^"/speed^"")) {
speed(id)
}
if (equali(szSaid,"^"/players^"")) {
cmd_who(id)
}
if (equali(szSaid,"^"/reset^"") || equali(szSaid,"^"/resetskills^"")) {
reset_skill(id)
}
if (equali(szSaid,"^"/showskills^"") || equali(szSaid,"^"/skills^"")) {
skills(id)
}
if (equali(szSaid,"^"/help^"") || equali(szSaid,"^"/helpme^"") || equali(szSaid,"^"/commands^"") ) {
Commands_menu(id)
}
if (equali(szSaid,"^"/savexp^"") || equali(szSaid,"^"savexp^"")) {
savexpcom(id)
}
if (equali(szSaid,"^"/buyxp^"") || equali(szSaid,"^"buyxp^"")) {
BuyXP(id)
}
if (equali(szSaid,"^"/classinfo^"") || equali(szSaid,"^"classinfo^"")) {
Classinfo_menu(id)
}
if (equali(szSaid,"^"/autobuyxp^"") || equali(szSaid,"^"autobuyxp^"")) {
Autobuyxp(id)
}
if (equali(szSaid,"^"/classattribs^"") || equali(szSaid,"^"classattribs^"") || equali(szSaid,"^"/classattributes^"") || equali(szSaid,"^"classattribs^"")) {
ClassAttribs(id)
}
}
public sql_start() {
if(sqlstart<0) return
if(g_boolsqlOK) return
new host[128]
new user[64]
new pass[64]
new database[64]
get_cvar_string("diablo_sql_database",database,63)
get_cvar_string("diablo_sql_host",host,127)
get_cvar_string("diablo_sql_user",user,63)
get_cvar_string("diablo_sql_pass",pass,63)
g_SqlTuple = SQL_MakeDbTuple(host,user,pass,database)
get_cvar_string("diablo_sql_table",g_sqlTable,63)
new q_command[512]
format(q_command,511,"CREATE TABLE IF NOT EXISTS `%s` ( `nick` VARCHAR( 64 ),`ip` VARCHAR( 64 ),`sid` VARCHAR( 64 ), `klasa` integer( 2 ) , `lvl` integer( 3 ) DEFAULT 1, `exp` integer( 9 ) DEFAULT 0, `str` integer( 3 ) DEFAULT 0, `int` integer( 3 ) DEFAULT 0, `dex` integer( 3 ) DEFAULT 0, `agi` integer( 3 ) DEFAULT 0, `pow` integer( 3 ) DEFAULT 0, `vamp` integer( 3 ) DEFAULT 0 ) ",g_sqlTable)
SQL_ThreadQuery(g_SqlTuple,"TableHandle",q_command)
}
public TableHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
g_boolsqlOK=1
if(Errcode) {
g_boolsqlOK=0
log_to_file("addons/amxmodx/logs/diablo.log","Error on Table query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
g_boolsqlOK=0
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Table Query failed.")
g_boolsqlOK=0
return PLUGIN_CONTINUE
}
LoadAVG()
return PLUGIN_CONTINUE
}
public create_klass(id) {
if(g_boolsqlOK) {
if(!is_user_bot(id) && database_user_created[id]==0) {
new name[64]
new ip[64]
new sid[64]
get_user_name(id,name,63)
replace_all ( name, 63, "'", "Q" )
replace_all ( name, 63, "`", "Q" )
get_user_ip ( id, ip, 63, 1 )
get_user_authid(id, sid ,63)
log_to_file("addons/amxmodx/logs/test_log.log","*** %s %s *** Create Class ***",name,sid)
for(new i=1;i<8;i++) {
new q_command[512]
format(q_command,511,"INSERT INTO `%s` (`nick`,`ip`,`sid`,`klasa`,`lvl`,`exp`) VALUES ('%s','%s','%s',%i,%i,%i ) ",g_sqlTable,name,ip,sid,i,srv_avg[i],LevelXP[srv_avg[i]-1])
SQL_ThreadQuery(g_SqlTuple,"create_klass_Handle",q_command)
}
database_user_created[id]=1
}
}
else sql_start()
}
public create_klass_Handle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
if(Errcode) {
log_to_file("addons/amxmodx/logs/diablo.log","Error on create klass query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","create klass Query failed.")
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public load_xp(id) {
if(g_boolsqlOK) {
if(!is_user_bot(id)) {
new name[64]
new data[1]
data[0]=id
if(get_cvar_num("diablo_sql_save")==2) {
get_user_authid(id, name ,63)
new q_command[512]
format(q_command,511,"SELECT `klasa` FROM `%s` WHERE `sid`='%s' ",g_sqlTable,name)
SQL_ThreadQuery(g_SqlTuple,"SelectHandle",q_command,data,1)
}
loaded_xp[id]=1
}
}
else sql_start()
}
public SelectHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
if(Errcode) {
log_to_file("addons/amxmodx/logs/diablo.log","Error on load_xp query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","load_xp Query failed.")
return PLUGIN_CONTINUE
}
if(SQL_MoreResults(Query)) return PLUGIN_CONTINUE
else create_klass(Data[0])
return PLUGIN_CONTINUE
}
public Health(id) {
if(get_cvar_num("diablo_show_health")==1) {
new health = read_data(1)
if(health>255) {
message_begin( MSG_ONE, gmsgHealth, {0,0,0}, id )
write_byte( 255 )
message_end()
}
}
}
public speed(id) {
new Float:spd = get_user_maxspeed(id)
ColorChat(id, "Max Speed: %f", spd)
new Float:vect[3]
entity_get_vector(id,EV_VEC_velocity,vect)
new Float: sped= floatsqroot(vect[0]*vect[0]+vect[1]*vect[1]+vect[2]*vect[2])
ColorChat(id, "Current Speed: %f", sped)
}
public plugin_precache() {
precache_model("addons/amxmodx/diablo/totem_heal.mdl")
precache_model(KNIFE_VIEW)
precache_model(KNIFE_PLAYER)
precache_model(Deagle_view)
precache_model(Ninja_katana)
precache_model(Deagle_player)
precache_model(C4_VIEW)
precache_model(C4_PLAYER)
precache_model(HE_VIEW)
precache_model(HE_PLAYER)
precache_model(FL_VIEW)
precache_model(FL_PLAYER)
precache_model(SE_VIEW)
precache_model(SE_PLAYER)
precache_sound("weapons/xbow_hit2.wav")
precache_sound("weapons/xbow_fire1.wav")
sprite_blood_drop = precache_model("sprites/blood.spr")
sprite_blood_spray = precache_model("sprites/bloodspray.spr")
sprite_line = precache_model("sprites/dot.spr")
sprite_white = precache_model("sprites/white.spr")
precache_sound(Barb_Rage)
precache_sound("weapons/knife_hitwall1.wav")
precache_sound("weapons/knife_hit4.wav")
precache_sound("weapons/knife_deploy1.wav")
precache_model("models/diablomod/w_throwingknife.mdl")
precache_model(cbow_VIEW)
precache_model(cvow_PLAYER)
precache_model(cbow_bolt)
}
public savexpcom(id) {
if(!is_user_bot(id)) {
if(player_class[id]!=0 && player_class_lvl[id][player_class[id]]==player_lvl[id] ) {
SaveXP(id)
}
}
}
public SaveXP(id) {
if(g_boolsqlOK) {
if(!is_user_bot(id) && player_xp[id]!=player_xp_old[id]) {
new name[64]
new ip[64]
new sid[64]
get_user_name(id,name,63)
replace_all ( name, 63, "'", "Q" )
replace_all ( name, 63, "`", "Q" )
get_user_ip(id, ip ,63,1)
get_user_authid(id, sid ,63)
if(get_cvar_num("diablo_sql_save")==2) {
new q_command[512]
format(q_command,511,"UPDATE `%s` SET `nick`='%s',`ip`='%s',`lvl`='%i',`exp`='%i',`str`='%i',`int`='%i',`dex`='%i',`agi`='%i',`pow`='%i',`vamp`='%i' WHERE `sid`='%s' AND `klasa`='%i' ",g_sqlTable,name,ip,player_lvl[id],player_xp[id],player_strength[id],player_intelligence[id],player_dextery[id],player_agility[id],player_power[id],player_vampyric[id],sid,player_class[id])
SQL_ThreadQuery(g_SqlTuple,"Save_xp_handle",q_command)
}
player_xp_old[id]=player_xp[id]
}
}
else sql_start()
return PLUGIN_HANDLED
}
public Save_xp_handle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
if(Errcode) {
log_to_file("addons/amxmodx/logs/diablo.log","Error on Save_xp query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Save_xp Query failed.")
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public LoadXP(id, klasa){
if(is_user_bot(id) || asked_sql[id]==1) return PLUGIN_HANDLED
if(player_class[id]==0)load_xp(id)
if(g_boolsqlOK ) {
new name[64]
new data[2]
data[0]=id
data[1]=klasa
if(get_cvar_num("diablo_sql_save")==2) {
get_user_authid(id, name ,63)
new q_command[512]
format(q_command,511,"SELECT * FROM `%s` WHERE `sid`='%s' AND `klasa`='%i'", g_sqlTable, name, player_class[id])
SQL_ThreadQuery(g_SqlTuple,"Load_xp_handle",q_command,data,2)
asked_sql[id]=1
}
}
else sql_start()
return PLUGIN_HANDLED
}
public Load_xp_handle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
new id = Data[0]
asked_sql[id]=0
if(Errcode) {
log_to_file("addons/amxmodx/logs/diablo.log","Error on Load_xp query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Load_xp Query failed.")
return PLUGIN_CONTINUE
}
if(SQL_MoreResults(Query)) {
player_class[id] = Data[1]
player_lvl[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"lvl"))
player_xp[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"exp"))
player_xp_old[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"exp"))
player_intelligence[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"int"))
player_strength[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"str"))
player_agility[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"agi"))
player_dextery[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"dex"))
player_power[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"pow"))
player_vampyric[id] = SQL_ReadResult(Query,SQL_FieldNameToNum(Query,"vamp"))
player_point[id]=(player_lvl[id]-1)*2-player_intelligence[id]-player_strength[id]-player_dextery[id]-player_agility[id] -player_power[id]-player_vampyric[id]
if(player_point[id]<0) player_point[id]=0
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
}
return PLUGIN_CONTINUE
}
public LoadAVG() {
if(g_boolsqlOK) {
new data[2]
data[0]= get_cvar_num("diablo_avg")
if(data[0]) {
for(new i=1;i<8;i++) {
new q_command[512]
data[1]=i
format(q_command,511,"SELECT `klasa`,AVG(`lvl`) AS `AVG` FROM `%s` WHERE `lvl` > '%d' GROUP BY `klasa`", g_sqlTable, data[0]-1)
SQL_ThreadQuery(g_SqlTuple,"Load_AVG_handle",q_command,data,2)
}
}
}
else sql_start()
return PLUGIN_HANDLED
}
public Load_AVG_handle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
if(Errcode) {
log_to_file("addons/amxmodx/logs/diablo.log","Error on Load_AVG query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Load_AVG Query failed.")
return PLUGIN_CONTINUE
}
while(SQL_MoreResults(Query)) {
new i = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "klasa"))
srv_avg[i] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "AVG"))
SQL_NextRow(Query)
}
if(olny_one_time==0) {
olny_one_time=1
look_for_none()
}
return PLUGIN_CONTINUE
}
public look_for_none() {
for(new i=1;i<33;i++) {
if(is_user_alive(i)) {
if(player_class[i]==0) {
select_class_query(i)
}
}
}
}
public reset_skill(id) {
ColorChat(id, "Reseting Skills...");
player_point[id] = player_lvl[id]*2-2
player_intelligence[id] = 0
player_strength[id] = 0
player_agility[id] = 0
player_dextery[id] = 0
player_power[id] = 0
player_vampyric[id] = 0
skilltree(id)
set_speedchange(id)
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
}
public freeze_over() {
set_task(get_cvar_float("diablo_klass_delay"), "freezeover", 3659, "", 0, "")
}
public freezeover() {
freeze_ended = true
}
public freeze_begin() {
freeze_ended = false
for (new i=1; i <= get_maxplayers(); i++){
if (new_class[i] == true) {
changerace(i)
}
}
}
public RoundStart() {
for (new i=1; i <= get_maxplayers(); i++){
if(!is_user_bot(i) && is_user_alive(i)) {
Check_Ults(i)
invisible_cast[i]=0
set_renderchange(i)
RoundExperience(i)
if (autobuyxp[i] == true) peformautobuy(i)
}
kill_all_entity("throwing_knife")
}
}
public RoundExperience(id) {
if (player_lvl[id] < 51) {
Give_Xp(id,20)
client_print(id, print_chat, "You have been given 20 experience points!")
}
}
public Check_Ults(id) {
if (player_class[id] == Mag) {
player_sorc_heal[id] = 1 + (player_intelligence[id]/25)
}
if( player_class[id]== Paladin ) {
if (player_intelligence[id] == 50) {
golden_bulet[id]=2 + (player_intelligence[id]/10)
} else {
golden_bulet[id]=1 + (player_intelligence[id]/10)
}
GodLeft[id]=1 + (player_intelligence[id]/25)
}
if (player_class[id] == Assassin) {
AssassinUlt[id] = 1 + (player_intelligence[id]/10)
}
if (player_class[id] == Necromancer) {
NecroRevive[id] = 1 + (player_intelligence[id] / 25)
NecroUlt[id] = 0
}
if (player_class[id] == Barbarian) {
if (player_intelligence[id] > 24 && player_intelligence[id] < 50) {
ultra_armor[id]=2 + (player_intelligence[id]/10)
} else if (player_intelligence[id] == 50) {
ultra_armor[id]=3 + (player_intelligence[id]/10)
} else {
ultra_armor[id]=1 + (player_intelligence[id]/10)
}
BarbUlt_used[id] = false
}
if (player_class[id] == Ninja) {
jumpnum[id] = 30
give_knife(id)
set_user_armor(id,100)
set_gravitychange(id)
NinjaUlt[id] = 1 + (player_intelligence[id]/16)
}
if (player_class[id] == Hunter) {
HunterUlt[id] = 1 + (player_intelligence[id] / 25)
}
}
public csw_c44(id) {
client_cmd(id,"weapon_knife")
engclient_cmd(id,"weapon_knife")
on_knife[id]=1
}
public CurWeapon(id) {
after_bullet[id]=1
new clip,ammo
new weapon=get_user_weapon(id,clip,ammo)
invisible_cast[id]=0
if(weapon == CSW_KNIFE) on_knife[id]=1
else on_knife[id]=0
if ((weapon != CSW_C4 ) && !on_knife[id] && (player_class[id] == Ninja)) {
client_cmd(id,"weapon_knife")
engclient_cmd(id,"weapon_knife")
on_knife[id]=1
}
if (is_user_connected(id)) {
if(on_knife[id]) {
entity_set_string(id, EV_SZ_viewmodel, KNIFE_VIEW)
entity_set_string(id, EV_SZ_weaponmodel, KNIFE_PLAYER)
}
if(weapon == CSW_C4){
entity_set_string(id, EV_SZ_viewmodel, C4_VIEW)
entity_set_string(id, EV_SZ_weaponmodel, C4_PLAYER)
}
if(weapon == CSW_HEGRENADE){
entity_set_string(id, EV_SZ_viewmodel, HE_VIEW)
entity_set_string(id, EV_SZ_weaponmodel, HE_PLAYER)
}
if(weapon == CSW_FLASHBANG){
entity_set_string(id, EV_SZ_viewmodel, FL_VIEW)
entity_set_string(id, EV_SZ_weaponmodel, FL_PLAYER)
}
if(weapon == CSW_SMOKEGRENADE){
entity_set_string(id, EV_SZ_viewmodel, SE_VIEW)
entity_set_string(id, EV_SZ_weaponmodel, SE_PLAYER)
}
if(bow[id]==1) {
bow[id]=0
if(on_knife[id]) {
entity_set_string(id, EV_SZ_viewmodel, KNIFE_VIEW)
entity_set_string(id, EV_SZ_weaponmodel, KNIFE_PLAYER)
}
}
if (player_class[id] == Ninja) {
entity_set_string(id, EV_SZ_viewmodel, Ninja_katana)
}
if (player_class[id] == Paladin && weapon == CSW_DEAGLE) {
paladin_bullet[id] = true
entity_set_string(id, EV_SZ_viewmodel, Deagle_view)
entity_set_string(id, EV_SZ_weaponmodel, Deagle_player)
} else {
paladin_bullet[id] = false
}
set_gravitychange(id)
set_speedchange(id)
set_renderchange(id)
write_hud(id)
}
}
public ResetHUD(id) {
if (!is_user_bot(id)) {
if (is_user_connected(id)) {
remove_task(id+GLUTON)
change_health(id,999,0,"")
if ((player_intelligence[id]+player_strength[id]+player_agility[id]+player_dextery[id]+player_power[id]+player_vampyric[id])>(player_lvl[id]*2)) reset_skill(id)
player_ultra_armor_left[id]=player_ultra_armor[id]
if (player_point[id] > 0 ) skilltree(id)
if (player_class[id] == 0) select_class_query(id)
client_cmd(id,"hud_centerid 0")
set_gravitychange(id)
set_renderchange(id)
}
} else {
if (player_class[id] == 0) player_class[id] = Bot
}
}
public DeathMsg(id) {
new weaponname[20]
new kid = read_data(1)
new vid = read_data(2)
new headshot = read_data(3)
read_data(4,weaponname,19)
new players[32], num
static Float:minsize[3]
pev(vid, pev_mins, minsize)
flashbattery[vid] = MAX_FLASH;
flashlight[vid] = 0;
if(cs_get_user_team(vid) == CS_TEAM_CT) get_players(players, num, "ae", "CT")
if(cs_get_user_team(vid) == CS_TEAM_T) get_players(players, num, "ae", "TERRORIST")
if(num > 0) {
new id
for(new i = 0; i < num; i++) {
id = players[i]
if(player_class[id] == Necromancer && NecroRevive[id] > 0) {
new param[1]
param[0] = id // save the necromancer
NecroRevive[id] --
set_task(1.0, "necro_spawn", vid+task_revive, param, 1) // little delay to respawn
break // already found a necromancer, so let's break loop
}
}
}
if (headshot && is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid)) Give_Xp(kid, 5)
if(!is_user_bot(id)) {
if (is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid)) {
show_deadmessage(kid,vid,headshot,weaponname)
award_kill(kid,vid)
if (player_class[kid] == Barbarian) change_health(kid,20,0,"")
change_health(kid,player_vampyric[kid],0,"")
if (player_class[kid] == Barbarian) refill_ammo(kid)
set_renderchange(kid)
savexpcom(vid)
}
}
}
public necro_spawn(params[], id) {
id -= task_revive
new necro = params[0]
if(is_user_alive(id)) //already revived ?
return PLUGIN_HANDLED
ExecuteHamB(Ham_CS_RoundRespawn, id)
new name[32]
get_user_name(necro, name, 31)
change_health(id,player_intelligence[necro],0,"")
Give_Xp(necro, 10)
client_print(id, print_chat, "You're alive now, thanks to %s", name)
return PLUGIN_HANDLED
}
public Damage(id) {
if(!is_user_bot(id)) {
if (is_user_connected(id)) {
new weapon
new bodypart
new attacker_id = get_user_attacker(id,weapon,bodypart)
if(attacker_id!=0 && attacker_id != id) {
new damage = read_data(2)
if (is_user_connected(attacker_id)) {
if(get_user_team(id) != get_user_team(attacker_id)) {
if(damage>175) player_dmg[attacker_id]+=damage/2
else {
player_dmg[attacker_id]+=damage
dmg_exp(attacker_id)
}
if (damage > 0 && player_agility[id] > 0) {
new heal = floatround(player_damreduction[id]*damage)
if (is_user_alive(id)) change_health(id,heal,0,"")
}
if(weapon == CSW_GLOCK18 || weapon == CSW_USP || weapon == CSW_P228 || weapon == CSW_DEAGLE || weapon == CSW_ELITE || weapon == CSW_FIVESEVEN) {
switch(player_class[attacker_id]) {
case Hunter:
{
new ori[3]
trace_bool[attacker_id]=id
get_user_origin(id,ori)
new parms[5];
for(new i=0;i<3;i++) {
parms[i] = ori[i]
}
parms[3]=attacker_id
parms[4]=id
set_task(0.5,"charge_hunter",attacker_id,parms,5)
}
}
}
}
}
}
}
}
}
public un_rander(task_id) {
new id = task_id - TASK_FLASH_LIGHT
if(is_user_connected(id)) set_renderchange(id)
}
public client_PreThink ( id ) {
new button2 = get_user_button(id);
if(flashlight[id] && flashbattery[id] && (get_cvar_num("flashlight_custom")) && (player_class[id] == Mag)) {
new num1, num2, num3
num1=random_num(0,2)
num2=random_num(-1,1)
num3=random_num(-1,1)
flashlight_r+=1+num1
if (flashlight_r>250) flashlight_r-=245
flashlight_g+=1+num2
if (flashlight_g>250) flashlight_g-=245
flashlight_b+=-1+num3
if (flashlight_b<5) flashlight_b+=240
new origin[3];
get_user_origin(id,origin,3);
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(27); // TE_DLIGHT
write_coord(origin[0]); // X
write_coord(origin[1]); // Y
write_coord(origin[2]); // Z
write_byte(get_cvar_num("flashlight_radius")); // radius
write_byte(flashlight_r); // R
write_byte(flashlight_g); // G
write_byte(flashlight_b); // B
write_byte(1); // life
write_byte(get_cvar_num("flashlight_decay")); // decay rate
message_end();
new index1, bodypart1
get_user_aiming(id,index1,bodypart1)
if ((get_user_team(id)!=get_user_team(index1)) && (index1!=0)) {
if ((index1!=54) && (is_user_connected(index1))) set_user_rendering(index1,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4)
remove_task(TASK_FLASH_LIGHT+index1);
set_task(7.5, "un_rander",TASK_FLASH_LIGHT+index1)
}
}
if (((player_class[id] == Assassin)) && is_user_alive(id))
entity_set_int(id, EV_INT_flTimeStepSound, 300)
new Float:vect[3]
entity_get_vector(id,EV_VEC_velocity,vect)
if (button2 & IN_RELOAD && on_knife[id] && button[id]==0 && player_class[id]==Hunter){
bow[id]++
button[id] = 1;
command_bow(id)
}
if ((!(button2 & IN_RELOAD)) && on_knife[id] && button[id]==1) button[id]=0
if (!freeze_ended)
return PLUGIN_CONTINUE
if (player_class[id] == Barbarian && BarbUlt[id] == true) {
set_pev(id,pev_punchangle,{ 0.0,0.0,0.0 });
}
if (player_class[id] == Ninja && NinjaUlt_active[id] == true) {
new nbut = get_user_button(id)
if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(get_user_oldbutton(id) & IN_JUMP)) {
if(jumpnum[id] < 30) {
dojump[id] = true
jumpnum[id]++
return PLUGIN_CONTINUE
}
}
if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND)) {
jumpnum[id] = 0
return PLUGIN_CONTINUE
}
}
if (get_entity_flags(id) & FL_ONGROUND && (!(button2 & (IN_FORWARD+IN_BACK+IN_MOVELEFT+IN_MOVERIGHT))) && is_user_alive(id) && on_knife[id] && player_class[id]==Assassin && invisible_cast[id]==0 || player_class[id] == Hunter && is_user_alive(id) && !bow[id] && on_knife[id] && cs_get_user_bpammo(id, CSW_FLASHBANG) != 2) {
if(casting[id]==1 && halflife_time()>cast_end[id]) {
message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
write_byte( 0 )
write_byte( 0 )
message_end()
casting[id]=0
if (player_class[id] == Assassin) {
invisible_cast[id]=1
set_renderchange(id)
}
if (player_class[id] == Hunter) give_item(id, "weapon_flashbang")
} else if(casting[id]==0) {
new Float: time_delay = 5.0-(player_intelligence[id]/25.0)
if(player_class[id] == Assassin) time_delay*=2.0
cast_end[id]=halflife_time()+time_delay
new bar_delay = floatround(time_delay,floatround_ceil)
casting[id]=1
message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
write_byte( bar_delay )
write_byte( 0 )
message_end()
}
} else {
if(casting[id]==1) {
message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
write_byte( 0 )
write_byte( 0 )
message_end()
}
casting[id]=0
}
if(player_class[id]==Ninja && (pev(id,pev_button) & IN_RELOAD)) command_knife(id)
else if (pev(id,pev_button) & IN_RELOAD && on_knife[id] && max_knife[id]>0) command_knife(id)
if(player_class[id]==Hunter) {
new clip,ammo
new weapon = get_user_weapon(id,clip,ammo)
if(bow[id] == 1) {
if((bowdelay[id] + 4.25 - float(player_intelligence[id]/19))< get_gametime() && button2 & IN_ATTACK) {
bowdelay[id] = get_gametime()
command_arrow(id)
}
entity_set_int(id, EV_INT_button, (button2 & ~IN_ATTACK) & ~IN_ATTACK2)
}
if(g_GrenadeTrap[id] && button2 & IN_ATTACK2) {
switch(weapon) {
case CSW_HEGRENADE, CSW_FLASHBANG, CSW_SMOKEGRENADE:
{
if((g_PreThinkDelay[id] + 0.28) < get_gametime()) {
switch(g_TrapMode[id]) {
case 0: g_TrapMode[id] = 1
case 1: g_TrapMode[id] = 0
}
client_print(id, print_center, "Grenade Trap %s", g_TrapMode[id] ? "[ON]" : "[OFF]")
g_PreThinkDelay[id] = get_gametime()
}
}
default: g_TrapMode[id] = 0
}
}
}
return PLUGIN_CONTINUE
}
public client_PostThink(id) {
if(!is_user_alive(id)) return PLUGIN_CONTINUE
if(dojump[id] == true) {
new Float:velocity[3]
entity_get_vector(id,EV_VEC_velocity,velocity)
velocity[2] = random_float(265.0,285.0)
entity_set_vector(id,EV_VEC_velocity,velocity)
dojump[id] = false
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public client_AddToFullPack(ent_state,e,edict_t_ent,edict_t_host,hostflags,player,pSet) {
if (!pev_valid(e)|| !pev_valid(edict_t_ent) || !pev_valid(edict_t_host))
return FMRES_HANDLED
new classname[32]
pev(e,pev_classname,classname,31)
new hostclassname[32]
pev(edict_t_host,pev_classname,hostclassname,31)
if (is_user_alive(e) && is_user_alive(edict_t_host) && e != edict_t_host) {
}
return FMRES_HANDLED
}
public skilltree(id) {
new szText[ 555 char ];
formatex( szText, charsmax( szText ), "Select Stats - \rPoints: %i", player_point[ id ] );
new skillzMenu = menu_create( szText , "skill_menu" );
formatex( szText, charsmax( szText ), "Intelligence [%i] [Improve your class's unique ability]", player_intelligence[id] );
menu_additem( skillzMenu, szText, "1", 0 );
formatex( szText, charsmax( szText ), "Strength [%i] [Increase your maximum health]", player_strength[id] );
menu_additem( skillzMenu, szText, "2", 0 );
formatex( szText, charsmax( szText ), "Agility [%i] [Take less physical damage]", player_agility[id] );
menu_additem( skillzMenu, szText, "3", 0 );
formatex( szText, charsmax( szText ), "Dexterity [%i] [Increased movement speed and magical damage reduction]", player_dextery[id] );
menu_additem( skillzMenu, szText, "4", 0 );
formatex( szText, charsmax( szText ), "Power [%i] [Deal additional physical damage]", player_power[id] );
menu_additem( skillzMenu, szText, "5", 0 );
formatex( szText, charsmax( szText ), "Vampyrism [%i] [Restore health upon kill]", player_vampyric[id] );
menu_additem( skillzMenu, szText, "6", 0 );
menu_setprop( skillzMenu, MPROP_NUMBER_COLOR, "\w" );
menu_setprop( skillzMenu , MPROP_EXIT , MEXIT_NEVER );
menu_display( id , skillzMenu , 0 );
return PLUGIN_HANDLED;
}
public skill_menu(id , skillzMenu , iItem) {
if( iItem == MENU_EXIT ) {
menu_destroy( skillzMenu );
return PLUGIN_HANDLED;
}
new data[ 6 ] , szName[ 64 ];
new access, callback;
menu_item_getinfo( skillzMenu, iItem, access, data, charsmax( data ), szName, charsmax( szName ), callback );
new key = str_to_num( data );
switch( key ) {
case 1:
{
if (player_intelligence[id]<50){
player_point[id]-=1
player_intelligence[id]+=1
}
else client_print(id,print_center,"You have reached the Maximum level of Intelligence!")
}
case 2:
{
if (player_strength[id]<50){
player_point[id]-=1
player_strength[id]+=1
}
else client_print(id,print_center,"You have reached the Maximum level of Strength!")
}
case 3:
{
if (player_agility[id]<50){
player_point[id]-=1
player_agility[id]+=1
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
}
else client_print(id,print_center,"You have reached the Maximum level of Agility!")
}
case 4:
{
if (player_dextery[id]<50){
player_point[id]-=1
player_dextery[id]+=1
set_speedchange(id)
}
else client_print(id,print_center,"You have reached the Maximum level of Dexterity!")
}
case 5:
{
if (player_power[id]<50){
player_point[id]-=1
player_power[id]+=1
}
else client_print(id,print_center,"You have reached the Maximum level of Power!")
}
case 6:
{
if (player_vampyric[id]<50){
player_point[id]-=1
player_vampyric[id]+=1
}
else client_print(id,print_center,"You have reached the Maximum level of Vampyrism!")
}
}
if (player_point[id] > 0)
skilltree(id)
menu_destroy( skillzMenu );
return PLUGIN_CONTINUE
}
public show_deadmessage(killer_id,victim_id,headshot,weaponname[]) {
if (!(killer_id==victim_id && !headshot && equal(weaponname,"world"))) {
message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
write_byte(killer_id)
write_byte(victim_id)
write_byte(headshot)
write_string(weaponname)
message_end()
}
}
public got_bomb(id) {
planter = id;
return PLUGIN_CONTINUE
}
public award_plant() {
new Players[32], playerCount, id
get_players(Players, playerCount, "aeh", "TERRORIST")
for (new i=0; i<playerCount; i++) {
id = Players[i]
Give_Xp(id,get_cvar_num("diablo_xpbonus"))
ColorChat(id, "^x04You have earned *%i* Experience for the team bomb plant event!", get_cvar_num("diablo_xpbonus"));
}
Give_Xp(planter,get_cvar_num("diablo_xpbonus2"))
ColorChat(planter,"^x04You have earned *%i* Experience for planting the bomb!",get_cvar_num("diablo_xpbonus2"))
}
public bomb_defusing(id) {
defuser = id;
return PLUGIN_CONTINUE
}
public award_defuse() {
new Players[32], playerCount, id
get_players(Players, playerCount, "aeh", "CT")
for (new i=0; i<playerCount; i++) {
id = Players[i]
Give_Xp(id,get_cvar_num("diablo_xpbonus"))
ColorChat(id, "^x04You have earned *%i* Experience for the team bomb defuse event!", get_cvar_num("diablo_xpbonus"))
}
Give_Xp(defuser,get_cvar_num("diablo_xpbonus2"))
ColorChat(defuser,"^x04You have earned *%i* Experience for defusing the bomb!",get_cvar_num("diablo_xpbonus2"))
}
public award_hostageALL(id) {
if (is_user_connected(id) == 1)
Give_Xp(id,get_cvar_num("diablo_xpbonus2")/2)
}
public award_rescuehostage() {
new id = get_loguser_index();
Give_Xp(id,5)
ColorChat(id,"^x04You have earned 5 Experience for rescuing a hostage!")
}
public award_kill(killer_id,victim_id) {
if (!is_user_connected(killer_id) || !is_user_connected(victim_id))
return PLUGIN_CONTINUE
new xp_award = get_cvar_num("diablo_xpbonus")
new Team[32]
get_user_team(killer_id,Team,31)
if (LeaderCT > 0 && equal(Team,"CT") && !is_user_alive(LeaderCT))
xp_award-= get_cvar_num("diablo_xpbonus")/4
if (LeaderT > 0 && equal(Team,"TERRORIST") && !is_user_alive(LeaderT))
xp_award-= get_cvar_num("diablo_xpbonus")/4
if (player_xp[killer_id]<player_xp[victim_id])
xp_award+=get_cvar_num("diablo_xpbonus")/4
new more_lvl=player_lvl[victim_id]-player_lvl[killer_id]
if(more_lvl>0) xp_award += floatround((get_cvar_num("diablo_xpbonus")/7)*(more_lvl*((2.0-more_lvl/40.0)/3.0)))
else if(more_lvl<-50)xp_award -= get_cvar_num("diablo_xpbonus")*(2/3)
else if(more_lvl<-40)xp_award -= get_cvar_num("diablo_xpbonus")/2
else if(more_lvl<-30)xp_award -= get_cvar_num("diablo_xpbonus")/3
else if(more_lvl<-20)xp_award -= get_cvar_num("diablo_xpbonus")/4
else if(more_lvl<-10)xp_award -= get_cvar_num("diablo_xpbonus")/7
Give_Xp(killer_id,xp_award)
return PLUGIN_CONTINUE
}
public Give_Xp(id,amount) {
if(!is_user_bot(id)) {
if(player_class_lvl[id][player_class[id]]==player_lvl[id]) {
if(player_xp[id]+amount!=0 && get_playersnum()>1) {
player_xp[id]+=amount
if (player_xp[id] > LevelXP[player_lvl[id]]) {
player_lvl[id]+=1
player_point[id]+=2
set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2)
show_hudmessage(id, "You have advanced to level %i!", player_lvl[id])
savexpcom(id)
player_class_lvl[id][player_class[id]]=player_lvl[id]
}
if (player_xp[id] < LevelXP[player_lvl[id]-1]) {
player_lvl[id]-=1
player_point[id]-=2
set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2)
show_hudmessage(id, "You have dropped to level %i!", player_lvl[id])
savexpcom(id)
player_class_lvl[id][player_class[id]]=player_lvl[id]
}
write_hud(id)
}
}
}
}
public client_connect(id) {
asked_sql[id]=0
flashbattery[id] = MAX_FLASH
player_xp[id] = 0
player_lvl[id] = 1
player_point[id] = 0
player_agility[id] = 0
player_strength[id] = 0
player_intelligence[id] = 0
player_dextery[id] = 0
player_power[id] = 0
player_vampyric[id] = 0
player_class[id] = 0
player_damreduction[id] = 0.0
last_update_xp[id] = -1
DemageTake[id]=0
g_GrenadeTrap[id] = 0
g_TrapMode[id] = 0
select_class_query(id)
}
public client_putinserver(id) {
loaded_xp[id]=0
player_class_lvl_save[id]=0
database_user_created[id]=0
select_class_query(id)
jumpnum[id] = 0
dojump[id] = false
}
public client_disconnect(id) {
jumpnum[id] = 0
dojump[id] = false
savexpcom(id)
remove_task(TASK_CHARGE+id)
player_class_lvl_save[id]=0
loaded_xp[id]=0
}
public write_hud(id) {
if (!is_user_bot(id)) {
set_hudmessage(60, 200, 25, 0.0, 0.9, 0, 1.0, 2.0, 0.1, 0.2, 2)
if (player_lvl[id] == 0)
player_lvl[id] = 1
new tpstring[1024]
new Float:xp_now
new Float:xp_need
new Float:perc
if (last_update_xp[id] == player_xp[id]) {
perc = last_update_perc[id]
} else {
if (player_lvl[id] == 1) {
xp_now = float(player_xp[id])
xp_need = float(LevelXP[player_lvl[id]])
perc = xp_now*100.0/xp_need
} else {
xp_now = float(player_xp[id])-float( LevelXP[player_lvl[id]-1])
xp_need = float(LevelXP[player_lvl[id]])-float(LevelXP[player_lvl[id]-1])
perc = xp_now*100.0/xp_need
}
}
last_update_xp[id] = player_xp[id]
last_update_perc[id] = perc
if(player_class[id]==Paladin) {
show_hudmessage(id, " Godmode Charges: %i Magic deagle bullets: %i" ,GodLeft[id], golden_bulet[id])
} else if(player_class[id]==Assassin) {
show_hudmessage(id, " Blink Charges: %i Status: %s " ,AssassinUlt[id], invisible_cast[id] ? "[Invisible]" : "[Visible]")
} else if(player_class[id]==Barbarian) {
show_hudmessage(id, " Armor Charges: %i " ,ultra_armor[id])
} else if(player_class[id]==Ninja) {
show_hudmessage(id, " Knife Charges: %i Max Speed: %f Hyper charges %i" ,player_knife[id], get_user_maxspeed(id), NinjaUlt[id])
} else if(player_class[id]==Hunter) {
show_hudmessage(id, " Hunter invisible stacks: %i " ,HunterUlt[id])
} else if(player_class[id]==Necromancer) {
show_hudmessage(id, " Team revive stacks: %i " ,NecroRevive[id])
}
if (player_lvl[id] == 151) {
format(tpstring,1023,"%s Level: %i (Max) ", Race[player_class[id]], player_lvl[id])
} else {
format(tpstring,1023,"%s Level: %i XP: %i/%i (%0.0f%s)", Race[player_class[id]], player_lvl[id], player_xp[id], LevelXP[player_lvl[id]], perc,"%%")
}
message_begin(MSG_ONE,gmsgStatusText,{0,0,0}, id)
write_byte(0)
write_string(tpstring)
message_end()
}
}
public UpdateHUD() {
for (new id=1; id <= get_maxplayers(); id++){
if (!is_user_bot(id)) {
if (!is_user_connected(id))
continue
set_renderchange(id)
if (!is_user_bot(id)) {
set_gravitychange(id)
set_speedchange(id)
set_renderchange(id)
if (is_user_alive(id)) write_hud(id)
else {
new index,bodypart
get_user_aiming(id,index,bodypart)
if(index >= 0 && index < MAX && is_user_connected(index) && is_user_alive(index)) {
new pname[32]
get_user_name(index,pname,31)
new Msg[512]
set_hudmessage(255, 255, 255, 0.78, 0.65, 0, 6.0, 3.0)
format(Msg,511,"Name: %s^nLevel: %i^nClass: %s^nIntelligence: %i^nStrength: %i^nAgility: %i^nDexterity: %i^nPower: %i^nVampyric: %i ",pname,player_lvl[index],Race[player_class[index]], player_intelligence[index],player_strength[index],player_agility[index],player_dextery[index],player_power[index],player_vampyric[index])
show_hudmessage(id, Msg)
}
}
}
}
}
}
public Create_Line(id,origin1[3],origin2[3],bool:draw) {
if (draw) {
message_begin(MSG_ONE,SVC_TEMPENTITY,{0,0,0},id)
write_byte(0)
write_coord(origin1[0]) // starting pos
write_coord(origin1[1])
write_coord(origin1[2])
write_coord(origin2[0]) // ending pos
write_coord(origin2[1])
write_coord(origin2[2])
write_short(sprite_line) // sprite index
write_byte(1) // starting frame
write_byte(5) // frame rate
write_byte(2) // life
write_byte(3) // line width
write_byte(0) // noise
write_byte(255) // RED
write_byte(50) // GREEN
write_byte(50) // BLUE
write_byte(155) // brightness
write_byte(5) // scroll speed
message_end()
}
new Float:ret[3],Float:fOrigin1[3],Float:fOrigin2[3]
origin1[2]+=50
IVecFVec(origin1,fOrigin1)
IVecFVec(origin2,fOrigin2)
new hit = trace_line ( 0, fOrigin1, fOrigin2, ret )
return hit
}
public host_killed(id) {
if (player_lvl[id] > 1) {
hudmsg(id,2.0,"You lost some experience for killing hostages!")
Give_Xp(id,-floatround(3*player_lvl[id]/(1.65-player_lvl[id]/60)))
}
}
public select_class_query(id) {
if(is_user_bot(id) || asked_klass[id]!=0) return PLUGIN_HANDLED
if(loaded_xp[id]==0) {
load_xp(id)
return PLUGIN_HANDLED
}
if(g_boolsqlOK) {
asked_klass[id]=1
new name[64]
new data[1]
data[0]=id
new lx[8]
if(player_class_lvl_save[id]==0) {
if(get_cvar_num("diablo_sql_save")==2) {
get_user_authid(id, name ,63)
new q_command[512]
format(q_command,511,"SELECT `klasa`,`lvl` FROM `%s` WHERE `sid`='%s' ",g_sqlTable,name)
SQL_ThreadQuery(g_SqlTuple,"select_class_handle",q_command,data,1)
}
} else {
for(new i=1;i<8;i++) lx[i]=player_class_lvl[id][i]
select_class(id,lx)
}
} else sql_start()
return PLUGIN_HANDLED
}
public select_class_handle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize) {
new id=Data[0]
if(Errcode) {
log_to_file("addons/amxmodx/logs/diablo.log","Error on select_class_handle query: %s",Error)
asked_klass[id]=0
}
if(FailState == TQUERY_CONNECT_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
asked_klass[id]=0
return PLUGIN_CONTINUE
} else if(FailState == TQUERY_QUERY_FAILED) {
log_to_file("addons/amxmodx/logs/diablo.log","select_class_handle Query failed.")
asked_klass[id]=0
return PLUGIN_CONTINUE
}
if(SQL_MoreResults(Query)) {
new lx[8]
while(SQL_MoreResults(Query)) {
new i = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "klasa"))
lx[i] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "lvl"))
player_class_lvl[id][i] = lx[i]
SQL_NextRow(Query)
}
if(asked_klass[id]==1) {
asked_klass[id]=2
select_class(id,lx)
}
}
return PLUGIN_CONTINUE
}
public select_class(id,lx[]) {
asked_klass[id]=0
new szText[555 char]
new ClassMenu = menu_create("Select Class", "select_class_menu")
formatex(szText, charsmax(szText), "Sorcerer^t^tLevel: %d", lx[1])
menu_additem(ClassMenu, szText, "1", 0)
formatex(szText, charsmax(szText), "Paladin^t^tLevel: %d", lx[2])
menu_additem(ClassMenu, szText, "2", 0)
formatex(szText, charsmax(szText), "Assassin^t^tLevel: %d", lx[3])
menu_additem(ClassMenu, szText, "3", 0)
formatex(szText, charsmax(szText), "Necromancer^t^tLevel: %d", lx[4])
menu_additem(ClassMenu, szText, "4", 0)
formatex(szText, charsmax(szText), "Barbarian^t^tLevel: %d", lx[5])
menu_additem(ClassMenu, szText, "5", 0)
formatex(szText, charsmax(szText), "Ninja^t^tLevel: %d", lx[6])
menu_additem(ClassMenu, szText, "6", 0)
formatex(szText, charsmax(szText), "Hunter^t^tLevel: %d", lx[7])
menu_additem(ClassMenu, szText, "7", 0)
menu_setprop(ClassMenu, MPROP_EXIT , MEXIT_NEVER);
menu_display(id, ClassMenu, 0);
}
public select_class_menu(id, ClassMenu, item) {
if(item == MENU_EXIT) {
menu_destroy(ClassMenu);
return PLUGIN_HANDLED;
}
new Data[7], Name[64];
new Access, Callback;
menu_item_getinfo(ClassMenu, item, Access, Data,5, Name, 63, Callback);
new Key = str_to_num(Data);
switch(Key) {
case 1:
player_class[id] = Mag
case 2:
{
player_class[id] = Paladin
}
case 3:
player_class[id] = Assassin
case 4:
{
player_class[id] = Necromancer
}
case 5:
{
player_class[id] = Barbarian
}
case 6:
player_class[id] = Ninja
case 7:
{
player_class[id] = Hunter
g_GrenadeTrap[id] = 1
}
}
LoadXP(id, player_class[id])
CurWeapon(id)
Check_Ults(id)
new_class[id] = false
return PLUGIN_HANDLED
}
public UTIL_Teleport(id,distance) {
Set_Origin_Forward(id,distance)
new origin[3]
get_user_origin(id,origin)
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) //message begin
write_byte(TE_PARTICLEBURST )
write_coord(origin[0]) // origin
write_coord(origin[1]) // origin
write_coord(origin[2]) // origin
write_short(20) // radius
write_byte(1) // particle color
write_byte(4) // duration * 10 will be randomized a bit
message_end()
}
stock Set_Origin_Forward(id, distance) {
new Float:origin[3]
new Float:angles[3]
new Float:teleport[3]
new Float:heightplus = 10.0
new Float:playerheight = 64.0
new bool:recalculate = false
new bool:foundheight = false
pev(id,pev_origin,origin)
pev(id,pev_angles,angles)
teleport[0] = origin[0] + distance * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[1] = origin[1] + distance * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[2] = origin[2]+heightplus
while (!Can_Trace_Line_Origin(origin,teleport) || Is_Point_Stuck(teleport,48.0)) {
if (distance < 10)
break;
for (new i=1; i < playerheight+20.0; i++) {
teleport[2]+=i
if (Can_Trace_Line_Origin(origin,teleport) && !Is_Point_Stuck(teleport,48.0)){
foundheight = true
heightplus += i
break
}
teleport[2]-=i
}
if (foundheight)
break
recalculate = true
distance-=10
teleport[0] = origin[0] + (distance+32) * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[1] = origin[1] + (distance+32) * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[2] = origin[2]+heightplus
}
if (!recalculate) {
set_pev(id,pev_origin,teleport)
return PLUGIN_CONTINUE
}
teleport[0] = origin[0] + distance * floatcos(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[1] = origin[1] + distance * floatsin(angles[1],degrees) * floatabs(floatcos(angles[0],degrees));
teleport[2] = origin[2]+heightplus
set_pev(id,pev_origin,teleport)
return PLUGIN_CONTINUE
}
stock bool:Can_Trace_Line_Origin(Float:origin1[3], Float:origin2[3]) {
new Float:Origin_Return[3]
new Float:temp1[3]
new Float:temp2[3]
temp1[x] = origin1[x]
temp1[y] = origin1[y]
temp1[z] = origin1[z]-30
temp2[x] = origin2[x]
temp2[y] = origin2[y]
temp2[z] = origin2[z]-30
trace_line(-1, temp1, temp2, Origin_Return)
if (get_distance_f(Origin_Return,temp2) < 1.0)
return true
return false
}
stock bool:Is_Point_Stuck(Float:Origin[3], Float:hullsize) {
new Float:temp[3]
new Float:iterator = hullsize/3
temp[2] = Origin[2]
for (new Float:i=Origin[0]-hullsize; i < Origin[0]+hullsize; i+=iterator) {
for (new Float:j=Origin[1]-hullsize; j < Origin[1]+hullsize; j+=iterator) {
for (new Float:k=Origin[2]-CS_PLAYER_HEIGHT; k < Origin[2]+CS_PLAYER_HEIGHT; k+=6) {
temp[0] = i
temp[1] = j
temp[2] = k
if (point_contents(temp) != -1)
return true
}
}
}
return false
}
stock Effect_Bleed(id,color) {
new origin[3]
get_user_origin(id,origin)
new dx, dy, dz
for(new i = 0; i < 3; i++) {
dx = random_num(-15,15)
dy = random_num(-15,15)
dz = random_num(-20,25)
for(new j = 0; j < 2; j++) {
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(origin[0]+(dx*j))
write_coord(origin[1]+(dy*j))
write_coord(origin[2]+(dz*j))
write_short(sprite_blood_spray)
write_short(sprite_blood_drop)
write_byte(color) // color index
write_byte(8) // size
message_end()
}
}
}
public changerace(id) {
if(freeze_ended && player_class[id]!=NONE && is_user_alive(id)) {
new_class[id] = true
client_print(id,print_center,"[Diablo Mod] Please wait for the next round to change your class!")
} else {
savexpcom(id)
player_class[id]=NONE
client_connect(id)
select_class_query(id)
}
}
public FW_WriteString(string[]) {
if (equal(string,""))
return FMRES_IGNORED
if (equal(string,"#Hint_press_buy_to_purchase") || equal(string,"#Hint_press_buy_to_purchase ")) {
write_string( "" );
return FMRES_SUPERCEDE
}
if (equal(string, "#Hint_spotted_a_friend") || equal(string, "#Hint_you_have_the_bomb")) {
write_string( "" );
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
stock hudmsg(id,Float:display_time,const fmt[], {Float,Sql,Result,_}:...) {
if (player_huddelay[id] >= 0.03*4)
return PLUGIN_CONTINUE
new buffer[512]
vformat(buffer, 511, fmt, 4)
set_hudmessage ( 255, 0, 0, -1.0, 0.4 + player_huddelay[id], 0, display_time/2, display_time, 0.1, 0.2, -1 )
show_hudmessage(id, buffer)
player_huddelay[id]+=0.03
remove_task(id+TASK_HUD)
set_task(display_time, "hudmsg_clear", id+TASK_HUD, "", 0, "a", 3)
return PLUGIN_CONTINUE
}
public hudmsg_clear(id) {
new pid = id-TASK_HUD
player_huddelay[pid]=0.0
}
stock Spawn_Ent(const classname[]) {
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, classname))
set_pev(ent, pev_origin, {0.0, 0.0, 0.0})
dllfunc(DLLFunc_Spawn, ent)
return ent
}
stock bool:Can_Trace_Line(id, target) {
for (new i=-35; i < 60; i+=35) {
new Float:Origin_Id[3]
new Float:Origin_Target[3]
new Float:Origin_Return[3]
pev(id,pev_origin,Origin_Id)
pev(target,pev_origin,Origin_Target)
Origin_Id[z] = Origin_Id[z] + i
Origin_Target[z] = Origin_Target[z] + i
trace_line(-1, Origin_Id, Origin_Target, Origin_Return)
if (get_distance_f(Origin_Return,Origin_Target) < 25.0)
return true
}
return false
}
public item_totemheal(id) {
new origin[3]
pev(id,pev_origin,origin)
new ent = Spawn_Ent("info_target")
set_pev(ent,pev_classname,"Effect_Healing_Totem")
set_pev(ent,pev_owner,id)
set_pev(ent,pev_solid,SOLID_TRIGGER)
set_pev(ent,pev_origin,origin)
set_pev(ent,pev_ltime, halflife_time() + 7 + 0.1)
engfunc(EngFunc_SetModel, ent, "addons/amxmodx/diablo/totem_heal.mdl")
set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 )
engfunc(EngFunc_DropToFloor,ent)
set_pev(ent,pev_nextthink, halflife_time() + 0.1)
return PLUGIN_CONTINUE
}
public Effect_Healing_Totem_Think(ent) {
new id = pev(ent,pev_owner)
new totem_dist = 300
if (pev(ent,pev_euser2) == 1) {
new Float:forigin[3], origin[3]
pev(ent,pev_origin,forigin)
FVecIVec(forigin,origin)
new entlist[513]
new numfound = find_sphere_class(0,"player",totem_dist+0.0,entlist,512,forigin)
for (new i=0; i < numfound; i++) {
new pid = entlist[i]
if (get_user_team(pid) != get_user_team(id))
continue
if (is_user_alive(pid) && player_class[pid] == Mag) change_health(pid,5+player_intelligence[id],0,"")
}
set_pev(ent,pev_euser2,0)
set_pev(ent,pev_nextthink, halflife_time() + 1.5)
return PLUGIN_CONTINUE
}
if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id)) {
remove_entity(ent)
return PLUGIN_CONTINUE
}
if (pev(ent,pev_ltime)-2.0 < halflife_time())
set_rendering ( ent, kRenderFxNone, 255,255,255, kRenderTransAlpha, 100 )
new Float:forigin[3], origin[3]
pev(ent,pev_origin,forigin)
FVecIVec(forigin,origin)
message_begin( MSG_BROADCAST, SVC_TEMPENTITY, origin );
write_byte( TE_BEAMCYLINDER );
write_coord( origin[0] );
write_coord( origin[1] );
write_coord( origin[2] );
write_coord( origin[0] );
write_coord( origin[1] + totem_dist );
write_coord( origin[2] + totem_dist );
write_short( sprite_white );
write_byte( 0 ); // startframe
write_byte( 0 ); // framerate
write_byte( 10 ); // life
write_byte( 10 ); // width
write_byte( 255 ); // noise
write_byte( 255 ); // r, g, b
write_byte( 100 ); // r, g, b
write_byte( 100 ); // r, g, b
write_byte( 128 ); // brightness
write_byte( 5 ); // speed
message_end();
set_pev(ent,pev_euser2,1)
set_pev(ent,pev_nextthink, halflife_time() + 0.5)
return PLUGIN_CONTINUE
}
public freeze_over1() {
agi = BASE_SPEED;
new players[32], num
get_players(players,num,"a")
for(new i=0 ; i<num ; i++) {
set_speedchange(players[i])
}
}
public set_speedchange(id) {
if(DemageTake[id]==1) agi=(BASE_SPEED / 2)
else agi=BASE_SPEED
if (is_user_connected(id) && freeze_ended) {
new speeds
if(player_class[id] == Ninja) {
if (NinjaUlt_active[id] == true) {
speeds= (40 + floatround(player_dextery[id]*1.3) + floatround(player_intelligence[id]*1.3)) * 2
} else {
speeds= 40 + floatround(player_dextery[id]*1.3) + floatround(player_intelligence[id]*1.3)
}
}
else if(player_class[id] == Assassin) speeds= 10 + floatround(player_dextery[id]*1.3)
else speeds= floatround(player_dextery[id]*1.3)
set_user_maxspeed(id, agi + speeds)
}
}
public set_renderchange(id) {
if(is_user_connected(id) && is_user_alive(id)) {
if(!task_exists(id+TASK_FLASH_LIGHT)) {
if (player_class[id] == Ninja || player_class[id] == Hunter && HunterUlt_active[id] == true)
set_user_rendering(id,kRenderFxNone, 0,0,0, kRenderTransTexture,9)
else if(invisible_cast[id]==1) {
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 10)
Display_Fade(id,1<<14,1<<14 ,1<<16,192,192,192,20)
} else
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 255)
}
else set_user_rendering(id,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4)
}
}
public set_gravitychange(id) {
if(is_user_alive(id) && is_user_connected(id)) {
if(player_class[id] == Ninja) {
if(player_b_gravity[id]>6) set_user_gravity(id, 0.17)
else if(player_b_gravity[id]>3) set_user_gravity(id, 0.2)
else set_user_gravity(id, 0.25)
} else
set_user_gravity(id,1.0*(1.0-player_b_gravity[id]/12.0))
}
}
public cmd_who(id) {
static motd[1000], header[100], name[32], len, i
len = 0
new team[32]
static players[32], numplayers;
get_players(players, numplayers, "")
new playerid;
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000>")
len += formatex(motd[len],sizeof motd - 1 - len,"<center><table width=700 border=1 cellpadding=4 cellspacing=4>")
len += formatex(motd[len],sizeof motd - 1 - len,"<tr><td>Name</td><td>Class</td><td>Level</td><td>Team</td></tr>")
formatex( header, sizeof header - 1, "Diablo Mod")
for(i=0; i < numplayers; i++) {
playerid = players[i]
if ( get_user_team(playerid) == 1 ) team = "Terrorist"
else if ( get_user_team(playerid) == 2 ) team = "CT"
else team = "Spectator"
get_user_name( playerid, name, 31 )
get_user_name( playerid, name, 31 )
len += formatex(motd[len],sizeof motd - 1 - len,"<tr><td>%s</td><td>%s</td><td>%d</td><td>%s</td></tr>",name,Race[player_class[playerid]], player_lvl[playerid],team)
}
len += formatex(motd[len],sizeof motd - 1 - len,"</table></center>")
show_motd(id, motd, header)
}
stock refill_ammo(id) {
new wpnid
if(!is_user_alive(id) || pev(id,pev_iuser1)) return;
cs_set_user_armor(id,200,CS_ARMOR_VESTHELM);
new wpn[32],clip,ammo
wpnid = get_user_weapon(id, clip, ammo)
get_weaponname(wpnid,wpn,31)
new wEnt;
wpnid = get_weaponid(wpn)
wEnt = get_weapon_ent(id,wpnid);
cs_set_weapon_ammo(wEnt,maxClip[wpnid]);
}
stock get_weapon_ent(id,wpnid=0,wpnName[]="") {
static newName[32];
if(wpnid) get_weaponname(wpnid,newName,31);
else formatex(newName,31,"%s",wpnName);
if(!equal(newName,"weapon_",7))
format(newName,31,"weapon_%s",newName);
new ent;
while((ent = engfunc(EngFunc_FindEntityByString,ent,"classname",newName)) && pev(ent,pev_owner) != id) {}
return ent;
}
public event_flashlight(id) {
if(!get_cvar_num("flashlight_custom")) {
return;
}
if(flashlight[id]) {
flashlight[id] = 0;
} else {
if(flashbattery[id] > 0) {
flashlight[id] = 1;
}
}
if(!task_exists(TASK_CHARGE+id)) {
new parms[1];
parms[0] = id;
set_task((flashlight[id]) ? get_cvar_float("flashlight_drain") : get_cvar_float("flashlight_charge"),"charge",TASK_CHARGE+id,parms,1);
}
message_begin(MSG_ONE,get_user_msgid("Flashlight"),{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
entity_set_int(id,EV_INT_effects,entity_get_int(id,EV_INT_effects) & ~EF_DIMLIGHT);
}
public charge(parms[]) {
if(!get_cvar_num("flashlight_custom")) {
return;
}
new id = parms[0];
if(flashlight[id])
flashbattery[id] -= 1;
else
flashbattery[id] += 1;
message_begin(MSG_ONE,get_user_msgid("FlashBat"),{0,0,0},id);
write_byte(flashbattery[id]);
message_end();
if(flashbattery[id] <= 0) {
flashbattery[id] = 0;
flashlight[id] = 0;
message_begin(MSG_ONE,get_user_msgid("Flashlight"),{0,0,0},id);
write_byte(flashlight[id]);
write_byte(flashbattery[id]);
message_end();
} else if(flashbattery[id] >= MAX_FLASH) {
flashbattery[id] = MAX_FLASH
return; // return because we don't need to charge anymore
}
set_task((flashlight[id]) ? get_cvar_float("flashlight_drain") : get_cvar_float("flashlight_charge"),"charge",TASK_CHARGE+id,parms,1)
}
public give_knife(id) {
new knifes = 0
if(player_class[id] == Ninja) knifes = 5 + floatround ( player_intelligence[id]/10.0 , floatround_floor )
max_knife[id] = knifes
player_knife[id] = knifes
}
public command_knife(id) {
if(!is_user_alive(id)) return PLUGIN_HANDLED
if(!player_knife[id]) {
client_print(id,print_center,"You have no more throwing knives!")
return PLUGIN_HANDLED
}
if(tossdelay[id] > get_gametime() - 0.9) return PLUGIN_HANDLED
else tossdelay[id] = get_gametime()
player_knife[id]--
if (player_knife[id] == 1) {
client_print(id,print_center,"You have one throwing knife left!")
}
new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent
entity_get_vector(id, EV_VEC_origin , Origin)
entity_get_vector(id, EV_VEC_v_angle, vAngle)
Ent = create_entity("info_target")
if (!Ent) return PLUGIN_HANDLED
entity_set_string(Ent, EV_SZ_classname, "throwing_knife")
entity_set_model(Ent, "models/diablomod/w_throwingknife.mdl")
new Float:MinBox[3] = {-1.0, -7.0, -1.0}
new Float:MaxBox[3] = {1.0, 7.0, 1.0}
entity_set_vector(Ent, EV_VEC_mins, MinBox)
entity_set_vector(Ent, EV_VEC_maxs, MaxBox)
vAngle[0] -= 90
entity_set_origin(Ent, Origin)
entity_set_vector(Ent, EV_VEC_angles, vAngle)
entity_set_int(Ent, EV_INT_effects, 2)
entity_set_int(Ent, EV_INT_solid, 1)
entity_set_int(Ent, EV_INT_movetype, 6)
entity_set_edict(Ent, EV_ENT_owner, id)
VelocityByAim(id, get_cvar_num("diablo_knife_speed") , Velocity)
entity_set_vector(Ent, EV_VEC_velocity ,Velocity)
return PLUGIN_HANDLED
}
public touchKnife(knife, id) {
new kid = entity_get_edict(knife, EV_ENT_owner)
if(is_user_alive(id)) {
new movetype = entity_get_int(knife, EV_INT_movetype)
if(movetype == 0) {
if( player_knife[id] < max_knife[id]) {
player_knife[id] += 1
client_print(id,print_center,"You have %i throwing knives left!",player_knife[id])
}
emit_sound(knife, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
remove_entity(knife)
} else if (movetype != 0) {
if(kid == id) return
remove_entity(knife)
if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(id) == get_user_team(kid)) return
entity_set_float(id, EV_FL_dmg_take, get_cvar_num("diablo_knife") * 1.0)
change_health(id,-get_cvar_num("diablo_knife"),kid,"knife")
message_begin(MSG_ONE,get_user_msgid("ScreenShake"),{0,0,0},id)
write_short(7<<14)
write_short(1<<13)
write_short(1<<14)
message_end()
if(get_user_team(id) == get_user_team(kid)) {
new name[33]
get_user_name(kid,name,32)
client_print(0,print_chat,"%s attacked a teammate",name)
}
emit_sound(id, CHAN_ITEM, "weapons/knife_hit4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
}
public touchWorld(knife, world) {
entity_set_int(knife, EV_INT_movetype, 0)
emit_sound(knife, CHAN_ITEM, "weapons/knife_hitwall1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public touchbreakable(ent1, ent2) {
new name[32],breakable,ent
entity_get_string(ent1,EV_SZ_classname,name,31)
if(equali(name,"func_breakable")) {
breakable=ent1
ent=ent2
} else {
breakable=ent2
ent=ent1
}
new Float: b_hp = entity_get_float(breakable,EV_FL_health)
if(b_hp>80) entity_set_float(breakable,EV_FL_health,b_hp-50.0)
else dllfunc(DLLFunc_Use,breakable,ent)
entity_get_string(ent,EV_SZ_classname,name,31)
if(equali(name,"throwing_knife")) {
emit_sound(ent, CHAN_ITEM, "weapons/knife_hitwall1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
} else remove_entity(ent)
}
public kill_all_entity(classname[]) {
new iEnt = find_ent_by_class(-1, classname)
while(iEnt > 0) {
remove_entity(iEnt)
iEnt = find_ent_by_class(iEnt, classname)
}
}
public command_arrow(id) {
if(!is_user_alive(id)) return PLUGIN_HANDLED
new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent
entity_get_vector(id, EV_VEC_origin , Origin)
entity_get_vector(id, EV_VEC_v_angle, vAngle)
Ent = create_entity("info_target")
if (!Ent) return PLUGIN_HANDLED
entity_set_string(Ent, EV_SZ_classname, "xbow_arrow")
entity_set_model(Ent, cbow_bolt)
new Float:MinBox[3] = {-2.8, -2.8, -0.8}
new Float:MaxBox[3] = {2.8, 2.8, 2.0}
entity_set_vector(Ent, EV_VEC_mins, MinBox)
entity_set_vector(Ent, EV_VEC_maxs, MaxBox)
vAngle[0]*= -1
Origin[2]+=10
entity_set_origin(Ent, Origin)
entity_set_vector(Ent, EV_VEC_angles, vAngle)
entity_set_int(Ent, EV_INT_effects, 2)
entity_set_int(Ent, EV_INT_solid, 1)
entity_set_int(Ent, EV_INT_movetype, 5)
entity_set_edict(Ent, EV_ENT_owner, id)
new Float:dmg = get_cvar_float("diablo_arrow") + player_intelligence[id] * get_cvar_float("diablo_arrow_multi")
entity_set_float(Ent, EV_FL_dmg,dmg)
VelocityByAim(id, get_cvar_num("diablo_arrow_speed") , Velocity)
set_rendering (Ent,kRenderFxGlowShell, 255,0,0, kRenderNormal,56)
entity_set_vector(Ent, EV_VEC_velocity ,Velocity)
return PLUGIN_HANDLED
}
public command_bow(id) {
if(!is_user_alive(id)) return PLUGIN_HANDLED
if(bow[id] == 1) {
entity_set_string(id,EV_SZ_viewmodel,cbow_VIEW)
entity_set_string(id,EV_SZ_weaponmodel,cvow_PLAYER)
bowdelay[id] = get_gametime()
} else {
entity_set_string(id,EV_SZ_viewmodel,KNIFE_VIEW)
entity_set_string(id,EV_SZ_weaponmodel,KNIFE_PLAYER)
bow[id]=0
}
return PLUGIN_CONTINUE
}
public toucharrow(arrow, id) {
new kid = entity_get_edict(arrow, EV_ENT_owner)
new lid = entity_get_edict(arrow, EV_ENT_enemy)
if(is_user_alive(id)) {
if(kid == id || lid == id) return
entity_set_edict(arrow, EV_ENT_enemy,id)
new Float:dmg = entity_get_float(arrow,EV_FL_dmg)
entity_set_float(arrow,EV_FL_dmg,(dmg*3.0)/5.0)
if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(id) == get_user_team(kid)) return
Effect_Bleed(id,248)
//bowdelay[kid] -= 0.5 - floatround(player_intelligence[kid]/5.0)
change_health(id,floatround(-dmg-(player_dextery[id]*2)),kid,"knife")
message_begin(MSG_ONE,get_user_msgid("ScreenShake"),{0,0,0},id);
write_short(7<<14);
write_short(1<<13);
write_short(1<<14);
message_end();
if(get_user_team(id) == get_user_team(kid)) {
new name[33]
get_user_name(kid,name,32)
client_print(0,print_chat,"%s attacked a teammate",name)
}
emit_sound(id, CHAN_ITEM, "weapons/knife_hit4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
if(dmg<30) remove_entity(arrow)
}
}
public touchWorld2(arrow, world) {
remove_entity(arrow)
}
public hunter_Line(id,vid,end[3]) {
if(is_user_alive(id) && is_user_alive(vid) && trace_bool[id]) {
new start[3]
get_user_origin(vid,start)
message_begin(MSG_ONE,SVC_TEMPENTITY,{0,0,0},id)
write_byte(0)
write_coord(start[0]) // starting pos
write_coord(start[1])
write_coord(start[2])
write_coord(end[0]) // ending pos
write_coord(end[1])
write_coord(end[2])
write_short(sprite_line) // sprite index
write_byte(1) // starting frame
write_byte(5) // frame rate
write_byte(100) // life
write_byte(1) // line width
write_byte(1) // noise
write_byte(255) // RED
write_byte(255) // GREEN
write_byte(100) // BLUE
write_byte(150) // brightness
write_byte(5) // scroll speed
message_end()
new parms[5];
for(new i=0;i<3;i++) {
parms[i] = start[i]
}
parms[3]=id
parms[4]=vid
set_task(0.20,"charge_hunter",id+TARACE_TASK+vid*100,parms,5)
}
}
public charge_hunter(parms[]) {
new stop[3]
for(new i=0;i<3;i++) {
stop[i] =parms[i]
}
hunter_Line(parms[3],parms[4],stop)
}
public grenade_throw(id, ent, wID) {
if(!g_TrapMode[id] || !is_valid_ent(ent))
return PLUGIN_CONTINUE
new Float:fVelocity[3]
VelocityByAim(id, cvar_throw_vel, fVelocity)
entity_set_vector(ent, EV_VEC_velocity, fVelocity)
new Float: angle[3]
entity_get_vector(ent,EV_VEC_angles,angle)
angle[0]=0.00
entity_set_vector(ent,EV_VEC_angles,angle)
entity_set_float(ent,EV_FL_dmgtime,get_gametime()+3.5)
entity_set_int(ent, NADE_PAUSE, 0)
entity_set_int(ent, NADE_ACTIVE, 0)
entity_set_int(ent, NADE_VELOCITY, 0)
entity_set_int(ent, NADE_TEAM, get_user_team(id))
new param[1]
param[0] = ent
set_task(3.0, "task_ActivateTrap", 0, param, 1)
return PLUGIN_CONTINUE
}
public task_ActivateTrap(param[]) {
new ent = param[0]
if(!is_valid_ent(ent))
return PLUGIN_CONTINUE
entity_set_int(ent, NADE_PAUSE, 1)
entity_set_int(ent, NADE_ACTIVE, 1)
new Float:fOrigin[3]
entity_get_vector(ent, EV_VEC_origin, fOrigin)
fOrigin[2] -= 8.1*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[entity_get_edict(ent,EV_ENT_owner)])))
entity_set_vector(ent, EV_VEC_origin, fOrigin)
return PLUGIN_CONTINUE
}
public think_Grenade(ent) {
new entModel[33]
entity_get_string(ent, EV_SZ_model, entModel, 32)
if(!is_valid_ent(ent) || equal(entModel, "models/w_c4.mdl"))
return PLUGIN_CONTINUE
if(entity_get_int(ent, NADE_PAUSE))
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public think_Bot(bot) {
new ent = -1
while((ent = find_ent_by_class(ent, "grenade"))) {
new entModel[33]
entity_get_string(ent, EV_SZ_model, entModel, 32)
if(equal(entModel, "models/w_c4.mdl"))
continue
if(!entity_get_int(ent, NADE_ACTIVE))
continue
new Players[32], iNum
get_players(Players, iNum, "a")
for(new i = 0; i < iNum; ++i) {
new id = Players[i]
if(entity_get_int(ent, NADE_TEAM) == get_user_team(id))
continue
if(get_entity_distance(id, ent) > cvar_activate_dis || player_speed(id) <200.0)
continue
if(entity_get_int(ent, NADE_VELOCITY)) continue
new Float:fOrigin[3]
entity_get_vector(ent, EV_VEC_origin, fOrigin)
while(PointContents(fOrigin) == CONTENTS_SOLID)
fOrigin[2] += 100.0
entity_set_vector(ent, EV_VEC_origin, fOrigin)
drop_to_floor(ent)
new Float:fVelocity[3]
entity_get_vector(ent, EV_VEC_velocity, fVelocity)
fVelocity[2] += float(cvar_nade_vel)
entity_set_vector(ent, EV_VEC_velocity, fVelocity)
entity_set_int(ent, NADE_VELOCITY, 1)
new param[1]
param[0] = ent
entity_set_float(param[0], EV_FL_nextthink, halflife_time())
entity_set_int(param[0], NADE_PAUSE, 0)
}
}
if(get_timeleft()<2 && map_end<2)
map_end=2
else if(get_timeleft()<6 && map_end<1) {
new play[32],num
get_players(play,num)
for(new i=0;i<num;i++) {
savexpcom(play[i])
}
map_end=1
}
entity_set_float(bot, EV_FL_nextthink, halflife_time() + 0.1)
}
stock Float:player_speed(index) {
new Float:vec[3]
pev(index,pev_velocity,vec)
vec[2]=0.0
return floatsqroot ( vec[0]*vec[0]+vec[1]*vec[1] )
}
public _create_ThinkBot() {
new think_bot = create_entity("info_target")
if(!is_valid_ent(think_bot))
log_amx("For some reason, the universe imploded, reload your server")
else {
entity_set_string(think_bot, EV_SZ_classname, "think_bot")
entity_set_float(think_bot, EV_FL_nextthink, halflife_time() + 1.0)
}
}
public change_health(id,hp,attacker,weapon[]) {
new m_health
if (player_strength[id] < 25) {
m_health = race_heal[player_class[id]]+player_strength[id]*2
}
if (player_strength[id] > 24 && player_strength[id] < 50) {
m_health = race_heal[player_class[id]] + 10 + player_strength[id]*2
}
if (player_strength[id] == 50) {
m_health = race_heal[player_class[id]] + 20 + player_strength[id]*2
}
if(is_user_alive(id) && is_user_connected(id)) {
new health = get_user_health(id)
if(hp>0) {
if (hp+health>m_health) set_user_health(id,m_health)
else set_user_health(id,get_user_health(id)+hp)
} else {
if(health+hp<1)
UTIL_Kill(attacker,id,weapon)
else set_user_health(id,get_user_health(id)+hp)
}
if(id!=attacker && hp<0) {
player_dmg[attacker]-=hp
dmg_exp(attacker)
}
}
}
public UTIL_Kill(attacker,id,weapon[]) {
if( is_user_alive(id)){
if(get_user_team(attacker)!=get_user_team(id))
set_user_frags(attacker,get_user_frags(attacker) +1);
if (cs_get_user_money(attacker) + 150 <= 16000)
cs_set_user_money(attacker,cs_get_user_money(attacker)+150)
else
cs_set_user_money(attacker,16000)
cs_set_user_deaths(id, cs_get_user_deaths(id)+1)
user_kill(id,1)
if(is_user_connected(attacker) && attacker!=id) {
award_kill(attacker,id)
}
message_begin( MSG_ALL, gmsgDeathMsg,{0,0,0},0)
write_byte(attacker)
write_byte(id)
write_byte(0)
write_string(weapon)
message_end()
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(attacker)
write_short(get_user_frags(attacker))
write_short(get_user_deaths(attacker))
write_short(0)
write_short(get_user_team(attacker))
message_end()
message_begin(MSG_ALL,gmsgScoreInfo)
write_byte(id)
write_short(get_user_frags(id))
write_short(get_user_deaths(id))
write_short(0)
write_short(get_user_team(id))
message_end()
new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
get_user_name(attacker, kname, 31);
get_user_team(attacker, kteam, 9);
get_user_authid(attacker, kauthid, 31);
get_user_name(id, vname, 31);
get_user_team(id, vteam, 9);
get_user_authid(id, vauthid, 31);
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
kname, get_user_userid(attacker), kauthid, kteam,
vname, get_user_userid(id), vauthid, vteam, weapon);
}
}
stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha) {
message_begin( MSG_ONE, g_msg_screenfade,{0,0,0},id )
write_short( duration ) // Duration of fadeout
write_short( holdtime ) // Hold time of color
write_short( fadetype ) // Fade type
write_byte ( red ) // Red
write_byte ( green ) // Green
write_byte ( blue ) // Blue
write_byte ( alpha ) // Alpha
message_end()
}
public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,trace) {
if(!is_user_connected(id))
return FMRES_IGNORED;
if(!is_user_alive(id))
return FMRES_IGNORED;
new hit = get_tr2(trace, TR_pHit)
if(!(pev(id,pev_button) & IN_ATTACK))
return FMRES_IGNORED;
new h_bulet=0
if(golden_bulet[id]>0 && paladin_bullet[id] && player_class[id] == Paladin) {
h_bulet=1
}
if(is_valid_ent(hit)) {
new name[64]
entity_get_string(hit,EV_SZ_classname,name,63)
if(equal(name,"dbmod_shild")) {
new Float: ori[3]
entity_get_vector(hit,EV_VEC_origin,ori)
set_tr2(trace,TR_vecEndPos,vecEnd)
if(after_bullet[id]>0) {
new Float: health=entity_get_float(hit,EV_FL_health)
entity_set_float(hit,EV_FL_health,health-3.0)
if(health-1.0<0.0) remove_entity(hit)
after_bullet[id]--
}
set_tr2(trace,TR_iHitgroup,8);
set_tr2(trace,TR_flFraction,1.0);
return FMRES_SUPERCEDE;
}
}
if(is_user_alive(hit)) {
if(h_bulet) {
set_tr2(trace, TR_iHitgroup, HIT_HEAD)
static hit, Float:head_origin[3], Float:angles[3]
hit = get_tr2(trace, TR_pHit)
engfunc(EngFunc_GetBonePosition, hit, 8, head_origin, angles)
set_tr2(trace, TR_vecEndPos, head_origin) // Blood now comes out of the head!
}
if(ultra_armor[hit]>0 ) {
if(after_bullet[id]>0) {
if(ultra_armor[hit]>0) { ultra_armor[hit]--
} else if(player_ultra_armor_left[hit]>0) {
player_ultra_armor_left[hit]--
after_bullet[id]--
}
}
set_tr2(trace, TR_iHitgroup, 8)
}
return FMRES_IGNORED
}
return FMRES_IGNORED;
}
public dmg_exp(id) {
if(!is_user_bot(id)) {
new min=get_cvar_num("diablo_dmg_exp")
if(min<1) return
new exp=0
while(player_dmg[id]>min)
{
player_dmg[id]-=min
exp++
}
Give_Xp(id,exp)
}
}
ColorChat( index, const Msg[], any:... ) {
new Buffer[ 190 ], Buffer2[ 192 ];
formatex( Buffer2, charsmax( Buffer2 ), "^x04[%s]^x01 %s", g_szPrefix, Msg );
vformat( Buffer, charsmax( Buffer ), Buffer2, 3 );
if( !index ) {
for( new i = 1; i <= MAX; i++ ) {
if( !is_user_connected( i ) )
continue;
message_begin( MSG_ONE_UNRELIABLE, gmsgSayText,_, i );
write_byte( i );
write_string( Buffer );
message_end( );
}
} else {
if( !is_user_connected( index ) )
return;
message_begin( MSG_ONE, gmsgSayText,_, index );
write_byte( index );
write_string( Buffer );
message_end( );
}
}
BuyXP(id) {
new xpp, xpcost, money
new numbuys
new name[33], authid[33]
new cvar_xp, cvar_xpcost
cvar_xp = 1
cvar_xpcost = (500 - player_lvl[id])
xpcost = cvar_xpcost
xpp = 0
money = cs_get_user_money(id)
get_user_authid(id,authid,32)
get_user_name(id,name,32)
if( money < cvar_xpcost ){
client_print(id,print_chat,"[Diablo Mod] Sorry, %s. You need at least $%d to buy experience!", name, cvar_xpcost )
return PLUGIN_CONTINUE
}
numbuys = money / cvar_xpcost //calculate the max number of transactions (originally used in for loop)
xpp = numbuys * cvar_xp //calculate how much exp they can buy using numbuys
xpcost = numbuys * cvar_xpcost //calculate the cost of the above amount of exp
console_print(0, "[Diablo Mod] %s PURCHASED %d XP : COST %d", name, xpp, xpcost)
cs_set_user_money( id, (money - xpcost) ,1 ) //subtract money from buys
server_cmd("db_givexp ^"%s^" %d", authid, xpp) //add exp for buys
if( cs_get_user_money(id) < 0 ){
cs_set_user_money( id, 0, 1 )
}
return PLUGIN_CONTINUE
}
public CmdGiveXp(id, iCid, iLvl) {
if(!cmd_access(id, iLvl, iCid, 3))
return PLUGIN_HANDLED;
if (get_user_flags(id) & ADMIN_LEVEL_A) {
new szPlayer[32], szAmount[10];
read_argv(1, szPlayer, charsmax(szPlayer));
read_argv(2, szAmount, charsmax(szAmount));
new iPlayer = cmd_target(id, szPlayer, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS);
new iAmount = str_to_num(szAmount);
if(iAmount < 0 || !iPlayer)
return PLUGIN_HANDLED;
Give_Xp(iPlayer, iAmount);
new szName[32];
get_user_name(iPlayer, szName, charsmax(szName));
console_print(id, "* Gave %i xp to %s", iAmount, szName);
}
return PLUGIN_HANDLED;
}
public cmd_Ultimate(id) {
new Float: paladin_ult = 1.5+(player_intelligence[id]/50.0)
if (freeze_ended && is_user_alive(id)) {
if (player_class[id] == Mag) {
if (player_sorc_heal[id] > 0) {
item_totemheal(id)
player_sorc_heal[id] --
} else {
client_print(id,print_center,"[Diablo Mod] You have already placed a healing totem!")
}
}
if (player_class[id] == Paladin ) {
new Float: time_delay = 2.0
HunterUlt_end[id]=halflife_time()+time_delay
new bar_delay = floatround(time_delay,floatround_ceil)
if (GodLeft[id]>0) {
if (halflife_time()>cast_end[id]) {
message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
write_byte( bar_delay )
write_byte( 0 )
message_end()
GodLeft[id]--
Display_Fade(id,8192,0 ,1<<16,255,255,0,20)
set_user_godmode(id, 1)
set_user_rendering(id, kRenderFxGlowShell, 255, 255, 0, kRenderNormal, 50)
}
set_task(paladin_ult, "paladin_godmodeoff",id)
} else {
client_print(id,print_center,"[Diablo Mod] You have already used all your god mode stacks!")
}
}
if (player_class[id] == Assassin) {
if (AssassinUlt[id] > 0 && on_knife[id]) {
UTIL_Teleport(id,300+15*player_intelligence[id])
AssassinUlt[id] --
} else {
client_print(id,print_center,"[Diablo Mod] You cannot blink right now!")
}
}
if (player_class[id] == Hunter) {
new Float: time_delay = 2.0
HunterUlt_end[id]=halflife_time()+time_delay
new bar_delay = floatround(time_delay,floatround_ceil)
if(bow[id]) {
if (HunterUlt[id] > 0) {
if (halflife_time()>cast_end[id]) {
message_begin( MSG_ONE, gmsgBartimer, {0,0,0}, id )
write_byte( bar_delay )
write_byte( 0 )
message_end()
HunterUlt[id] --
HunterUlt_active[id] = true
set_renderchange(id)
client_print(id,print_center,"[Diablo Mod] You are now invisible!")
set_task(2.0, "Hunter_UltOff",id)
} else {
client_print(id,print_center,"[Diablo Mod] You are already invisible!")
}
} else {
client_print(id,print_center,"[Diablo Mod] You don't have enough stacks to become invisible!")
}
} else {
client_print(id,print_center,"[Diablo Mod] You need to equip your bow!")
}
}
if (player_class[id] == Necromancer) {
if (NecroUlt[id] == 0) {
spawn(id)
spawn(id)
NecroUlt[id] = 1
} else {
client_print(id,print_center,"[Diablo Mod] You have already used your ultimate for this round!")
}
}
if (player_class[id] == Ninja) {
if (NinjaUlt[id] > 0) {
NinjaUlt[id] --
NinjaUlt_active[id] = true
Display_Fade(id,1<<11,1<<14 ,1<<16,255,0,0,20)
set_speedchange(id)
set_task(5.0, "Ninja_ultOff",id)
} else {
client_print(id,print_center,"[Diablo Mod] You don't have enough stacks to power up!")
}
}
if (player_class[id] == Barbarian) {
if (BarbUlt_used[id] == false) {
BarbUlt_used[id] = true
BarbUlt[id] = true
change_health(id,50+player_intelligence[id] ,0,"")
refill_ammo(id)
Display_Fade(id,40960,0 ,1<<16,255,0,0,30)
emit_sound(id, CHAN_ITEM, "dbmod/Barbarian_Rage.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
client_print(id,print_center,"[Diablo Mod] No recoil recoil + health, armor and ammo refill!")
set_task(10.0, "Barb_Ultoff",id)
} else {
client_print(id,print_center,"[Diablo Mod] You have already used your power up!")
}
}
}
}
public Ninja_ultOff(id) {
NinjaUlt_active[id] = false
}
public paladin_godmodeoff(id) {
set_user_godmode(id, 0)
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 50)
}
public Hunter_UltOff(id) {
HunterUlt_active[id] = false
}
public Barb_Ultoff(id) {
BarbUlt[id] = false
}
public Paladin_deagle( ent_Deagle ) {
new id = pev( ent_Deagle, pev_owner ) // Find the owner
if (is_user_alive(id) && player_class[id] == Paladin) {
if (golden_bulet[id] > 0) golden_bulet[id]--
return HAM_HANDLED
}
return HAM_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage) {
if ( is_user_connected(victim) && is_user_connected(attacker) && player_power[attacker] > 0 ) {
SetHamParamFloat(4, damage * (1.0 + player_power[attacker]*0.01))
return HAM_HANDLED
}
return HAM_IGNORED
}
public Commands_menu(id) {
new menu = menu_create( "\rCommands menu:", "Commands_handler" );
menu_additem( menu, "\w/class or /changerace-- Change your class!", "", 0 );
menu_additem( menu, "\w/classinfo -- Get all the information about a class!", "", 0 );
menu_additem( menu, "\w/speed -- Check your max speed!", "", 0 );
menu_additem( menu, "\w/reset -- Reset your skills!", "", 0 );
menu_additem( menu, "\w/players -- See all players their class!", "", 0 );
menu_additem( menu, "\w/buyxp -- Buy experience based on your current money!", "", 0 );
menu_additem( menu, "\w/skills -- Get information about your skills!", "", 0 );
menu_additem( menu, "\w/classattribs -- Get more information about what class skills do!", "", 0 );
menu_additem( menu, "\w/autobuyxp -- Automaticly buys experience [Donator only]", "", 0 );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu, 0 );
}
public Commands_handler(id, menu, item) {
switch( item ) {
case 0:
{
changerace(id)
}
case 1:
{
Classinfo_menu(id)
}
case 2:
{
speed(id)
}
case 3:
{
reset_skill(id)
}
case 4:
{
cmd_who(id)
}
case 5:
{
BuyXP(id)
}
case 6:
{
skills(id)
}
case 7:
{
ClassAttribs(id)
}
case 8:
{
Autobuyxp(id)
}
case MENU_EXIT:
{
client_print( id, print_chat, "I hope your knowledge has been increased!" );
}
}
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public Classinfo_menu(id) {
new menu = menu_create( "\rClass information:", "Classinfo_handler" );
menu_additem( menu, "\w Sorcerer", "", 0 );
menu_additem( menu, "\w Paladin", "", 0 );
menu_additem( menu, "\w Assassin", "", 0 );
menu_additem( menu, "\w Necromancer", "", 0 );
menu_additem( menu, "\w Barbarian", "", 0 );
menu_additem( menu, "\w Ninja", "", 0 );
menu_additem( menu, "\w Hunter", "", 0 );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu, 0 );
}
public skills(id) {
static motd[1000], header[100], len
len = 0
formatex( header, sizeof header - 1, "Skills information")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=4><center><br><br><br><br><br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Your current intelligence is: %i. This is used to increase your class skills! <br><br>", player_intelligence[id])
len += formatex(motd[len],sizeof motd - 1 - len,"Your current strength is: %i. For every strength you gain 2 HP and on 25/50 you gain 10/20 extra HP.<br><br>", player_strength[id])
len += formatex(motd[len],sizeof motd - 1 - len,"Your current agility is: %i. This will give you %0.0f%% damage reduction.<br><br>",player_agility[id],player_damreduction[id]*100)
len += formatex(motd[len],sizeof motd - 1 - len,"Your current power is %i This will give you %i%% total damage<br><br>", player_power[id], 100 + player_power[id] )
len += formatex(motd[len],sizeof motd - 1 - len,"Your current vampyric power is %i. This will heal you with %i HP upon kill!<br><br>",player_vampyric[id],player_vampyric[id])
len += formatex(motd[len],sizeof motd - 1 - len,"You currently have %i Dextery. This will make you run with %0.0f% extra speed!<br><br>", player_dextery[id], player_dextery[id]*1.3)
len += formatex(motd[len],sizeof motd - 1 - len,"</center>")
show_motd(id, motd, header)
}
public Classinfo_handler(id, menu, item) {
static motd[1000], header[100], len
len = 0
switch( item ) {
case 0:
{
formatex( header, sizeof header - 1, "Class information: Sorcerer")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=6><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Start with 80hp.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Use your flashlight to make invisible enemy's visible by aiming on them!<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len," Use your ultimate to create a healing totem to heal all your allies close to your totem! <br>This will heal you up for 20 HP, and 4 more for every point you have in INT!")
len += formatex(motd[len],sizeof motd - 1 - len,"</center>")
show_motd(id, motd, header)
}
case 1:
{
formatex( header, sizeof header - 1, "Class information: Paladin")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=6><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Start with 50 hp.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Your deagle will have magic bullets(headshot no matter where you hit the enemy) Max 7 depending on your INT!<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Use your ultimate to become invulnerable for a small period ( increase this with higher INT).")
len += formatex(motd[len],sizeof motd - 1 - len,"</center>")
show_motd(id, motd, header)
}
case 2:
{
formatex( header, sizeof header - 1, "Class information: Assassin")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=6><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Start with 100hp. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"You will walk around silently! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Stand still with your knife to become invisible! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Use your ultimate to blink around the map, every 5 int will give you a new charge! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
}
case 3:
{
formatex( header, sizeof header - 1, "Class information: Necromancer")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=6><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Start with 70 hp. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Use your ultimate to return to spawn with your current hp! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Get the ability to revive your team members (increase the amount of stacks with higher INT)! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
}
case 4:
{
formatex( header, sizeof header - 1, "Class information: Barbarian")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=6><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Start with 50hp. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"You will have 1 charge of armor, which will deflect the first hit you take, the more int you get, the more charges! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Use your ultimate for a boost! You will get 50 hp(+1 per int) 200 armor, an ammo refill and no recoil for 10 seconds! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
}
case 5:
{
formatex( header, sizeof header - 1, "Class information: Ninja")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=6><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Start with 170hp. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"You cannot use a gun, but you are invisible and have increased gravity. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Throw a knife with R, the more INT you have, the more throwing knives you have. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"INT will also boost your speed! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Use your ultimate to become a superninja for a short period! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
}
case 6:
{
formatex( header, sizeof header - 1, "Class information: Hunter")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=6><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Start with 120hp. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Press R on your knife to gain a bow! The more int, the faster you can shoot and the more damage you deal. <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Load up with your knife to gain a flashbang. Press use to make any grenade into a trap, then throw it! <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Use your ultimate to become invisible temporarily(with bow equipped) <br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
}
}
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public eT_win() {
new Players[32], playerCount, id
get_players(Players, playerCount, "eh", "TERRORIST")
for (new i=0; i<playerCount; i++) {
id = Players[i]
Give_Xp(id, 20)
client_print(id, print_chat, "You have been given 20 experience points for winning the round!")
}
}
public eCT_win() {
new Players[32], playerCount, id
get_players(Players, playerCount, "eh", "CT")
for (new i=0; i<playerCount; i++) {
id = Players[i]
Give_Xp(id, 20)
client_print(id, print_chat, "You have been given 20 experience points for winning the round!")
}
}
public Autobuyxp(id) {
if(get_user_flags(id) & ADMIN_LEVEL_A) {
if (autobuyxp[id] == false) {
autobuyxp[id] = true
client_print(id, print_chat, "You have enabled autobuyxp, to disable write /autobuyxp again!")
} else {
autobuyxp[id] = false
client_print(id, print_chat, "You have disabled autobuyxp, to enable write /autobuyxp again!")
}
} else {
client_print(id, print_chat, "Sorry, this function is only possible for admins and donators!")
}
}
public peformautobuy(id) {
if(is_user_alive(id) && get_user_flags(id) & ADMIN_LEVEL_A && autobuyxp[id] == true && cs_get_user_money(id) > 15000) {
BuyXP(id)
client_print(id, print_chat, "You automaticly purchased experience because /autobuyxp is enabled!")
}
}
public ClassAttribs(id) {
static motd[1000], header[100], len
len = 0
if (player_class[id] == Mag) {
formatex( header, sizeof header - 1, "Class information: Sorcerer")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=5><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive: Get a total of 90 seconds flashlight per round to reveal invisible enemies.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Ultimate: Your healing wards will heal for 5 HP + 1 HP per int per wave. In total there are 4 waves.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</center>")
show_motd(id, motd, header)
} else if (player_class[id] == Paladin) {
formatex( header, sizeof header - 1, "Class information: Paladin")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=5><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive: For each 10 points in intelligence you will gain an extra magic deagle bullet!<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Ultimate: Gained 1.5 seconds + 0.02 second per intelligence of god mode, Each 25 intelligence you will gain another godmode stack!<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</center>")
show_motd(id, motd, header)
} else if (player_class[id] == Assassin) {
formatex( header, sizeof header - 1, "Class information: Assassin")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=5><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive: Silent run + Become invisible when holding your knife for 10 seconds - 0.04 second per intelligence.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Ultimate: Peform a teleport with a base distance of 300 units. Per intelligence you will gain another 15 units!<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
} else if (player_class[id] == Necromancer) {
formatex( header, sizeof header - 1, "Class information: Necromancer")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=5><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive: Revive a team member. Per 25 intelligence you will gain another stack.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Ultimate: Use your ultimate to respawn with full health! This can only be done once per round.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
} else if (player_class[id] == Barbarian) {
formatex( header, sizeof header - 1, "Class information: Barbarian")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=5><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive: Regain full ammo and 20 HP upon kill, On roundstart you will gain 200 armor and bullet blocking armor stacks. Per 10 intelligence you will gain another stack.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"Ultimate: Gain instant ammo refill, 200 armor and no recoil for 10 seconds.<br><br>")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
} else if (player_class[id] == Ninja) {
formatex( header, sizeof header - 1, "Class information: Ninja")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=5><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive: Run with 40 extra speed, for every dextery or intelligence you will gain an extra 1.3 speed!<br><br> ")
len += formatex(motd[len],sizeof motd - 1 - len,"Ultimate: Become a super ninja! This will give you double your passive speed and allows you to peform jumps in the air for a small duration!<br><br> ")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
} else if (player_class[id] == Hunter) {
formatex( header, sizeof header - 1, "Class information: Hunter")
len += formatex(motd[len], sizeof motd - 1 - len, "<body bgcolor=#000000 text=#FFB000><font size=5><center>")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive: Equip your knife to load for a flashbang. It will take 5 seconds - 0.02 per intelligence to get a new flashbang.<br><br> ")
len += formatex(motd[len],sizeof motd - 1 - len,"Passive Bow: Deal 80 damage + 4 damage per intelligence with your arrows! However the damage is reduced if the enemy has dextery, every points reduces 2 damage! The arrow delay is 4.25 seconds - 0.05 seconds per intelligence.<br><br> ")
len += formatex(motd[len],sizeof motd - 1 - len,"Ultimate: Get 1 stack + 1 per 25 intelligence to become invisible for 2 seconds. ")
len += formatex(motd[len],sizeof motd - 1 - len,"</font></center>")
show_motd(id, motd, header)
}
}
|