Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Взаимовлияние плагинов

, Исходники прилагаются
Статус пользователя usercn
сообщение 23.12.2014, 12:06
Сообщение #1


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Есть 2 плагина.
1-й плагин - на бомбу С4 ставит снеговика
2-й плагин - после кила игрока выпадает аптечка

2-й плагин (с аптечками) работает всегда и проблем в нем не наблюдается.
Но 1-й плагин (со снеговиком) не может нормально работать одновременно с аптечками.

Проблема - убрал, так как было не правильно описано.

Добавил:
момент глюка точно не понятен, пока есть 2 варианта:
1) СНЕГОВИК пропадает либо когда плагин ПРОСТО ЗАПУЩЕН и работаеи
2) В момент убийства когда аптечка ВЫПАДАЕТ, то есть появляется.


Плагин со снеговиком
Код:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>

#define PLUGIN "Snowman - Bomb"
#define VERSION "1.5.1"
#define AUTHOR "Alka / s0h"

#pragma tabsize 0

//Settings
#define SOUND // Если не хотите слышать звуки, закоментируйте эту строку
#define SNOW //Если вам не нужен снег, закоментируйте эту строку
#define ANIMATION_DEFUSE //Если вам не нужна анимация во время разминирования бомбы, закоментируйте эту строку
#define BLINK_BOMB //Если хотите чтобы бомба внизу снеговика мигала, закоментируйте эту строку

new iEntity;

#if defined BLINK_BOMB
new g_iLedSprite;
#endif

new const gClassname_bomb[] = "bomb_snow"

new const g_szBombModels[][] = {
"models/bomb_snowman.mdl"
};

#if defined SOUND
new const g_szBombSounds[][] = {

"ny/bmb_defused.wav",
"ny/bmb_defuse_failure.wav"
};
#endif

public plugin_init()
{
register_event("HLTV", "eventHLTV", "a", "1=0", "2=0");

register_plugin(PLUGIN, VERSION, AUTHOR);

#if defined SNOW
register_clcmd("say /snowoff", "clcmd_snowoff")
register_clcmd("say /snow", "clcmd_snowon")
#endif

register_forward(FM_SetModel, "fwd_SetModel", 1);

register_logevent("logevent_BombDefused", 3, "2=Defused_The_Bomb");

#if defined ANIMATION_DEFUSE
register_event("BarTime", "_cansel", "b", "1=0") //Событие отмены минирования/разминирования бомбы
#endif

register_think(gClassname_bomb, "EntityThink")

#if defined BLINK_BOMB
register_message(SVC_TEMPENTITY, "message_TempEntity");
#endif
}

public plugin_precache()
{
engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_snow"));

precache_model("models/hairt.mdl");
new i;
for(i = 0; i < sizeof g_szBombModels; i++)
precache_model(g_szBombModels[i]);

for(i = 0 ; i < sizeof g_szBombModels ; i++)
precache_model(g_szBombModels[i]);

#if defined SOUND
for(i = 0 ; i < sizeof g_szBombSounds ; i++)
precache_sound(g_szBombSounds[i]);
#endif

#if defined BLINK_BOMB
g_iLedSprite = precache_model("sprites/ledglow.spr");
#endif
}

#if defined BLINK_BOMB
public message_TempEntity(msg_id, msg_dest, msg_ent)
{
if(get_msg_arg_int(1) == TE_GLOWSPRITE)
{
if(get_msg_arg_int(5) == g_iLedSprite)
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
#endif

public eventHLTV()
{
clean()
}

public EntityThink(iEntity)
{
if(!pev_valid(iEntity))
return PLUGIN_CONTINUE

set_pev(iEntity, pev_nextthink, get_gametime() + 0.1)

return PLUGIN_CONTINUE
}



#if defined SNOW
public client_putinserver(id)
{
client_cmd(id, "cl_weather 3")
}

public clcmd_snowoff(id)
{
client_cmd(id, "cl_weather 0")
}

public clcmd_snowon(id)
{
client_cmd(id, "cl_weather 3")
}
#endif

public fwd_SetModel(ent, const szModel[])
{
if(!pev_valid(ent))
return FMRES_IGNORED;

if(equal(szModel, "models/w_c4.mdl"))
{
engfunc(EngFunc_SetModel, ent, "models/hairt.mdl");

return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}

public clean()
{
new entity = -1;

while((entity = find_ent_by_class(entity, gClassname_bomb)))
{
remove_entity(entity);
}
}

public bomb_planted(id)
{
#if defined SOUND
emit_sound(0, CHAN_AUTO, g_szBombSounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
#endif

new iOrigin[3] //Создаем массив для хранение координат
get_user_origin(id, iOrigin, 0) //Получаем координаты куда смотрит игрок

new Float:fOrigin[3] //Создаем массив для float коодинат
IVecFVec(iOrigin, fOrigin) //Конвертируем координаты в дробные

if( (pev(id, pev_flags) & FL_ONGROUND) && (pev(id, pev_button) & IN_DUCK ) )
fOrigin[2] += 18.0;

iEntity = create_entity("info_target") //Создаем объект info_target

if(!pev_valid(iEntity)) //Проверяем сущетсвует ли, если нет
return PLUGIN_HANDLED //Заканчиваем. Дальше нам делать нечего

set_pev(iEntity, pev_origin, fOrigin) //Присваиваем координаты

set_pev(iEntity, pev_classname, gClassname_bomb) //Присваиваем Classname
set_pev(iEntity, pev_solid, SOLID_NOT) //Делаем его непроходимым
set_pev(iEntity, pev_movetype, MOVETYPE_NONE) //Не задаем тип движения, во всяком случаи пока
set_pev(iEntity, pev_sequence, 1) //Выставляем № анимации при создании
set_pev(iEntity, pev_framerate, 1.0) //Выставляем скорость анимации
set_pev(iEntity, pev_nextthink, get_gametime() + 1.0) //Создаем запуск think

engfunc(EngFunc_SetModel, iEntity, g_szBombModels[0]) //Присваиваем модель

return PLUGIN_HANDLED //Заканчиваем. Дальше нам делать нечего
}

public bomb_explode()
{
clean()
}

public bomb_defusing() // Момент когда бомбу начали разминировать
{
#if defined ANIMATION_DEFUSE
if(pev_valid(iEntity)) __Anim(iEntity, 3, 1.0); //run
#endif
}

#if defined ANIMATION_DEFUSE
public _cansel()
{
if(pev_valid(iEntity)) __Anim(iEntity, 1, 1.0); //not run
}
#endif

public logevent_BombDefused()
{
#if defined SOUND
emit_sound(0, CHAN_AUTO, g_szBombSounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
#endif

if(pev_valid(iEntity)) __Anim(iEntity, 104, 1.0); //dead
}

stock __Anim(index, sequence, Float: framerate = 1.0)
{
static className[32];
entity_get_string(iEntity, EV_SZ_classname, className, charsmax(className))
if(equali(className, gClassname_bomb) && pev_valid(index))
{
entity_set_float(index, EV_FL_animtime, get_gametime());
entity_set_float(index, EV_FL_framerate, framerate);
entity_set_float(index, EV_FL_frame, 0.0);
entity_set_int(index, EV_INT_sequence, sequence);
}

if(sequence == 104)
{
set_task(2.5, "clean")
}
}



Плагин с аптечками
Код:

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

#pragma semicolon 1

// Шансы и количества

#define HK_FULL_CHANCE 0 // Процент вероятности выпадение полной аптечки (0 - никогда, 100 - всегда)
#define HK_FULL_HEALTH 100 // Сколько восстанавливает полная аптечка? (Лимит не привышаем)
#define HK_HEADSHOT_CHANCE 100 // Процент вероятности выпадения аптечки при убийстве в голову (0 - никогда, 100 - всегда)
#define HK_HEADSHOT_HEALTH 30 // Сколько восстанавливает аптечка при убийстве в голову? (Лимит не привышаем)
#define HK_NORMAL_CHANCE 100 // Процент вероятности выпадения простой аптечки 0 - никогда, 100 - всегда)
#define HK_NORMAL_HEALTH 20 // Сколько восстанавливает простая аптечка? (Лимит не привышаем)
#define HK_LIMIT_HEALTH 100 // Сколько максимум HP может быть у игроков?

// Эффекты

#define HK_HEALTHKIT_GLOW 1 // Подсвечивать аптечки? (0 - нет, 1 - да)
#define HK_PLAYER_FADE 0 // Затемнять игроку экран при поднятии аптечки? (0 - нет, 1 - да)
#define HK_PLAYER_HUD 1 // Показывать игроку HUD сообщение при поднятии аптечки? (0 - нет, 1 - да)
#define HK_PLAYER_SOUND 1 // Проигрывать звук при поднятии аптечки? (0 - нет, 1 - да)
#define HK_HEALTHKIT_EFFECT 1 // Включить эффект плавного исчезания аптечки? (0 - нет, 1 - да) --- НЕЛЬЗЯ МЕНЯТЬ НА 0

// Другое

#define HK_TOGGLE 0 // Разрешать игрокам отключать и включать поднятие аптечек командой /hk? (0 - нет, 1 - да)
#define HK_ROUND_REMOVE 1 // Убирать аптечки в начале раунда? (0 - нет, 1 - да)
#define HK_LIFE_TIME 30 // Сколько секунд может лежать аптечка? (0 - бесконечно)
#define HK_OWNER_ONLY 0 // Только убийца может подобрать аптечку? (0 - нет, 1 - да, но после смерти или выхода могут все, 2 - да, но после смерти или выхода убрать аптечки, 3 - всегда, но после выхода могут все, 4 - всегда, но после выхода убрать аптечки) [Не советовал бы ставить 1 или 2]

// Дальше трогаем только если есть хоть чутка мозгов

#define min_ex(%1,%2) (%1 <= %2 ? %1 : %2)

new msg_pickup, bool:ham_registred;

#if HK_PLAYER_FADE == 1
new msg_fade;
#endif

#if HK_TOGGLE == 1
new toggle;
#define is_bit(%1) (toggle & (1 << (%1 - 1)))
#define add_bit(%1) (toggle |= (1 << (%1 - 1)))
#define remove_bit(%1) (toggle &= ~(1 << (%1 - 1)))
#endif

public plugin_init()
{
register_plugin("Healthkit", "3.3.1", "Tuty ft. Sho0ter");
#if HK_ROUND_REMOVE == 1
register_event("HLTV", "ev_start", "a", "1=0", "2=0");
#endif
register_event("DeathMsg", "ev_death", "a", "1>0");
#if HK_PLAYER_FADE == 1
msg_fade = get_user_msgid("ScreenFade");
#endif
msg_pickup = get_user_msgid("ItemPickup");
#if HK_TOGGLE == 1
register_clcmd("say /hk", "cmd_toggle");
register_clcmd("say_team /hk", "cmd_toggle");
#endif
return PLUGIN_CONTINUE;
}

#if HK_TOGGLE == 1
public client_putinserver(client_id)
{
if(!is_bit(client_id))
{
add_bit(client_id);
}
return PLUGIN_CONTINUE;
}

public cmd_toggle(client_id)
{
if(!is_bit(client_id))
{
add_bit(client_id);
client_cmd(client_id, "spk activated");
}
else
{
remove_bit(client_id);
client_cmd(client_id, "spk deactivated");
}
return PLUGIN_HANDLED;
}
#endif

public plugin_precache()
{
#if HK_PLAYER_SOUND == 1
precache_sound("items/smallmedkit1.wav");
#endif
return precache_model("models/w_medkit.mdl");
}

public ev_death()
{
#if HK_OWNER_ONLY > 0
new killer_id = read_data(1);
#if HK_TOGGLE == 1
if(!is_bit(killed_id))
{
killed_id = 0;
else
{
#endif
if(!is_user_connected(killer_id))
{
killer_id = 0;
}
#if HK_TOGGLE == 1
}
#endif
#endif
new type, victim_id = read_data(2), chance = random_num(1, 100);
#if HK_OWNER_ONLY == 1 || HK_OWNER_ONLY == 2
remove_owner(victim_id);
#endif
if(chance <= HK_FULL_CHANCE)
{
type = 1;
}
else if(read_data(3))
{
if(chance <= HK_HEADSHOT_CHANCE)
{
type = 2;
}
else
{
return PLUGIN_CONTINUE;
}
}
else if(chance <= HK_NORMAL_CHANCE)
{
type = 3;
}
else
{
return PLUGIN_CONTINUE;
}
new entity;
if(!pev_valid((entity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")))))
{
return PLUGIN_CONTINUE;
}
set_pev(entity, pev_classname, "healthkit_entity");
#if HK_OWNER_ONLY > 0
set_pev(entity, pev_owner, killer_id);
#endif
set_pev(entity, pev_iuser1, 0);
engfunc(EngFunc_SetSize, entity, Float:{-23.160000, -13.660000, -0.050000}, Float:{11.470000, 12.780000, 6.720000});
set_pev(entity, pev_solid, SOLID_TRIGGER);
set_pev(entity, pev_movetype, MOVETYPE_TOSS);
new Float:angles[3] = {0.0, 0.0, 0.0};
angles[1] = float(random_num(0, 180));
set_pev(entity, pev_angles, angles);
new Float:origin[3];
pev(victim_id, pev_origin, origin);
engfunc(EngFunc_SetOrigin, entity, origin);
engfunc(EngFunc_SetModel, entity, "models/w_medkit.mdl");
#if HK_HEALTHKIT_GLOW == 1
set_pev(entity, pev_renderfx, kRenderFxGlowShell);
set_pev(entity, pev_rendercolor, type == 1 ? (Float:{255.0, 0.0, 0.0}) : (type == 2 ? (Float:{255.0, 255.0, 0.0}) : (Float:{255.0, 255.0, 255.0})));
set_pev(entity, pev_rendermode, kRenderFxNone);
set_pev(entity, pev_renderamt, 25.0);
#endif
set_pev(entity, pev_health, type == 1 ? float(HK_FULL_HEALTH) : (type == 2 ? float(HK_HEADSHOT_HEALTH) : float(HK_NORMAL_HEALTH)));
#if HK_LIFE_TIME > 0
set_pev(entity, pev_nextthink, get_gametime() + float(HK_LIFE_TIME));
#endif
if(!ham_registred)
{
#if HK_LIFE_TIME > 0
RegisterHamFromEntity(Ham_Think, entity, "ham_think", 1);
#endif
RegisterHamFromEntity(Ham_Touch, entity, "ham_touch", 1);
ham_registred = true;
}
return PLUGIN_CONTINUE;
}

public ham_touch(entity, touch_id)
{
#if HK_TOGGLE == 1
if(!is_bit(touch_id))
{
return HAM_IGNORED;
}
#endif
if(!pev_valid(entity) || !is_user_connected(touch_id))
{
return HAM_IGNORED;
}
#if HK_OWNER_ONLY > 0
new owner = pev(entity, pev_owner);
if(owner && owner != touch_id)
{
return HAM_IGNORED;
}
#endif
new current_hp = pev(touch_id, pev_health);
if(current_hp >= HK_LIMIT_HEALTH)
{
return HAM_IGNORED;
}
new healthkit_value = pev(entity, pev_health);
#if HK_HEALTHKIT_EFFECT == 1
if(!healthkit_value)
{
return HAM_IGNORED;
}
#endif
#if HK_PLAYER_HUD == 1
switch(healthkit_value)
{
case HK_FULL_HEALTH: set_hudmessage(255, 0, 0, -1.0, 0.55, 0, 1.0, 2.0, 1.0, 1.0);
case HK_HEADSHOT_HEALTH: set_hudmessage(255, 255, 0, -1.0, 0.55, 0, 1.0, 2.0, 1.0, 1.0);
case HK_NORMAL_HEALTH: set_hudmessage(255, 255, 255, -1.0, 0.55, 0, 1.0, 2.0, 1.0, 1.0);
}
show_hudmessage(touch_id, "+ %d HP", healthkit_value);
#endif
set_pev(touch_id, pev_health, float(min_ex(current_hp + healthkit_value, HK_LIMIT_HEALTH)));
#if HK_PLAYER_SOUND == 1
emit_sound(touch_id, CHAN_ITEM, "items/smallmedkit1.wav", VOL_NORM, ATTN_NORM , 0, PITCH_NORM);
#endif
message_begin(MSG_ONE_UNRELIABLE, msg_pickup, _, touch_id);
write_string("item_healthkit");
message_end();
#if HK_PLAYER_FADE == 1
message_begin(MSG_ONE_UNRELIABLE, msg_fade , _, touch_id);
write_short(1 << 10);
write_short(1 << 10);
write_short(0x0000);
write_byte(healthkit_value == HK_FULL_HEALTH ? 255 : 0);
write_byte(healthkit_value == HK_HEADSHOT_HEALTH ? 255 : 0);
write_byte(healthkit_value == HK_NORMAL_HEALTH ? 255 : 0);
write_byte(100);
message_end();
#endif
#if HK_HEALTHKIT_EFFECT == 1
return ham_think(entity);
#else
return remove_entity(entity);
#endif
}

public ham_think(entity)
{
if(!pev_valid(entity))
{
return HAM_IGNORED;
}
#if HK_HEALTHKIT_EFFECT == 1
if(pev(entity, pev_rendermode) != kRenderTransAlpha)
{
set_pev(entity, pev_solid, SOLID_NOT);
set_pev(entity, pev_health, 0.0);
set_pev(entity, pev_rendercolor, Float:{0.0, 0.0, 0.0});
set_pev(entity, pev_rendermode, kRenderTransAlpha);
set_pev(entity, pev_renderamt, 250.0);
}
else
{
new amount = pev(entity, pev_renderamt);
if(amount <= 10)
{
return engfunc(EngFunc_RemoveEntity, entity);
}
set_pev(entity, pev_renderamt, float(amount - 10));
}
return set_pev(entity, pev_nextthink, get_gametime() + 0.02);
#else
return engfunc(EngFunc_RemoveEntity, entity);
#endif
}

#if HK_ROUND_REMOVE == 1
public ev_start()
{
new entity;
while((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", "healthkit_entity")))
{
engfunc(EngFunc_RemoveEntity, entity);
}
return PLUGIN_CONTINUE;
}
#endif

#if HK_OWNER_ONLY > 0
public client_disconnect(client_id)
{
return remove_owner(client_id);
}

stock remove_owner(client_id)
{
new entity;
while((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", "healthkit_entity")))
{
if(pev(entity, pev_owner) == client_id)
{
#if HK_OWNER_ONLY == 1 || HK_OWNER_ONLY == 3
set_pev(entity, pev_owner, 0);
#else
#if HK_HEALTHKIT_EFFECT == 1
ham_think(entity);
#else
engfunc(EngFunc_RemoveEntity, entity);
#endif
#endif
}
}
return PLUGIN_CONTINUE;
}
#endif


Отредактировал: usercn, - 28.12.2014, 12:18


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   Цитировать сообщение
Статус пользователя bapstop
сообщение 23.12.2014, 13:04
Сообщение #2


Стаж: 12 лет

Сообщений: 206
Благодарностей: 100
Полезность: 686

Попробуй плагин 1й плагин прописать выше 2ого.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя usercn
сообщение 23.12.2014, 16:00
Сообщение #3


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Цитата(bapstop @ 23.12.2014, 13:00) *
Попробуй плагин 1й плагин прописать выше 2ого.

Я это проделал самым первым делом, как только заметил взаимовлияние.
Как их не размещай, всё равно глюк одинаковый.


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
csgamer
сообщение 23.12.2014, 18:28
Сообщение #4
Стаж: 12 лет

Сообщений: 398
Благодарностей: 16
Полезность: 0

Какая версия амхх хоть бы написал
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя usercn
сообщение 23.12.2014, 23:30
Сообщение #5


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

любая версия амхх, я пробовал на 1.8.2


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя usercn
сообщение 24.12.2014, 9:31
Сообщение #6


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Только что проверил на 1.8.1 - тоже самое. Это не зависит от версии АМХХ.


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя usercn
сообщение 25.12.2014, 20:42
Сообщение #7


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Что и где нужно исправить, чтобы не трогался снеговик?


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 27.12.2014, 14:01
Сообщение #8
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

заккоментируй 249 строку где remove_entity , пусть аптечка не пропадет, посмотри снеговик останется или нет для начала

Отредактировал: csnet, - 27.12.2014, 14:01


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя usercn
сообщение 28.12.2014, 12:14
Сообщение #9


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Цитата(csnet @ 27.12.2014, 15:01) *
заккоментируй 249 строку где remove_entity , пусть аптечка не пропадет, посмотри снеговик останется или нет для начала

--------------------------------------------------------------------------------------------
Проблема - когда ставят С4 и появляется снеговик, то если поднимается аптечка,
плагин аптечек убирает аптечку и одновременно убирает модель снеговика.
Нужно сделать чтобы убирающаяся аптечка не убирала снеговика.
ЭТО НЕ ПРАВИЛЬНО ОПИСАННАЯ ПРОБЛЕМА!!!
--------------------------------------------------------------------------------------------

Постараюсь описать уточнённо.
1) СНЕГОВИК пропадает даже когда аптечка не подбирается,
а либо когда плагин ПРОСТО ЗАПУЩЕН либо в момент убийства когда аптечка ВЫПАДАЕТ, то есть появляется.
2) коментарий 249 строки ничего не даёт. Кстати аптечки продолжают убираться при поднятии,
явно отключение их не в этом месте...
Но это уже не важно, так как момент исчезновения снеговика не связан с исчезанием аптечки.


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя usercn
сообщение 28.12.2014, 20:51
Сообщение #10


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Я правильно понимаю, что модель снеговика может удаляться функцией "remove_entity",
то есть нужно попробовать закоментировать все функции "remove_entity" ??
Что мне делать?


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 29.12.2014, 12:50
Сообщение #11
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

в коде есть remove_entity и их аналог EngFunc remove entity закомменть все


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя usercn
сообщение 29.12.2014, 16:48
Сообщение #12


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Цитата(csnet @ 29.12.2014, 13:50) *
в коде есть remove_entity и их аналог EngFunc remove entity закомменть все

Всего в плагине нашлось 5 мест с remove_entity,
путем перебора и коментирования всех определил, что на снеговика влияет именно это место.
Код:
public ham_think(entity)
{
if(!pev_valid(entity))
{
return HAM_IGNORED;
}
#if HK_HEALTHKIT_EFFECT == 1
if(pev(entity, pev_rendermode) != kRenderTransAlpha)
{
set_pev(entity, pev_solid, SOLID_NOT);
set_pev(entity, pev_health, 0.0);
set_pev(entity, pev_rendercolor, Float:{0.0, 0.0, 0.0});
set_pev(entity, pev_rendermode, kRenderTransAlpha);
set_pev(entity, pev_renderamt, 250.0);
}
else
{
new amount = pev(entity, pev_renderamt);
if(amount <= 10)
{
/////return engfunc(EngFunc_RemoveEntity, entity); ///// Вот оно!!!!!!!!
}
set_pev(entity, pev_renderamt, float(amount - 10));
}
return set_pev(entity, pev_nextthink, get_gametime() + 0.02);
#else
return engfunc(EngFunc_RemoveEntity, entity);
#endif
}

Если его закоментить снеговик не исчезает!! (правда и аптечка не исчезает).


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя usercn
сообщение 29.12.2014, 20:59
Сообщение #13


Стаж: 12 лет

Сообщений: 341
Благодарностей: 140
Полезность: 495

Перепроверил ещё раз, всё написал правильно!
Именно эта строчка влияет на снеговика. Если я её коментирую, то снеговик не исчезает.
Но естесственно плагин аптечек начинает кривовато работать, а именно - когда подбираешь аптечку,
то исчезает только светящийся "ореол" вокруг аптечки, а сама аптечка плодолжает лежать до конца раунда.

Как реализовать, чтобы эта строчка убирала только аптечку и не трогала снеговика?


==============================================

Проблему решил самостоятельно.
Для совместимости с плагином аптечек нужно убрать вызов функции EntityThink в 57 строке плагина снеговика.
Плагин аптечек остаётся без изменений.
register_think(gClassname_bomb, "EntityThink")
заменяем например на
register_think(gClassname_bomb, "EntityThink_fix")
Тему можно закрыть.

Отредактировал: usercn, - 30.12.2014, 17:09


Просунутий сервер з максимумом зброї, можливо старійший в Україні
[UA] DNET CS Public Server #1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: