Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
Grushka » 15 апр 2017, 21:47
Здравствуйте, не могу решить проблему: сервер крашится, когда я кидаю гранату под entity. Не крашится, если entity принадлежит тиммейту
- Код: Выделить всё
public plugin_init()
{
register_clcmd("mine", "CreateMine")
RegisterHam(Ham_TakeDamage, "info_target", "TakeDamage", 1)
RegisterHam(Ham_TakeDamage, "info_target", "TakeDamagePre", 0)
}
public CreateMine(id)
{
new float:Origin[3]; pev(id, pev_origin, Origin)
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
set_pev(ent, pev_classname, CLASSNAME);
set_pev(ent, pev_iuser1, id);
set_pev(ent, pev_movetype, MOVETYPE_TOSS); set_pev(ent, pev_solid, SOLID_SLIDEBOX); set_pev(ent, pev_nextthink, get_gametime() + LIFETIME);
set_pev(ent, pev_takedamage, 1.0);
set_pev(ent, pev_health, 50.0);
engfunc(EngFunc_SetModel, ent, MODEL);
engfunc(EngFunc_SetOrigin, ent, Origin);
engfunc(EngFunc_SetSize, ent, float:{-2.15, -4.3, -2.15}, float:{2.15, 4.3, 2.15});
}
public TakeDamage(ent, weapon, attacker, Float:damage, damagebits)
{
new classname[32]
pev(ent, pev_classname, classname, 31)
if(equal(classname, CLASSNAME) && is_valid_ent(ent))
{
new owner = pev(ent, pev_iuser1)
if(!IsPlayer(owner) || cs_get_user_team(owner) == cs_get_user_team(attacker))
return HAM_SUPERCEDE
ExplodeMine(ent)
}
return HAM_IGNORED;
}
public TakeDamagePre(ent, weapon, attacker, Float:damage, damagebits)
{
new classname[32]
pev(ent, pev_classname, classname, 31)
if(equal(classname, CLASSNAME) && is_valid_ent(ent))
{
new owner = pev(ent, pev_iuser1)
if(!IsPlayer(owner) || cs_get_user_team(owner) == cs_get_user_team(attacker) || damagebits == (1<<24)) return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
-
Grushka
-
- Сообщения: 84
- Зарегистрирован: 13 июн 2013, 22:06
- Благодарил (а): 35 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Counter-Strike 1.6
-
KOTOKU » 15 апр 2017, 22:04
Потому что когда ентити тимейта, то не выполняется ExplodeMine(ent), покажи ExplodeMine(ent) код
-
KOTOKU
-
- Сообщения: 766
- Зарегистрирован: 10 фев 2013, 00:53
- Благодарил (а): 10 раз.
- Поблагодарили: 117 раз.
Grushka » 15 апр 2017, 22:11
KOTOKU писал(а):Потому что когда ентити тимейта, то не выполняется ExplodeMine(ent), покажи ExplodeMine(ent) код
- Код: Выделить всё
public ExplodeMine(ent)
{
MakeEffects(ent);
CreateDamageInRadius(ent, 25.0, 300.0);
CreateDamageInRadius(ent, 50.0, 150.0);
CreateDamageInRadius(ent, 125.0, 80.0);
engfunc(EngFunc_RemoveEntity, ent);
return PLUGIN_CONTINUE;
}
MakeEffects(ent)
{
if (!is_valid_ent(ent))
return
new Float:origin2[3], origin[3];
pev(ent,pev_origin,origin2);
FVecIVec(origin2, origin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BREAKMODEL);
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2]+5)
write_coord(16);
write_coord(16);
write_coord(16);
write_coord(random_num(-75, 75));
write_coord(random_num(-75, 75));
write_coord(150);
write_byte(50);
write_short(g_iMetalPlateGibs);
write_byte(35);
write_byte(25);
write_byte(0x02);
message_end();
message_begin(MSG_ALL, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_byte(28)
message_end()
message_begin(MSG_ALL, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2]+5)
write_short(sprBoom)
write_byte(20)
write_byte(50)
write_byte(0)
message_end()
message_begin(MSG_ALL, SVC_TEMPENTITY, origin)
write_byte(TE_SMOKE)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_short(sprSmoke)
write_byte(17)
write_byte(10)
message_end()
}
public CreateDamageInRadius(ent, Float:damage, Float:radius)
{
new owner = pev(ent, pev_iuser1);
new Float:origin[3]
pev(ent, pev_origin, origin)
new victim = -1;
while((victim = engfunc(EngFunc_FindEntityInSphere, victim, origin, radius))) {
if (!is_user_alive( victim )) continue;
if (get_user_team(victim) == get_user_team(owner)) continue;
ExecuteHamB(Ham_TakeDamage, victim, ent, owner, damage, 0) }
}
-
Grushka
-
- Сообщения: 84
- Зарегистрирован: 13 июн 2013, 22:06
- Благодарил (а): 35 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Counter-Strike 1.6
-
KOTOKU » 15 апр 2017, 22:16
Прологируй этот участок кода, таким вот методом определишь функцию, где косяк
Лог будет в папке addons/amxmodx/entity.txt, можешь даже логи сюда скинуть
- Код: Выделить всё
public ExplodeMine(ent)
{
log_to_file("addons/amxmodx/entity.txt", "MakeEffect PRE");
MakeEffects(ent);
log_to_file("addons/amxmodx/entity.txt", "MakeEffect GOOD");
log_to_file("addons/amxmodx/entity.txt", "CreateDamage1 PRE");
CreateDamageInRadius(ent, 25.0, 300.0);
log_to_file("addons/amxmodx/entity.txt", "CreateDamage1 GOOD");
log_to_file("addons/amxmodx/entity.txt", "CreateDamage2 PRE");
CreateDamageInRadius(ent, 50.0, 150.0);
log_to_file("addons/amxmodx/entity.txt", "CreateDamage2 GOOD");
log_to_file("addons/amxmodx/entity.txt", "CreateDamage3 PRE");
CreateDamageInRadius(ent, 125.0, 80.0);
log_to_file("addons/amxmodx/entity.txt", "CreateDamage3 GOOD");
log_to_file("addons/amxmodx/entity.txt", "EntityRemove PRE");
engfunc(EngFunc_RemoveEntity, ent);
log_to_file("addons/amxmodx/entity.txt", "EntityRemove GOOD");
return PLUGIN_CONTINUE;
}
-
KOTOKU
-
- Сообщения: 766
- Зарегистрирован: 10 фев 2013, 00:53
- Благодарил (а): 10 раз.
- Поблагодарили: 117 раз.
Grushka » 15 апр 2017, 22:21
KOTOKU писал(а):Прологируй этот участок кода, таким вот методом определишь функцию, где косяк
Лог будет в папке addons/amxmodx/entity.txt, можешь даже логи сюда скинуть
- Код: Выделить всё
public ExplodeMine(ent)
{
log_to_file("addons/amxmodx/entity.txt", "MakeEffect PRE");
MakeEffects(ent);
log_to_file("addons/amxmodx/entity.txt", "MakeEffect GOOD");
log_to_file("addons/amxmodx/entity.txt", "CreateDamage1 PRE");
CreateDamageInRadius(ent, 25.0, 300.0);
log_to_file("addons/amxmodx/entity.txt", "CreateDamage1 GOOD");
log_to_file("addons/amxmodx/entity.txt", "CreateDamage2 PRE");
CreateDamageInRadius(ent, 50.0, 150.0);
log_to_file("addons/amxmodx/entity.txt", "CreateDamage2 GOOD");
log_to_file("addons/amxmodx/entity.txt", "CreateDamage3 PRE");
CreateDamageInRadius(ent, 125.0, 80.0);
log_to_file("addons/amxmodx/entity.txt", "CreateDamage3 GOOD");
log_to_file("addons/amxmodx/entity.txt", "EntityRemove PRE");
engfunc(EngFunc_RemoveEntity, ent);
log_to_file("addons/amxmodx/entity.txt", "EntityRemove GOOD");
return PLUGIN_CONTINUE;
}
L 04/15/2017 - 21:24:13: Log file started (file "cstrike/addons/amxmodx/entity.txt") (game "cstrike") (amx "1.8.2-dev")
L 04/15/2017 - 21:24:13: MakeEffect PRE
L 04/15/2017 - 21:24:13: MakeEffect GOOD
L 04/15/2017 - 21:24:13: CreateDamage1 PRE
L 04/15/2017 - 21:24:13: CreateDamage1 GOOD
L 04/15/2017 - 21:24:13: CreateDamage2 PRE
L 04/15/2017 - 21:24:13: CreateDamage2 GOOD
L 04/15/2017 - 21:24:13: CreateDamage3 PRE
L 04/15/2017 - 21:24:13: CreateDamage3 GOOD
L 04/15/2017 - 21:24:13: EntityRemove PRE
L 04/15/2017 - 21:24:13: EntityRemove GOOD
Мне всё равно кажется причина в TakeDamagePre. Закомментирую эту функцию и всё ок - энтити взрывается по сценарию, но только уже другая проблема - тиммейты могут наносить урон ей[энтити]
-
Grushka
-
- Сообщения: 84
- Зарегистрирован: 13 июн 2013, 22:06
- Благодарил (а): 35 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Counter-Strike 1.6
-
KOTOKU » 15 апр 2017, 22:38
Убери damagebits == (1<<24) и проверь
-
KOTOKU
-
- Сообщения: 766
- Зарегистрирован: 10 фев 2013, 00:53
- Благодарил (а): 10 раз.
- Поблагодарили: 117 раз.
Grushka » 15 апр 2017, 22:41
KOTOKU писал(а):Убери damagebits == (1<<24) и проверь
Всё также
-
Grushka
-
- Сообщения: 84
- Зарегистрирован: 13 июн 2013, 22:06
- Благодарил (а): 35 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Counter-Strike 1.6
-
KOTOKU » 15 апр 2017, 22:43
эхх, так не хочется возиться..
Пиши в лс - разберёмся
-
KOTOKU
-
- Сообщения: 766
- Зарегистрирован: 10 фев 2013, 00:53
- Благодарил (а): 10 раз.
- Поблагодарили: 117 раз.
Fedcomp » 15 апр 2017, 22:47
Я конечно задам глупый вопрос, но без плагина все нормально работает?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.
"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
-
Fedcomp
-
- Сообщения: 4936
- Зарегистрирован: 28 авг 2009, 20:47
- Благодарил (а): 815 раз.
- Поблагодарили: 1317 раз.
- Языки программирования: =>
pawn / php / python / ruby
javascript / rust
Grushka » 15 апр 2017, 22:50
Fedcomp писал(а):Я конечно задам глупый вопрос, но без плагина все нормально работает?
По сути сам плагин себе проблемы и создаёт, своей же энтити
-
Grushka
-
- Сообщения: 84
- Зарегистрирован: 13 июн 2013, 22:06
- Благодарил (а): 35 раз.
- Поблагодарили: 0 раз.
- Языки программирования: Counter-Strike 1.6
-
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8