Raised This Month: $ Target: $400
 0% 

Plugin dropping my framerate on every second mapchange


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
MrDev
Member
Join Date: Sep 2005
Old 01-03-2007 , 15:59   Plugin dropping my framerate on every second mapchange
Reply With Quote #1

Hi.

The plugin posted below makes my server lags every second time i change map. I've tested the plugin on/off and my server works fine without. It's like i start. All is fine. Then i changelevel de_dust2 and it start to lag like hell. I changemap again and it runs smooth and so on

I know the plugin is fairly large. But only the init function should be run. Even then, it lags. I was wondering if someone could test it on their server or come with advice etc. The sma and amxx file are posted at the bottom

Code:
#include <amxmodx> #include <fakemeta> #include <engine> #define NORM_SPEED 250.0 #define REACH 250 #define MAX 32 #define x 0 #define y 1 #define z 2 new const bool:dbg = true enum {     Flag_Stun = 0,     Flag_Freeze,     Flag_Fear,     Flag_Poision,     Flag_PoisionDagger,     Flag_Invisible,     Flag_Drainlife,     Flag_SpellImmunity,     Flag_Enrage,     Flag_Focus,     Flag_Dazed,     Flag_Renew,     Flag_Max } new afflicted[MAX][Flag_Max] new class_armor[MAX] new sprite_white = 0 new sprite_fear = 0 new sprite_laser = 0 new sprite_mark = 0 new sprite_stun = 0 new sprite_dazed = 0 //Helpers from Fun Module/Math public set_user_armor(id,amount) { set_pev(id,pev_armorvalue,amount); } public set_user_gravity(id,Float:amount) { set_pev(id,pev_gravity,amount); } public set_user_maxspeed(id,Float:amount) { set_pev(id,pev_maxspeed,amount); } public set_user_health(id,amount) { set_pev(id,pev_health,amount); } public Float:Distance2D( Float:X, Float:Y ) {return floatsqroot( (X*X) + (Y*Y) ); } public Float:Vec2DLength( Float:Vec[2] )  { return floatsqroot(Vec[x]*Vec[x] + Vec[y]*Vec[y] ); } public plugin_init() {     register_plugin("Arena", "1.2", "MrDev")         for (new i=0; i < MAX; i++)     {         for (new j=0; j < Flag_Max; j++)             afflicted[i][j] = 0                 class_armor[i] = 0     }         /*     //Events        register_logevent("Event_RoundStart", 2, "0=World triggered", "1=Round_Start")     register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")     register_clcmd("say", "Event_Say", 0)     register_logevent("Event_RoundEnd", 2, "1=Round_End")     register_event("Damage","Event_Damage","be")     register_event("TextMsg", "Event_RoundEnd", "a", "2=#Game_will_restart_in")         //Forwards         register_forward(FM_Touch,"FW_Touch");     register_forward(FM_UpdateClientData, "FW_UpdateClientData_Post", 1)     register_forward(FM_AddToFullPack, "FW_AddToFullPack")     register_forward(FM_CmdStart,"FW_CmdStart")             //Think     register_think("Effect_Stun","Effect_Stun_Think")     register_think("Effect_Ice_Block","Effect_Ice_Block_Think")     register_think("Freeze_Effect","Freeze_Effect_Think")     register_think("Effect_Fire_Totem","Effect_Fire_Totem_Think")     register_think("Effect_Fear","Effect_Fear_Think")     register_think("Effect_Spirit_Ward","Effect_Spirit_Ward_Think")     register_think("Effect_Poision","Effect_Poision_Think")     register_think("Effect_Invisible","Effect_Invisible_Think")     register_think("Effect_Drainlife","Effect_Drainlife_Think")     register_think("Effect_Spell_Immunity","Effect_Spell_Immunity_Think")     register_think("Effect_Armor_Add","Effect_Armor_Add_Think")     register_think("Effect_Mark","Effect_Mark_Think")     register_think("Effect_Daze","Effect_Daze_Think")     register_think("Effect_Renew","Effect_Renew_Think")             //Buy block     register_menucmd(register_menuid("#Buy", 1 ),511,"Block")     register_menucmd(register_menuid("BuyPistol", 1 ),511,"Block")     register_menucmd(register_menuid("BuyShotgun", 1 ),511,"Block")     register_menucmd(register_menuid("BuySub", 1 ),511,"Block")     register_menucmd(register_menuid("BuyRifle", 1),511,"Block")     register_menucmd(register_menuid("BuyMachine", 1),511,"Block")     register_menucmd(register_menuid("BuyItem", 1),511,"Block")     register_menucmd(-28,511,"Block")     register_menucmd(-29,511,"Block")     register_menucmd(-30,511,"Block")     register_menucmd(-32,511,"Block")     register_menucmd(-31,511,"Block")     register_menucmd(-33,511,"Block")     register_menucmd(-34,511,"Block")     */         log("Plugin_Init called")         } public log(const fmt[], {Float,Sql,Result,_}:...) {       if (dbg)     {         new buffer[512]         vformat(buffer, 511, fmt, 2)         log_amx(buffer)     } } public Remove_Ent(ent) {     if(pev_valid(ent))         engfunc(EngFunc_RemoveEntity, ent) } public 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 } /* public plugin_precache() {     log("precache called")             precache_model("models/totem_fire.mdl")     precache_model("models/hunter_trap.mdl")     precache_model("models/ice_block.mdl")     precache_model("models/rpgrocket.mdl")     precache_model("models/spirit_ward.mdl")         sprite_white = precache_model("sprites/white.spr")     sprite_fear = precache_model("sprites/fear.spr")     sprite_laser = precache_model("sprites/laserbeam.spr")     sprite_mark = precache_model("sprites/mark.spr")     sprite_stun = precache_model("sprites/stun.spr")     sprite_dazed = precache_model("sprites/dazed.spr")         } */ /* public client_connect(id) {     log("client_connect called")     class_armor[id] = 25 } public client_disconnect(id) {     log("client disconnect")     class_armor[id] = 0     ResetFlags(id) } */ //Touch event. Do not pickup weapons public FW_Touch(ptr, ptd) {           if (ptd > 0 && ptd <= MAX && is_user_connected(ptd) && ptr > MAX)     {         new model[32]         //entity_get_string(ptr, EV_SZ_model, model, 31)         pev(ptr,pev_model,model,31)                         if ((equal(model, "models/w_", 9)))             return FMRES_SUPERCEDE;                     else if ((containi(model, "shield") > -1))             return FMRES_SUPERCEDE;                     new classname[32]         pev(ptr, pev_classname, classname, 31)                         //Hunter trap - Freeze target         if (equal(classname,"Effect_Hunter_Trap"))         {             new owner = pev(ptr,pev_owner)                         //If enemy, freeze the scumbag             if (get_user_team(owner) != get_user_team(ptd))             {                                 Remove_Ent(ptr)                 Spawn_Ice_Block(ptd,5)             }                     }                 }                 return FMRES_IGNORED } //ClientData event public FW_UpdateClientData_Post(id, sendweapons, cd_handle) {     if (!is_user_alive(id))         return FMRES_HANDLED;             if (HasFlag(id,Flag_Stun))     {         set_cd(cd_handle, CD_ID, 0);       }     return FMRES_HANDLED } public FW_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 hunters trap, hide to enemies     if (equal(classname,"Effect_Hunter_Trap") && !player && equal(hostclassname,"player"))     {         new owner = pev(e,pev_owner)                             //Hide for enemies         if (get_user_team(owner) != get_user_team(edict_t_host))             return FMRES_SUPERCEDE                  }         return FMRES_HANDLED         } //Test for now public FW_CmdStart(id, uc_handle, seed) {     if( !is_user_alive(id) )         return PLUGIN_CONTINUE;                         if (HasFlag(id,Flag_Stun) || HasFlag(id,Flag_Fear) || HasFlag(id,Flag_Freeze))     {         set_pev( id, pev_button, pev(id,pev_button) & ~IN_ATTACK );         set_pev( id, pev_button, pev(id,pev_button) & ~IN_ATTACK2 );         new buttons = get_uc(uc_handle,UC_Buttons)         buttons &= ~IN_ATTACK         buttons &= ~IN_ATTACK2         set_uc(uc_handle,UC_Buttons,buttons)     }               return FMRES_HANDLED } public Block() {     return PLUGIN_HANDLED } public Event_RoundStart() {     log("Event_RoundStart called")         for (new i=0; i < MAX; i++)     {         //if (is_user_alive(i))         //  set_user_armor(i,class_armor[i])     } } public Event_RoundEnd() {     log("Event RoundEnd called")     Remove_All_Effects()         for (new i=0; i < MAX; i++)         if (is_user_connected(i))             ResetFlags(i) } public Event_CurWeapon(id) {     log("Event_Curweapon called")     if (!is_user_alive(id))         return PLUGIN_CONTINUE             new ammo     new clip             if (get_user_weapon(id,ammo,clip) != CSW_KNIFE)         client_cmd(id,"drop")     return PLUGIN_CONTINUE             } public Event_Say(id) {     log("Event_Say called")         new message[129]     read_argv(1,message,128)         if ((strlen(message) < 1) || equal(message,"") || equal(message,"["))         return PLUGIN_CONTINUE         if (containi(message, "stun") > -1)     {         Stun_Player(id,5)     }         if (contain(message, "ft") > -1)     {         MakeFireTotem(id,10)     }         if (contain(message, "hunt") > -1)     {         MakeHunterTrap(id)     }         if (contain(message, "iceblock") > -1)     {         Spawn_Ice_Block(id,5)     }             if (contain(message, "fear") > -1)     {         Fear_Player(id,5)     }     if (contain(message, "spirit") > -1)     {         MakeSpiritWard(id,10)     }     if (contain(message, "dagger") > -1)     {         MakePoisionDagger(id)     }     if (contain(message, "drainlife") > -1)     {         new target = Find_Best_Angle(id,1000.0)                 if (pev_valid(target))             Player_Drainlife(id,target,10)     }     if (contain(message, "invis") > -1)     {         Invisible_Player(id,5,10)     }         if (contain(message, "armor") > -1)     {         Player_Armoradd(id,15,25)     }         if (contain(message, "enrage") > -1)     {         new target = Find_Best_Angle(id,9999.9,true)                 if (pev_valid(target))             Player_Enrage(id,target,7)     }     if (contain(message, "sunder") > -1)     {         new target = Find_Best_Angle(id,REACH+0.0,true)                 if (pev_valid(target))             Player_Sunder(id,target,10)     }     if (contain(message, "slam") > -1)     {         Player_Ground_Slam(id,5)     }     if (contain(message, "daze") > -1)     {         Player_Daze(id,5)     }     if (contain(message, "renew") > -1)     {         Player_Renew(id,5)     }         return PLUGIN_CONTINUE } public Event_Damage(id) {     log("Event_Damage called")     new victim = read_data(0);     new attacker = get_user_attacker(victim)             if (!pev_valid(attacker) || !pev_valid(victim) || attacker > MAX)         return PLUGIN_CONTINUE             set_user_armor(id,class_armor[id])                     //No self-afflicated damage, atleast for now     if (victim == attacker)         return PLUGIN_CONTINUE                 //We attacked with poision dagger     if (HasFlag(attacker,Flag_PoisionDagger))     {         RemoveFlag(attacker,Flag_PoisionDagger)         Player_Poision(victim,10,3)             }         //We got hit with poision dagger     if (HasFlag(victim,Flag_PoisionDagger))     {         RemoveFlag(victim,Flag_PoisionDagger)         Player_Poision(victim,10,3)     }     //We have enrage and attacks someone, see if he has the mark     if (HasFlag(attacker,Flag_Enrage))     {         new ent = find_ent_by_owner(-1,"Effect_Mark",victim)                         if (pev_valid(ent))         {             new marker = pev(ent,pev_euser2)                         if (marker == attacker)             {                 set_pev(ent,pev_ltime,0)                                                Stun_Player(victim,3)             }         }                             }         return PLUGIN_CONTINUE } //Remove all effects by setting ltime to 0 so they will be removed at next think public Remove_All_Effects() {     log("Remove_All_Effects called")         new maxEntities = global_get(glb_maxEntities);     for (new i = 0; i < maxEntities; i++)     {         if (!pev_valid(i))             continue;                     new classname[32];         pev(i, pev_classname, classname, 31);                     if (containi(classname, "Effect_") > -1)         {             log_amx("FOUND")             new ltime = pev(i,pev_ltime)                         if (ltime == 0)                 Remove_Ent(i)             else             {                 set_pev(i,pev_ltime,0)                 //set_pev(i,pev_nextthink, halflife_time() + 0.1)             }         }                 }     } //Create an entity, set owner to player and make sure that aslong as entity exist, player is stunned public Stun_Player(id, seconds) {             new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Stun")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)         if (pev(id,pev_flags) & FL_ONGROUND)         set_user_gravity(id,9999.9)             AddFlag(id,Flag_Stun)     log("Creating stun entity for player %i", id) } public Effect_Stun_Think(ent) {     new id = pev(ent,pev_owner)         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         Remove_Ent(ent)                         //Only unstun IF there are no stun entities left         if (!find_ent_by_owner(-1,"Effect_Stun",id))         {             set_user_maxspeed(id,NORM_SPEED)             set_user_gravity(id,1.0)             Display_Icon(id,100,100,100,"dmg_rad",0)             Remove_All_Tents(id)             RemoveFlag(id,Flag_Stun)         }                             return PLUGIN_CONTINUE     }         //Apply Effect     Display_Icon(id,100,100,100,"dmg_rad",1)            set_pev(ent,pev_nextthink, halflife_time() + 0.2)         set_user_maxspeed(id,0.1)     Display_Tent(id,sprite_stun,1)         return PLUGIN_CONTINUE } public Freeze_Player(id,seconds) {     new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Freeze_Effect")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)         if (!HasFlag(id,Flag_Stun) && !HasFlag(id,Flag_Freeze))         set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)             AddFlag(id,Flag_Freeze)         Display_Fade(id,2500*seconds,2500*seconds,0,0,25,255,130)         log("Creating freeze entity for player %i", id) } public Freeze_Effect_Think(ent) {     new id = pev(ent,pev_owner)         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)         Display_Icon(id,0,0,255,"dmg_cold",0)                       RemoveFlag(id,Flag_Freeze)                          return PLUGIN_CONTINUE     }         //Apply Effect     Display_Icon(id,0,0,255,"dmg_cold",1)           set_pev(ent,pev_nextthink, halflife_time() + 0.3)         return PLUGIN_CONTINUE } public Fear_Player(id,seconds) {     new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Fear")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)                 AddFlag(id,Flag_Fear)     Display_Tent(id,sprite_fear, seconds)             log("Creating fear entity for player %i", id) } public Effect_Fear_Think(ent) {     new id = pev(ent,pev_owner)         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {               if (is_user_alive(id))         {             Display_Icon(id,255,0,0,"dmg_gas",0)             client_cmd(id,"-back")         }                         RemoveFlag(id,Flag_Fear)                             return PLUGIN_CONTINUE     }         //Apply Effect     Display_Icon(id,255,0,0,"dmg_gas",1)                //Force forward     client_cmd(id,"-forward")     client_cmd(id,"+back")             set_pev(ent,pev_nextthink, halflife_time() + 0.1)         return PLUGIN_CONTINUE } public Invisible_Player(id,seconds, amount) {     new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Invisible")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)                 AddFlag(id,Flag_Invisible)     Display_Fade(id,seconds*2500,seconds*2500,0,255,255,255,60)     set_rendering ( ent, kRenderFxNone, 0,0,0, kRenderTransAlpha, amount )             log("Creating invisible entity for player %i", id) } public Effect_Invisible_Think(ent) {     new id = pev(ent,pev_owner)         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {               if (is_user_alive(id))             set_rendering ( ent, kRenderFxNone, 0,0,0, kRenderFxNone, 0 )                     Display_Icon(id,0,255,100,"train_forward1",0)         RemoveFlag(id,Flag_Invisible)                           return PLUGIN_CONTINUE     }                 Display_Icon(id,0,255,100,"train_forward1",1)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)       return PLUGIN_CONTINUE } public Display_Icon(id,red,green,blue,name[], enable) {     if (!pev_valid(id))     {         log("Display_Icon called on bad player")         return PLUGIN_HANDLED     }         message_begin( MSG_ONE, get_user_msgid("StatusIcon"), {0,0,0}, id )     write_byte( enable )         write_string( name )     write_byte( red ) // red     write_byte( green ) // green     write_byte( blue ) // blue     message_end()         return PLUGIN_CONTINUE } public Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha) {     message_begin( MSG_ONE,get_user_msgid("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 MakeFireTotem(id, seconds) {     new origin[3]     pev(id,pev_origin,origin)             new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Fire_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() + seconds + 0.1)         engfunc(EngFunc_SetModel, ent, "models/totem_fire.mdl")           set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 )         engfunc(EngFunc_DropToFloor,ent)         set_pev(ent,pev_nextthink, halflife_time() + 0.1)     } public MakeSpiritWard(id, seconds) {     new origin[3]     pev(id,pev_origin,origin)             new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Spirit_Ward")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_origin,origin)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)         engfunc(EngFunc_SetModel, ent, "models/spirit_ward.mdl")           set_rendering ( ent, kRenderFxGlowShell, 255,255,255, kRenderFxNone, 100 )         engfunc(EngFunc_DropToFloor,ent)         set_pev(ent,pev_nextthink, halflife_time() + 0.1) } public Effect_Spirit_Ward_Think(ent) {     new id = pev(ent,pev_owner)     new totem_dist = 300     new damage_amount = 5         //We have emitted beam. Apply effect (this is delayed)     if (pev(ent,pev_euser2) == 1)     {               new Float:forigin[3], origin[3]         pev(ent,pev_origin,forigin)         FVecIVec(forigin,origin)                 //Find people near and damage them         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) && get_user_health(pid) - damage_amount > 0)                 fakedamage(pid,"player",damage_amount+0.0,DMG_ENERGYBEAM)                         }                 set_pev(ent,pev_euser2,0)         set_pev(ent,pev_nextthink, halflife_time() + 1.5)                 return PLUGIN_CONTINUE     }         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         remove_entity(ent)         return PLUGIN_CONTINUE     }         //If this object is almost dead, apply some render to make it fade out     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)                         //Find people near and give them health     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( 255 ); // r, g, b     write_byte( 255 ); // r, g, b     write_byte( 128 ); // brightness     write_byte( 5 ); // speed     message_end();         //Time till we apply totems effect     set_pev(ent,pev_euser2,1)     set_pev(ent,pev_nextthink, halflife_time() + 0.5)             return PLUGIN_CONTINUE } public Effect_Fire_Totem_Think(ent) {     new id = pev(ent,pev_owner)     new totem_dist = 300     new amount_healed = 5         //We have emitted beam. Apply effect (this is delayed)     if (pev(ent,pev_euser2) == 1)     {               new Float:forigin[3], origin[3]         pev(ent,pev_origin,forigin)         FVecIVec(forigin,origin)                 //Find people near and damage them         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) && get_user_health(pid) + amount_healed < 100)                 set_user_health(pid,get_user_health(pid)+amount_healed)             else                 set_user_health(pid,100)                         }                 set_pev(ent,pev_euser2,0)         set_pev(ent,pev_nextthink, halflife_time() + 1.5)                 return PLUGIN_CONTINUE     }         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         remove_entity(ent)         return PLUGIN_CONTINUE     }         //If this object is almost dead, apply some render to make it fade out     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)                         //Find people near and give them health     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();         //Time till we apply totems effect     set_pev(ent,pev_euser2,1)     set_pev(ent,pev_nextthink, halflife_time() + 0.5)             return PLUGIN_CONTINUE } public MakePoisionDagger(id) {     Display_Fade(id,1000,1000,0,0,255,0,150)     AddFlag(id,Flag_PoisionDagger) } public MakeHunterTrap(id) {     new origin[3]     pev(id,pev_origin,origin)             new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Hunter_Trap")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, 0)     set_pev(ent,pev_origin,origin)     set_pev(ent,pev_solid,SOLID_TRIGGER)         engfunc(EngFunc_SetModel, ent, "models/hunter_trap.mdl")       engfunc(EngFunc_SetSize,ent,Float:{-1.0,-1.0,-1.0},Float:{1.0,1.0,1.0})         drop_to_floor(ent) } //Spawn iceblock ONTO id for n seconds public Spawn_Ice_Block(id, seconds) {     new origin[3]     pev(id,pev_origin,origin)             new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Ice_Block")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_origin,origin)     set_pev(ent,pev_solid,SOLID_NOT)         engfunc(EngFunc_SetModel, ent, "models/ice_block.mdl")       engfunc(EngFunc_SetSize,ent,Float:{-1.0,-1.0,-1.0},Float:{1.0,1.0,1.0})     set_rendering ( ent, kRenderFxGlowShell, 0,0,0, kRenderTransAlpha, 110 )         drop_to_floor(ent)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)             Freeze_Player(id, seconds)     } public Effect_Ice_Block_Think(ent) {     new id = pev(ent,pev_owner)         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))         remove_entity(ent)     else                set_pev(ent,pev_nextthink, halflife_time() + 0.3) } //Poision Effect. Dot with damage each round damagetime = 1.5 public Player_Poision(id, seconds, tick) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Poision")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)       set_pev(ent,pev_euser2, tick)     set_rendering ( id, kRenderFxGlowShell, 0,200,0, kRenderFxNone, 100 )             } public Effect_Poision_Think(ent) {     new id = pev(ent,pev_owner)     new tick = pev(ent,pev_euser2)         //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         if (is_user_alive(id))         {             set_rendering ( id, kRenderFxNone, 0,0,0, kRenderFxNone, 0 )             set_user_maxspeed(id,NORM_SPEED)         }                     Display_Icon(id,0,255,0,"dmg_poison",0)         remove_entity(ent)         return PLUGIN_CONTINUE     }     else                set_pev(ent,pev_nextthink, halflife_time() + 1.5)             //Apply poision     if (get_user_health(id) - tick > 0)         fakedamage(id,"player",tick+0.0,DMG_ENERGYBEAM)             Display_Icon(id,0,255,0,"dmg_poison",1)     set_user_maxspeed(id,NORM_SPEED-60)             return PLUGIN_CONTINUE } //Drainlife effect public Player_Drainlife(id, target, seconds) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Drainlife")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)       set_pev(ent,pev_euser2, target)                 AddFlag(id,Flag_Drainlife)     AddFlag(target,Flag_Drainlife) } //Spell Immunity public Player_Spell_Immunity(id, seconds) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Spell_Immunity")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)                   AddFlag(id,Flag_SpellImmunity) } public Effect_Spell_Immunity_Think(ent) {     new id = pev(ent,pev_owner)     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         remove_entity(ent)         return PLUGIN_CONTINUE     }         set_pev(ent,pev_nextthink, halflife_time() + 0.5)     return PLUGIN_CONTINUE } //Spell Immunity public Player_Daze(id,seconds) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Daze")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)                   AddFlag(id,Flag_Dazed) } public Effect_Daze_Think(ent) {     new id = pev(ent,pev_owner)     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         Remove_All_Tents(id)         Display_Icon(id,255,255,0,"dmg_heat",0)         RemoveFlag(id,Flag_Dazed)         set_user_maxspeed(id,NORM_SPEED)         remove_entity(ent)         return PLUGIN_CONTINUE     }         set_pev(ent,pev_nextthink, halflife_time() + 1.0)     set_user_maxspeed(id,NORM_SPEED-150)     Display_Icon(id,255,255,0,"dmg_heat",1)     Display_Tent(id,sprite_dazed,1)     return PLUGIN_CONTINUE } public Effect_Drainlife_Think(ent) {     new id = pev(ent,pev_owner)     new victim = pev(ent,pev_euser2)                     //Entity should be destroyed because livetime is over     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id) || !is_user_alive(victim) || !Can_Trace_Line(id,victim) || !In_FOV(id,victim))     {         if (is_user_alive(victim))         {             set_rendering (victim, kRenderFxNone, 0,0,0, kRenderFxNone, 0 )             set_user_maxspeed(victim,NORM_SPEED)         }         if (is_user_alive(id))         {             set_user_maxspeed(id,NORM_SPEED)         }                 remove_entity(ent)         return PLUGIN_CONTINUE     }     else                set_pev(ent,pev_nextthink, halflife_time() + 0.3)             //Apply drainlife     if (get_user_health(victim) - 1.0 > 0)     {         fakedamage(victim,"player",1.0,DMG_ENERGYBEAM)         if (get_user_health(id) < 100)             set_user_health(id,get_user_health(id)+1)     }                     new origin1[3]     new origin2[3]         get_user_origin(id,origin1)     get_user_origin(victim,origin2)         message_begin(MSG_BROADCAST,SVC_TEMPENTITY)     write_byte (TE_BEAMPOINTS)     write_coord(origin1[0])     write_coord(origin1[1])     write_coord(origin1[2]+8)     write_coord(origin2[0])     write_coord(origin2[1])     write_coord(origin2[2]+8)     write_short(sprite_laser);     write_byte(1) // framestart     write_byte(1) // framerate     write_byte(3) // life     write_byte(5) // width     write_byte(10) // noise     write_byte(0) // r, g, b (red)     write_byte(255) // r, g, b (green)     write_byte(0) // r, g, b (blue)     write_byte(45) // brightness     write_byte(5) // speed     message_end()             set_rendering ( victim, kRenderFxGlowShell, 0,200,0, kRenderFxNone, 0 )     set_user_maxspeed(victim,NORM_SPEED-100)     set_user_maxspeed(id,NORM_SPEED-180)         return PLUGIN_CONTINUE } //Bonus Armor, eu2 = amount, eu3 = applied public Player_Armoradd(id, seconds,amount) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Armor_Add")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)     set_pev(ent,pev_euser2,amount)         if (class_armor[id]+amount >= 0)     {         set_pev(ent,pev_euser3,1)         class_armor[id]+=amount     }             set_user_armor(id,class_armor[id]) } public Effect_Armor_Add_Think(ent) {     new id = pev(ent,pev_owner)     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         new amount = pev(ent,pev_euser2)                 if (pev(ent,pev_euser3) == 1)             class_armor[id]-=amount                     set_user_armor(id,class_armor[id])         remove_entity(ent)         return PLUGIN_CONTINUE     }         set_pev(ent,pev_nextthink, halflife_time() + 0.5)     return PLUGIN_CONTINUE } //Sunder - removes armor public Player_Sunder(id, target, seconds) {       new id_origin[3]     new target_origin[3]         get_user_origin(id,id_origin)     get_user_origin(target,target_origin)         if (get_distance(id_origin,target_origin) > REACH)         return PLUGIN_CONTINUE                 Player_Armoradd(target,seconds, -50)         for (new i=0; i < 5; i+=2)     {         target_origin[z]+=i         Display_Spark(target_origin)     }         return PLUGIN_CONTINUE } public Player_Ground_Slam(id,seconds) {     message_begin(MSG_ONE , get_user_msgid("ScreenShake") , {0,0,0} ,id)     write_short( 1<<14 );     write_short( 1<<12 );     write_short( 1<<14 );     message_end();             new radius = 500         new entlist[513]     new numfound = find_sphere_class(id,"player",radius+0.0,entlist,512)                 for (new i=0; i < numfound; i++)     {               new pid = entlist[i]                     if (pid == id || !is_user_alive(pid))             continue                     new Float:id_origin[3]         new Float:pid_origin[3]         new Float:delta_vec[3]                 pev(id,pev_origin,id_origin)         pev(pid,pev_origin,pid_origin)                 delta_vec[x] = (pid_origin[x]-id_origin[x])+10         delta_vec[y] = (pid_origin[y]-id_origin[y])+10         delta_vec[z] = (pid_origin[z]-id_origin[z])+200                 set_pev(pid,pev_velocity,delta_vec)                                 message_begin(MSG_ONE , get_user_msgid("ScreenShake") , {0,0,0} ,pid)         write_short( 1<<14 );         write_short( 1<<12 );         write_short( 1<<14 );         message_end();                 Player_Daze(pid,3)                     }             } //Sunder Armor - Will remove all of players armor temporarily public Player_Enrage(id, target, seconds) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Enrage")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)           //Add marked effect to player     Player_Marked(id,target,seconds)     Player_Armoradd(id,seconds,25)     Player_Armoradd(id,seconds,25)     AddFlag(id,Flag_Enrage)         Display_Fade(id,seconds*2600,seconds*2600,0,255,0,0,45)     } public Effect_Enrage_Think(ent) {     new id = pev(ent,pev_owner)     new target = pev(ent,pev_euser2)         if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id) || !is_user_alive(target))     {         set_user_maxspeed(id,NORM_SPEED)         RemoveFlag(id,Flag_Enrage)         remove_entity(ent)          return PLUGIN_CONTINUE     }             set_user_maxspeed(id,NORM_SPEED+135)     set_pev(ent,pev_nextthink, halflife_time() + 0.5)     return PLUGIN_CONTINUE } //Renew - Regains healing over time public Player_Renew(id, seconds) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Renew")     set_pev(ent,pev_owner,id)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)           AddFlag(id,Flag_Renew)         Display_Fade(id,2600,2600,0,0,255,50,30)     } public Effect_Renew_Think(ent) {     new id = pev(ent,pev_owner)         if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         RemoveFlag(id,Flag_Renew)         remove_entity(ent)          return PLUGIN_CONTINUE     }                 if (get_user_health(id) + 1 <= 100)     {         set_user_health(id,get_user_health(id)+1)     }         set_pev(ent,pev_nextthink, halflife_time() + 0.5)     return PLUGIN_CONTINUE } //Marked. Owner = Marked public Player_Marked(marker, marked, seconds) {           new ent = Spawn_Ent("info_target")     set_pev(ent,pev_classname,"Effect_Mark")     set_pev(ent,pev_owner,marked)     set_pev(ent,pev_ltime, halflife_time() + seconds + 0.1)     set_pev(ent,pev_solid,SOLID_NOT)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)       set_pev(ent,pev_euser2,marker)         Display_Tent(marked,sprite_mark,seconds) } public Effect_Mark_Think(ent) {     new id = pev(ent,pev_owner)     if (pev(ent,pev_ltime) < halflife_time() || !is_user_alive(id))     {         set_user_maxspeed(id,NORM_SPEED)         Remove_All_Tents(id)         remove_entity(ent)         return PLUGIN_CONTINUE     }         set_user_maxspeed(id,NORM_SPEED-20)     set_pev(ent,pev_nextthink, halflife_time() + 0.1)     return PLUGIN_CONTINUE } public AddFlag(id,flag) {     afflicted[id][flag] = 1 } public RemoveFlag(id,flag) {     afflicted[id][flag] = 0 } public bool:HasFlag(id,flag) {     if (afflicted[id][flag])         return true         return false } public ResetFlags(id) {     for (new i=0; i < Flag_Max; i++)         afflicted[id][i] = 0 } public Display_Spark(Origin[]) {     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);     write_byte(TE_SPARKS);     write_coord(Origin[x]);     write_coord(Origin[y]);     write_coord(Origin[z]);     message_end(); } public Display_Tent(id,sprite, seconds) {     message_begin(MSG_ALL,SVC_TEMPENTITY)     write_byte(TE_PLAYERATTACHMENT)     write_byte(id)     write_coord(35) //Offset     write_short(sprite)     write_short(seconds*10)     message_end() } public Remove_All_Tents(id) {     message_begin(MSG_ALL ,SVC_TEMPENTITY) //message begin     write_byte(TE_KILLPLAYERATTACHMENTS)     write_byte(id) // entity index of player     message_end() }     public Set_Aiming( CoreID, TargetID ) {     new Float:CoreAngles[3] = { 0.0, 0.0, 0.0 };         new Float:CoreOrigin[3];     pev(CoreID, pev_origin, CoreOrigin );         new Float:TargetOrigin[3];     pev(TargetID, pev_origin, TargetOrigin );         new anglemode:Mode = degrees;         new Float:DeltaOrigin[3];     for ( new i = 0; i < 3; i++ )         DeltaOrigin[i] = CoreOrigin[i] - TargetOrigin[i];             CoreAngles[x] = floatatan( DeltaOrigin[z] / Distance2D( DeltaOrigin[x], DeltaOrigin[y] ), Mode ) ;     CoreAngles[y] = floatatan( DeltaOrigin[y] / DeltaOrigin[x], Mode );         ( DeltaOrigin[x] >= 0.0 ) ? ( CoreAngles[y] += 180.0 ): ( CoreAngles[y] += 0.0 )         set_pev(CoreID, pev_angles, CoreAngles,3 );     set_pev(CoreID, pev_fixangle, 1 ); } stock Find_Best_Angle(id,Float:dist, same_team = false) {     new Float:bestangle = 0.0     new winner = -1         for (new i=0; i < MAX; i++)     {         if (!is_user_alive(i) || i == id || (get_user_team(i) == get_user_team(id) && !same_team))             continue                 new Float:c_angle = Find_Angle(id,i,dist)                         if (c_angle > bestangle && Can_Trace_Line(id,i))         {             winner = i             bestangle = c_angle         }             }         return winner } public Float:Find_Angle(Core,Target,Float:dist) {     new Float:vec2LOS[2]     new Float:flDot     new Float:CoreOrigin[3]     new Float:TargetOrigin[3]     new Float:CoreAngles[3]         pev(Core,pev_origin,CoreOrigin)     pev(Target,pev_origin,TargetOrigin)         if (get_distance_f(CoreOrigin,TargetOrigin) > dist)         return 0.0         pev(Core,pev_angles, CoreAngles)         for ( new i = 0; i < 2; i++ )         vec2LOS[i] = TargetOrigin[i] - CoreOrigin[i]             new Float:veclength = Vec2DLength(vec2LOS)         //Normalize V2LOS     if (veclength <= 0.0)     {         vec2LOS[x] = 0.0         vec2LOS[y] = 0.0     }     else     {         new Float:flLen = 1.0 / veclength;         vec2LOS[x] = vec2LOS[x]*flLen         vec2LOS[y] = vec2LOS[y]*flLen     }         //Do a makevector to make v_forward right     engfunc(EngFunc_MakeVectors,CoreAngles)         new Float:v_forward[3]     new Float:v_forward2D[2]     get_global_vector(GL_v_forward, v_forward)         v_forward2D[x] = v_forward[x]     v_forward2D[y] = v_forward[y]     flDot = vec2LOS[x]*v_forward2D[x]+vec2LOS[y]*v_forward2D[y]         if ( flDot > 0.5 )     {         return flDot     }     return 0.0     } public In_FOV(id,target) {     if (Find_Angle(id,target,9999.9) > 0.0)         return true         return false } //This is an interpolation. We make tree lines with different height as to make sure public 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 }

Sma file
http://www.mortengryning.dk/Files/Arena.sma

Compiled amxx file
http://www.mortengryning.dk/Files/Arena.amxx

Thanks
MrDev is offline
MrDev
Member
Join Date: Sep 2005
Old 01-04-2007 , 16:19   Re: Plugin dropping my framerate on every second mapchange
Reply With Quote #2

Seems it has nothing to do with this plugin anyway. I've resintalled steam serverel times and it still does lag on every second mapchange (even without amxmod)

Anyway - Nevermind this post
MrDev is offline
hip_hop_x
Senior Member
Join Date: Apr 2006
Old 01-05-2007 , 19:01   Re: Plugin dropping my framerate on every second mapchange
Reply With Quote #3

if your gameserver is on windows you could press ctrl+alt+del than right click on hlds.exe and set priority realtime, this could solve the problem. If doesn't go and buy some ram.
hip_hop_x is offline
Send a message via MSN to hip_hop_x Send a message via Yahoo to hip_hop_x
MaximusBrood
Veteran Member
Join Date: Sep 2005
Location: The Netherlands
Old 01-06-2007 , 08:53   Re: Plugin dropping my framerate on every second mapchange
Reply With Quote #4

Quote:
Originally Posted by hip_hop_x View Post
if your gameserver is on windows you could press ctrl+alt+del than right click on hlds.exe and set priority realtime, this could solve the problem. If doesn't go and buy some ram.
This is nonsense. You look like the new k007, always claiming something without checking the facts.
__________________
Released six formerly private plugins. Not active here since ages.
MaximusBrood is offline
hip_hop_x
Senior Member
Join Date: Apr 2006
Old 01-07-2007 , 04:36   Re: Plugin dropping my framerate on every second mapchange
Reply With Quote #5

sorry but my friend also has this problm, he fixed after he got more rams, I haven't check this plugin.
hip_hop_x is offline
Send a message via MSN to hip_hop_x Send a message via Yahoo to hip_hop_x
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 22:22.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode