аптечки ишу |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
|
аптечки ишу |
grey
|
18.10.2011, 14:46
Сообщение
|
|
|
После убийства выпадает аптечка, вот ищу такое.
![]() ---
|
|
|
|
wtp
|
18.10.2011, 18:12
Сообщение
|
|
|
|
Поблагодарили 1 раз
|
|
grey
|
18.10.2011, 19:43
Сообщение
|
|
|
Не советую плагин, очень глючьный, валит сервер! спасибо,нашел,поставил - офигел от пинга и нагрузки на ЦП. Сделал КД на аптечки, цп еще больше стало нагружать... исходник тык Тот же плагин, только с КД тык Код #include <amxmodx> #include <fakemeta> #include <engine> #include <fakemeta_util> /* --| Plugin information */ #define PLUGIN "Healthkit on dead body" #define AUTHOR "tuty" #define VERSION "3.2b" /* --| Some plugin defines */ #define MEDKIT_MINSZ Float:{ -23.160000, -13.660000, -0.050000 } #define MEDKIT_MAXSZ Float:{ 11.470000, 12.780000, 6.720000 } #define MODEL_KIT "models/w_medkit.mdl" #define SOUND_KIT "items/smallmedkit1.wav" #define FFADE_IN 0x0000 #define ACCESS_LEVEL ADMIN_CFG /* --| Some globals... */ new gToggleKitEnable; new gToggleGlowShow; new gGMsgFade; new gToggleFadeEnable; new gToggleRemoveAtRstart; new gKitHealthCvar; new gLimitHealthCvar; new gGMsgItemPickup; /* --| Medkit classname */ new const gMedKitClassname[] = "medkit_entity"; /* --| Let's start the plugin */ public plugin_init() { /* --| Registering the plugin to show it on plugins list */ register_plugin( PLUGIN, VERSION, AUTHOR ); /* --| Some usefull events */ register_event( "DeathMsg","drop_kit","a" ); register_logevent( "logevent_round_start", 2, "1=Round_Start" ); /* --| Register the touch forward */ register_forward( FM_Touch,"ForwardTouch" ); register_think( gMedKitClassname, "MedkitRemove"); /* --| Cvar list */ gToggleKitEnable = register_cvar( "kit_enable", "1" ); gToggleGlowShow = register_cvar( "kit_glow", "0" ); gToggleFadeEnable = register_cvar( "kit_fade", "0" ); gToggleRemoveAtRstart = register_cvar( "kit_remove", "0" ); gKitHealthCvar = register_cvar( "kit_health", "20" ); gLimitHealthCvar = register_cvar( "kit_limit_health", "100" ); /* --| Let's catch the user message id's */ gGMsgFade = get_user_msgid( "ScreenFade" ); gGMsgItemPickup = get_user_msgid( "ItemPickup" ); } /* --| Precaching stuff */ public plugin_precache() { precache_model( MODEL_KIT ); precache_sound( SOUND_KIT ); } /* --| When player dies, let's drop the kit if plugin is elabled */ public drop_kit() { /* --| Check if plugin is enabled/disabled */ if( get_pcvar_num( gToggleKitEnable ) == 0 ) { return PLUGIN_HANDLED; } /* --| Get the victim id */ new victim = read_data( 2 ); /* --| Get the victim origin */ static Float:origin[ 3 ]; pev( victim, pev_origin, origin ); /* --| Creating healthkit entity */ new ent = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) ); /* --| Modify the origin a little bit. This is calculated to be set on floor */ origin[ 2 ] -= 36; /* --| Setting the ent origin */ engfunc( EngFunc_SetOrigin, ent, origin ); /* --| Check if isn't a valid ent */ if( !pev_valid( ent ) ) { return PLUGIN_HANDLED; } /* --| Now let's set the entity model and some stuff */ set_pev( ent, pev_classname, gMedKitClassname ); engfunc( EngFunc_SetModel, ent, MODEL_KIT ); dllfunc( DLLFunc_Spawn, ent ); set_pev( ent, pev_solid, SOLID_BBOX ); set_pev( ent, pev_movetype, MOVETYPE_NONE ); engfunc( EngFunc_SetSize, ent, MEDKIT_MINSZ, MEDKIT_MAXSZ ); engfunc( EngFunc_DropToFloor, ent ); set_pev( ent, pev_nextthink, get_gametime() + 20.0); /* --| If cvar is set to 1, let's glow the entity */ if( get_pcvar_num( gToggleGlowShow ) == 1 ) { fm_set_rendering( ent, kRenderFxGlowShell, 255, 255, 255, kRenderFxNone, 27 ); } return PLUGIN_HANDLED; } public MedkitRemove(ent) { set_pev(ent, pev_flags, FL_KILLME); return PLUGIN_CONTINUE; } /* --| Calling the touch forward from fakemeta to see if player touched the entity */ public ForwardTouch( ent, id ) { /* --| Check if is a valid entity and is plugin enabled */ if( !pev_valid( ent ) || get_pcvar_num( gToggleKitEnable ) == 0 ) { return FMRES_IGNORED; } /* --| Find the ent classname */ new classname[ 32 ]; pev( ent, pev_classname, classname, charsmax( classname ) ); /* --| Check if isn't our classname */ if( !equal( classname, gMedKitClassname ) ) { return FMRES_IGNORED; } /* --| Get the user health, and check some cvars */ new health = get_user_health( id ); new cvarhealth = get_pcvar_num( gKitHealthCvar ); new maxhealth = get_pcvar_num( gLimitHealthCvar ); /* --| Check player health */ if( health >= maxhealth ) { return FMRES_IGNORED; } /* --| Show a red hud message to client */ set_hudmessage( 255, 0, 0, -1.0, 0.83, 2, 6.0, 3.0 ); show_hudmessage( id, "+ %d HP", cvarhealth ); /* Set the health and show some minor things, for fun */ fm_set_user_health( id, health + cvarhealth ); emit_sound( id, CHAN_ITEM, SOUND_KIT, VOL_NORM, ATTN_NORM ,0 , PITCH_NORM ); /* --| Show the healthkit item on hud */ message_begin( MSG_ONE_UNRELIABLE, gGMsgItemPickup, _, id ); write_string( "item_healthkit" ); message_end(); /* --| If cvar for fade is enabled, let's create the fade */ if( get_pcvar_num( gToggleFadeEnable ) == 1 ) { message_begin( MSG_ONE_UNRELIABLE, gGMsgFade , _, id ); write_short( 1<<10 ); write_short( 1<<10 ); write_short( FFADE_IN ); write_byte( 255 ); write_byte( 0 ); write_byte( 0 ); write_byte( 75 ); message_end(); } /* --| Now we need to remove the entity from floor */ engfunc( EngFunc_RemoveEntity, ent ); return FMRES_IGNORED; } /* --| Round start, we need to check entity and remove it */ public logevent_round_start() { /* --| If cvar to remove ent on round start is enabled, let's remove the ent */ if( get_pcvar_num( gToggleRemoveAtRstart ) == 1 ) { new hkit = FM_NULLENT; while( ( hkit = fm_find_ent_by_class( hkit, gMedKitClassname ) ) ) { engfunc( EngFunc_RemoveEntity, hkit ); } } } /* --| End of plugin */ выкладываю в надежде... мб кто сможет убрать левую нагрузку... ![]() ---
|
|
|
|
grey
|
20.10.2011, 22:40
Сообщение
|
|
|
Какта так Код #include <amxmodx> #include <fakemeta> #define HK_GLOW 1 // Подсвечивать аптечки? 0/1 #define HK_FADE 1 // Затемнять экран при поднятии? 0/1 #define HK_REMOVE 1 // Убирать аптечки в начале раунда? 0/1 #define HK_HEALTH 15 // Сколько HP восстанавливает аптечка при простом убийстве? #define HK_HS 30 // Сколько восстанавливает аптечка при хедшоте? #define HK_LIMIT 100 // Максимум HP у игроков? #define HK_TIME 0 // Сколько секунд апечка лежит на земле (0 - неограничено) #define HK_OWNER 0 // Может подобрать только убивший? (1 - да, но после мерти или выхода могут все, 2 - да, после смерти или выхода убирать аптечки, 3 - всегда) // Дальше не трогаем #if HK_TIME > 0 #include <engine> #endif #define min_ex(%1,%2) (%1 <= %2 ? %1 : %2) new msg_pickup; #if HK_FADE == 1 new msg_fade; #endif public plugin_init() { register_plugin("Healthkit", "3.3", "Tuty ft. Sho0ter"); #if HK_REMOVE == 1 register_event("HLTV", "ev_start", "a", "1=0", "2=0") #endif register_event("DeathMsg", "ev_death", "a", "1>0") register_forward(FM_Touch, "fm_touch"); #if HK_TIME > 0 register_think("healthkit_entity", "eg_think"); #endif #if HK_FADE == 1 msg_fade = get_user_msgid("ScreenFade"); #endif msg_pickup = get_user_msgid("ItemPickup"); return PLUGIN_CONTINUE; } public plugin_precache() { precache_model("models/w_medkit.mdl"); precache_sound("items/smallmedkit1.wav"); return PLUGIN_CONTINUE; } public ev_death() { #if HK_OWNER > 0 new kid = read_data(1); if(!is_user_connected(kid)) { kid = 0; } #endif new id = read_data(2); new hs = read_data(3); #if HK_OWNER == 1 || HK_OWNER == 2 remove_owner(id) #endif static Float:origin[3], ent; pev(id, pev_origin, origin); origin[2] -= 36; if(!pev_valid((ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))))) { return PLUGIN_CONTINUE; } engfunc(EngFunc_SetOrigin, ent, origin); set_pev(ent, pev_classname, "healthkit_entity"); engfunc(EngFunc_SetModel, ent, "models/w_medkit.mdl"); dllfunc(DLLFunc_Spawn, ent); set_pev(ent, pev_solid, SOLID_BBOX); set_pev(ent, pev_movetype, MOVETYPE_NONE); engfunc(EngFunc_SetSize, ent, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000}); engfunc(EngFunc_DropToFloor, ent); #if HK_GLOW == 1 set_pev(ent, pev_renderfx, kRenderFxGlowShell); set_pev(ent, pev_rendercolor, hs ? (Float:{255.0, 0.0, 0.0}) : (Float:{0.0, 255.0, 0.0})); set_pev(ent, pev_rendermode, kRenderFxNone); set_pev(ent, pev_renderamt, 27.0); #endif set_pev(ent, pev_health, hs ? float(HK_HS) : float(HK_HEALTH)); #if HK_OWNER > 0 set_pev(ent, pev_iuser1, kid); #endif #if HK_TIME > 0 set_pev(ent, pev_nextthink, get_gametime() + float(HK_TIME)); #endif return PLUGIN_CONTINUE; } public fm_touch(ent, id) { if(!pev_valid(ent)) { return FMRES_IGNORED; } static classname[32]; pev(ent, pev_classname, classname, 31); if(!equal(classname, "healthkit_entity")) { return FMRES_IGNORED; } #if HK_OWNER > 0 new kid = pev(ent, pev_iuser1); if(kid && kid != id) { return FMRES_IGNORED; } #endif new chp = pev(id, pev_health); if(chp >= HK_LIMIT) { return FMRES_IGNORED; } new hkv = pev(ent, pev_health); if(hkv == HK_HEALTH) { set_hudmessage(0, 255, 0, -1.0, 0.83, 2, 6.0, 3.0); } else { set_hudmessage(255, 0, 0, -1.0, 0.83, 2, 6.0, 3.0); } show_hudmessage(id, "+ %d HP", hkv); set_pev(id, pev_health, float(min_ex(chp + hkv, HK_LIMIT))); emit_sound(id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM); message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, id); write_string("item_healthkit"); message_end(); #if HK_FADE == 1 message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, id); write_short(1 << 10); write_short(1 << 10); write_short(0x0000); if(chp == HK_HEALTH) { write_byte(255); write_byte(0); } else { write_byte(0); write_byte(255); } write_byte(0); write_byte(75); message_end(); #endif engfunc(EngFunc_RemoveEntity, ent); return FMRES_IGNORED; } #if HK_TIME > 0 public eg_think(ent) { if(!pev_valid(ent)) { return FMRES_IGNORED; } engfunc(EngFunc_RemoveEntity, ent); return FMRES_IGNORED; } #endif #if HK_REMOVE == 1 public ev_start() { new ent; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity"))) { engfunc(EngFunc_RemoveEntity, ent); } return PLUGIN_CONTINUE; } #endif #if HK_OWNER == 1 || HK_OWNER == 2 public client_disconnect(id) { return remove_owner(id); } public remove_owner(id) { new ent; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity"))) { if(pev(ent, pev_iuser1) == id) { #if HK_OWNER == 1 set_pev(ent, pev_iuser1, 0); #else engfunc(EngFunc_RemoveEntity, ent); #endif } } return PLUGIN_CONTINUE; } #endif спасибо ![]() ---
|
|
|
|
Trollface_and_facepalm
|
21.10.2011, 14:14
Сообщение
|
|||
![]() |
healthkit.sma Код #include <amxmodx> #include <fakemeta> #define HK_GLOW 1 // Подсвечивать аптечки? 0/1 #define HK_FADE 1 // Затемнять экран при поднятии? 0/1 #define HK_REMOVE 1 // Убирать аптечки в начале раунда? 0/1 #define HK_HEALTH 15 // Сколько HP восстанавливает аптечка при простом убийстве? #define HK_HS 30 // Сколько восстанавливает аптечка при хедшоте? #define HK_FC 10 // Каков процент вероятности, что выпадет полная хиллка? #define HK_LIMIT 100 // Максимум HP у игроков? #define HK_TIME 0 // Сколько секунд апечка лежит на земле (0 - неограничено) #define HK_OWNER 0 // Может подобрать только убивший? (1 - да, но после мерти или выхода могут все, 2 - да, после смерти или выхода убирать аптечки, 3 - всегда) // Дальше не трогаем #if HK_TIME > 0 #include <engine> #endif #define min_ex(%1,%2) (%1 <= %2 ? %1 : %2) new msg_pickup; #if HK_FADE == 1 new msg_fade; #endif public plugin_init() { register_plugin("Healthkit", "3.3", "Tuty ft. Sho0ter"); #if HK_REMOVE == 1 register_event("HLTV", "ev_start", "a", "1=0", "2=0") #endif register_event("DeathMsg", "ev_death", "a", "1>0") register_forward(FM_Touch, "fm_touch"); #if HK_TIME > 0 register_think("healthkit_entity", "eg_think"); #endif #if HK_FADE == 1 msg_fade = get_user_msgid("ScreenFade"); #endif msg_pickup = get_user_msgid("ItemPickup"); return PLUGIN_CONTINUE; } public plugin_precache() { precache_model("models/w_medkit.mdl"); precache_sound("items/smallmedkit1.wav"); return PLUGIN_CONTINUE; } public ev_death() { #if HK_OWNER > 0 new kid = read_data(1); if(!is_user_connected(kid)) { kid = 0; } #endif new fc = (random_num(1, 100) <= HK_FC) new id = read_data(2); new hs = read_data(3); #if HK_OWNER == 1 || HK_OWNER == 2 remove_owner(id) #endif static Float:origin[3], ent; pev(id, pev_origin, origin); origin[2] -= 36; if(!pev_valid((ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))))) { return PLUGIN_CONTINUE; } engfunc(EngFunc_SetOrigin, ent, origin); set_pev(ent, pev_classname, "healthkit_entity"); engfunc(EngFunc_SetModel, ent, "models/w_medkit.mdl"); dllfunc(DLLFunc_Spawn, ent); set_pev(ent, pev_solid, SOLID_BBOX); set_pev(ent, pev_movetype, MOVETYPE_NONE); engfunc(EngFunc_SetSize, ent, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000}); engfunc(EngFunc_DropToFloor, ent); #if HK_GLOW == 1 set_pev(ent, pev_renderfx, kRenderFxGlowShell); set_pev(ent, pev_rendercolor, fc ? (Float:{255.0, 0.0, 0.0}) : (hs ? (Float:{0.0, 255.0, 0.0}) : (Float:{0.0, 0.0, 255.0}))); set_pev(ent, pev_rendermode, kRenderFxNone); set_pev(ent, pev_renderamt, 27.0); #endif set_pev(ent, pev_health, fc ? float(HK_LIMIT) : (hs ? float(HK_HS) : float(HK_HEALTH))); #if HK_OWNER > 0 set_pev(ent, pev_iuser1, kid); #endif #if HK_TIME > 0 set_pev(ent, pev_nextthink, get_gametime() + float(HK_TIME)); #endif return PLUGIN_CONTINUE; } public fm_touch(ent, id) { if(!pev_valid(ent)) { return FMRES_IGNORED; } static classname[32]; pev(ent, pev_classname, classname, 31); if(!equal(classname, "healthkit_entity")) { return FMRES_IGNORED; } #if HK_OWNER > 0 new kid = pev(ent, pev_iuser1); if(kid && kid != id) { return FMRES_IGNORED; } #endif new chp = pev(id, pev_health); if(chp >= HK_LIMIT) { return FMRES_IGNORED; } new hkv = pev(ent, pev_health); if(hkv == HK_LIMIT) { set_hudmessage(255, 0, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1); } else if(hkv == HK_HS) { set_hudmessage(0, 255, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1); } else if(hkv == HK_HEALTH) { set_hudmessage(0, 0, 255, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1); } show_hudmessage(id, "+ %d HP", hkv); set_pev(id, pev_health, float(min_ex(chp + hkv, HK_LIMIT))); emit_sound(id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM); message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, id); write_string("item_healthkit"); message_end(); #if HK_FADE == 1 message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, id); write_short(1 << 10); write_short(1 << 10); write_short(0x0000); write_byte(hkv == HK_LIMIT ? 255 : 0); write_byte(hkv == HK_HS ? 255 : 0); write_byte(hkv == HK_HEALTH ? 255 : 0); write_byte(150); message_end(); #endif engfunc(EngFunc_RemoveEntity, ent); return FMRES_IGNORED; } #if HK_TIME > 0 public eg_think(ent) { if(!pev_valid(ent)) { return FMRES_IGNORED; } engfunc(EngFunc_RemoveEntity, ent); return FMRES_IGNORED; } #endif #if HK_REMOVE == 1 public ev_start() { new ent; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity"))) { engfunc(EngFunc_RemoveEntity, ent); } return PLUGIN_CONTINUE; } #endif #if HK_OWNER == 1 || HK_OWNER == 2 public client_disconnect(id) { return remove_owner(id); } public remove_owner(id) { new ent; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity"))) { if(pev(ent, pev_iuser1) == id) { #if HK_OWNER == 1 set_pev(ent, pev_iuser1, 0); #else engfunc(EngFunc_RemoveEntity, ent); #endif } } return PLUGIN_CONTINUE; } #endif Допилил ещё немного и добавил шансовое выпадение 100% хиллки. P.S. Настроил себе под War3FT сервер. P.S.2. Что-то я сегодня добрый...
|
|||
Поблагодарили 1 раз
|
||||
grey
|
21.10.2011, 14:49
Сообщение
|
|
|
P.S. Настроил себе под War3FT сервер. то есть настроил под War3FT? не очень знаком с этим модом, но на сколько я знаю там у хуманов нужно прокачивать жизни (вроде 130 кап), под эти аптечки не очень подходит... сам использую практически похожий мод, есть классы от 30хп по 1к+ ![]() ---
|
|
|
|
grey
|
21.10.2011, 17:33
Сообщение
|
|
|
healthkit.sma Код #include <amxmodx> #include <fakemeta> #define HK_GLOW 1 // Подсвечивать аптечки? 0/1 #define HK_FADE 1 // Затемнять экран при поднятии? 0/1 #define HK_REMOVE 1 // Убирать аптечки в начале раунда? 0/1 #define HK_HEALTH 15 // Сколько HP восстанавливает аптечка при простом убийстве? #define HK_HS 30 // Сколько восстанавливает аптечка при хедшоте? #define HK_FC 10 // Каков процент вероятности, что выпадет полная хиллка? #define HK_LIMIT 100 // Максимум HP у игроков? #define HK_TIME 0 // Сколько секунд апечка лежит на земле (0 - неограничено) #define HK_OWNER 0 // Может подобрать только убивший? (1 - да, но после мерти или выхода могут все, 2 - да, после смерти или выхода убирать аптечки, 3 - всегда) // Дальше не трогаем #if HK_TIME > 0 #include <engine> #endif #define min_ex(%1,%2) (%1 <= %2 ? %1 : %2) new msg_pickup; #if HK_FADE == 1 new msg_fade; #endif public plugin_init() { register_plugin("Healthkit", "3.3", "Tuty ft. Sho0ter"); #if HK_REMOVE == 1 register_event("HLTV", "ev_start", "a", "1=0", "2=0") #endif register_event("DeathMsg", "ev_death", "a", "1>0") register_forward(FM_Touch, "fm_touch"); #if HK_TIME > 0 register_think("healthkit_entity", "eg_think"); #endif #if HK_FADE == 1 msg_fade = get_user_msgid("ScreenFade"); #endif msg_pickup = get_user_msgid("ItemPickup"); return PLUGIN_CONTINUE; } public plugin_precache() { precache_model("models/w_medkit.mdl"); precache_sound("items/smallmedkit1.wav"); return PLUGIN_CONTINUE; } public ev_death() { #if HK_OWNER > 0 new kid = read_data(1); if(!is_user_connected(kid)) { kid = 0; } #endif new fc = (random_num(1, 100) <= HK_FC) new id = read_data(2); new hs = read_data(3); #if HK_OWNER == 1 || HK_OWNER == 2 remove_owner(id) #endif static Float:origin[3], ent; pev(id, pev_origin, origin); origin[2] -= 36; if(!pev_valid((ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))))) { return PLUGIN_CONTINUE; } engfunc(EngFunc_SetOrigin, ent, origin); set_pev(ent, pev_classname, "healthkit_entity"); engfunc(EngFunc_SetModel, ent, "models/w_medkit.mdl"); dllfunc(DLLFunc_Spawn, ent); set_pev(ent, pev_solid, SOLID_BBOX); set_pev(ent, pev_movetype, MOVETYPE_NONE); engfunc(EngFunc_SetSize, ent, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000}); engfunc(EngFunc_DropToFloor, ent); #if HK_GLOW == 1 set_pev(ent, pev_renderfx, kRenderFxGlowShell); set_pev(ent, pev_rendercolor, fc ? (Float:{255.0, 0.0, 0.0}) : (hs ? (Float:{0.0, 255.0, 0.0}) : (Float:{0.0, 0.0, 255.0}))); set_pev(ent, pev_rendermode, kRenderFxNone); set_pev(ent, pev_renderamt, 27.0); #endif set_pev(ent, pev_health, fc ? float(HK_LIMIT) : (hs ? float(HK_HS) : float(HK_HEALTH))); #if HK_OWNER > 0 set_pev(ent, pev_iuser1, kid); #endif #if HK_TIME > 0 set_pev(ent, pev_nextthink, get_gametime() + float(HK_TIME)); #endif return PLUGIN_CONTINUE; } public fm_touch(ent, id) { if(!pev_valid(ent)) { return FMRES_IGNORED; } static classname[32]; pev(ent, pev_classname, classname, 31); if(!equal(classname, "healthkit_entity")) { return FMRES_IGNORED; } #if HK_OWNER > 0 new kid = pev(ent, pev_iuser1); if(kid && kid != id) { return FMRES_IGNORED; } #endif new chp = pev(id, pev_health); if(chp >= HK_LIMIT) { return FMRES_IGNORED; } new hkv = pev(ent, pev_health); if(hkv == HK_LIMIT) { set_hudmessage(255, 0, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1); } else if(hkv == HK_HS) { set_hudmessage(0, 255, 0, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1); } else if(hkv == HK_HEALTH) { set_hudmessage(0, 0, 255, -1.0, 0.80, 0, 6.0, 3.0, 0.1, 0.1); } show_hudmessage(id, "+ %d HP", hkv); set_pev(id, pev_health, float(min_ex(chp + hkv, HK_LIMIT))); emit_sound(id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM); message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, id); write_string("item_healthkit"); message_end(); #if HK_FADE == 1 message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, id); write_short(1 << 10); write_short(1 << 10); write_short(0x0000); write_byte(hkv == HK_LIMIT ? 255 : 0); write_byte(hkv == HK_HS ? 255 : 0); write_byte(hkv == HK_HEALTH ? 255 : 0); write_byte(150); message_end(); #endif engfunc(EngFunc_RemoveEntity, ent); return FMRES_IGNORED; } #if HK_TIME > 0 public eg_think(ent) { if(!pev_valid(ent)) { return FMRES_IGNORED; } engfunc(EngFunc_RemoveEntity, ent); return FMRES_IGNORED; } #endif #if HK_REMOVE == 1 public ev_start() { new ent; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity"))) { engfunc(EngFunc_RemoveEntity, ent); } return PLUGIN_CONTINUE; } #endif #if HK_OWNER == 1 || HK_OWNER == 2 public client_disconnect(id) { return remove_owner(id); } public remove_owner(id) { new ent; while((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "healthkit_entity"))) { if(pev(ent, pev_iuser1) == id) { #if HK_OWNER == 1 set_pev(ent, pev_iuser1, 0); #else engfunc(EngFunc_RemoveEntity, ent); #endif } } return PLUGIN_CONTINUE; } #endif если интересно - инфо с тестов Нагрузка при 20 человек как на 32, 3 краша за 1 час, но сервер сам по себе не стабильный считается нормальным 1-2 краша за сутки ![]() ---
|
|
|
|
Trollface_and_facepalm
|
21.10.2011, 17:40
Сообщение
|
|||
![]() |
если интересно - инфо с тестов Нагрузка при 20 человек как на 32, 3 краша за 1 час, но сервер сам по себе не стабильный считается нормальным 1-2 краша за сутки Ну у меня сервер не падает, на нагрузку особо не смотрю т.к. фпс держит. Но то, что он грузит прилично (а грузит тут register_touch) понятно. Для наглядности, если 32 стохелсовых игрока с 101 фпс одновременно станут на аптечки...то функция обработки поднятия вызовится 3232 раза в секунду, а внутри неё ещё 4-5 функций и того до 16000 вызовов в секунду. :). Насчёт ХП - то раз у тебя уже есть 100 хп (пусть и 130 максимум) то аптечка тебе явно незачем. P.S. И это ещё при том, что настройки я сделал дефайнами т.е. код, не используемый в зависимости от настроек, удаляется в процессе компиляции. Случай с кварами намного печальней.
Отредактировал: Trollface_and_facepalm, - 21.10.2011, 17:45
|
|||
Поблагодарили 1 раз
|
||||
Trollface_and_facepalm
|
22.10.2011, 0:54
Сообщение
|
|||
![]() |
Держи:
healthkit.zip ( 2,68 килобайт )
Кол-во скачиваний: 101. Оптимизировал код (теперь нагрузка будет в разы меньше); 2. Добавил новые настройки на уровне компиляции; 3. Добавил няшный эффект исчезания; 4. Добавил анимацию выпадения аптечки; 5. Убрал твёрдость; P.S. Блин, чёто я сегодня уже чересчур добрый... С тебя печанька.
Отредактировал: Trollface_and_facepalm, - 22.10.2011, 1:18
|
|||
Поблагодарили 1 раз
|
||||
grey
|
22.10.2011, 9:51
Сообщение
|
|
|
Trollface_and_fa...,
Обновления радуют Цитата P.S. Блин, чёто я сегодня уже чересчур добрый... С тебя печанька. Наверное потому что этот плагин нужен не только мне но и тебе кстати, нафлудило 63к строк в консоли, ошибка L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled! L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes). L 10/22/2011 - 10:36:11: [HAMSANDWICH] Invalid HamHook handle. L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled! L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes). ![]() ---
|
|
|
|
Trollface_and_facepalm
|
22.10.2011, 12:25
Сообщение
|
|||
![]() |
Trollface_and_fa..., Обновления радуют Наверное потому что этот плагин нужен не только мне но и тебе кстати, нафлудило 63к строк в консоли, ошибка L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled! L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes). L 10/22/2011 - 10:36:11: [HAMSANDWICH] Invalid HamHook handle. L 10/22/2011 - 10:36:11: [AMXX] Run time error 10 (plugin "healthkit.amxx") (native "DisableHamForward") - debug not enabled! L 10/22/2011 - 10:36:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes). Я ожидал такого :) Включи дебаг.
|
|||
Поблагодарили 1 раз
|
||||
grey
|
22.10.2011, 12:38
Сообщение
|
|
|
Я ожидал такого :) Включи дебаг. теперь такое лог L 10/22/2011 - 13:34:53: [AMXX] Displaying debug trace (plugin "healthkit.amxx") L 10/22/2011 - 13:34:53: [AMXX] Run time error 10: native error (native "DisableHamForward") L 10/22/2011 - 13:34:53: [AMXX] [0] healthkit.sma::remove_entity (line 255) L 10/22/2011 - 13:34:53: [AMXX] [1] healthkit.sma::ham_think (line 202) L 10/22/2011 - 13:34:53: [HAMSANDWICH] Invalid HamHook handle. ![]() ---
|
|
|
|
Trollface_and_facepalm
|
22.10.2011, 16:07
Сообщение
|
|||
![]() |
Держи:
healthkit.zip ( 2,96 килобайт )
Кол-во скачиваний: 24Поправил, ещё оптимизировал и немного добавил отсебятины.
|
|||
Поблагодарили 1 раз
|
||||
grey
|
22.10.2011, 17:52
Сообщение
|
|
|
Держи:
healthkit.zip ( 2,96 килобайт )
Кол-во скачиваний: 24Поправил, ещё оптимизировал и немного добавил отсебятины. Есть 1 маленький баг, аптечка летает за тобой на уровне торса, а так ошибок и нагрузки практически нет. скрин, весело так играть ![]() -на нормальном сервере всё в порядке
Отредактировал: greykoo, - 22.10.2011, 19:44
![]() ---
|
|
|
|
Trollface_and_facepalm
|
22.10.2011, 20:04
Сообщение
|
|||
![]() |
Есть 1 маленький баг, аптечка летает за тобой на уровне торса, а так ошибок и нагрузки практически нет. скрин, весело так играть ![]() -на нормальном сервере всё в порядке Она должна на землю падать.
|
|||
|
|
||||
grey
|
22.10.2011, 20:36
Сообщение
|
|
|
Она должна на землю падать. это тестовый сервер, игра с ботами, там куча плагинов, на игровом сервере всё отлично работает. ![]() ---
|
|
|
|
![]() ![]() |