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

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

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

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

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

teleport_smokegren

, [Вопрос]
Статус пользователя shad
сообщение 4.6.2014, 13:55
Сообщение #1


Стаж: 11 лет

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

Привет всем. Поставил плагин teleport_smokegren, но когда кидаешь дымовую гранату, вместо того, чтоб тебя тпшнуло - падает сервер. Кто знает, как это фиксится?
Скрытый текст
/* AMX Mod X
* Teleport Smoke Grenade
*
* © Copyright 2006 by VEN
*
* This file is provided as is (no warranties)
*
* DESCRIPTION
* Plugin changes the smoke grenade to teleport grenade with a bit of smoke.
* Usage: drop the grenade, you will be teleported to the spot of explosion.
* Try to crouch if the height of the spot are small for uncrouched player.
*
* CREDITS
* Dread Pirate - idea
*/

#include <amxmodx>
#include <fakemeta>

#define PLUGIN_NAME "Teleport Smoke Grenade"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"

#define SMOKE_SCALE 30
#define SMOKE_FRAMERATE 12
#define SMOKE_GROUND_OFFSET 6

// do not edit
new const g_sound_explosion[] = "weapons/sg_explode.wav"
new const g_classname_grenade[] = "grenade"

new const Float:g_sign[4][2] = {{1.0, 1.0}, {1.0, -1.0}, {-1.0, -1.0}, {-1.0, 1.0}}

new g_spriteid_steam1
new g_eventid_createsmoke

public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

register_forward(FM_EmitSound, "forward_emitsound")
register_forward(FM_PlaybackEvent, "forward_playbackevent")

// we do not precaching, but retrieving the indexes
g_spriteid_steam1 = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr")
g_eventid_createsmoke = engfunc(EngFunc_PrecacheEvent, 1, "events/createsmoke.sc")
}

public forward_emitsound(ent, channel, const sound[]) {
if (!equal(sound, g_sound_explosion) || !is_grenade(ent))
return FMRES_IGNORED

static id, Float:origin[3]
id = pev(ent, pev_owner)
pev(ent, pev_origin, origin)
engfunc(EngFunc_EmitSound, ent, CHAN_WEAPON, g_sound_explosion, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
engfunc(EngFunc_RemoveEntity, ent)
origin[2] += SMOKE_GROUND_OFFSET
create_smoke(origin)

if (is_user_alive(id)) {
static Float:mins[3], hull
pev(id, pev_mins, mins)
origin[2] -= mins[2] + SMOKE_GROUND_OFFSET
hull = pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
if (is_hull_vacant(origin, hull))
engfunc(EngFunc_SetOrigin, id, origin)
else { // close to a solid object, trying to find a vacant spot
static Float:vec[3]
vec[2] = origin[2]
for (new i; i < sizeof g_sign; ++i) {
vec[0] = origin[0] - mins[0] * g_sign[i][0]
vec[1] = origin[1] - mins[1] * g_sign[i][1]
if (is_hull_vacant(vec, hull)) {
engfunc(EngFunc_SetOrigin, id, vec)
break
}
}
}
}

return FMRES_SUPERCEDE
}

public forward_playbackevent(flags, invoker, eventindex) {
// we do not need a large amount of smoke
if (eventindex == g_eventid_createsmoke)
return FMRES_SUPERCEDE

return FMRES_IGNORED
}

bool:is_grenade(ent) {
if (!pev_valid(ent))
return false

static classname[sizeof g_classname_grenade + 1]
pev(ent, pev_classname, classname, sizeof g_classname_grenade)
if (equal(classname, g_classname_grenade))
return true

return false
}

create_smoke(const Float:origin[3]) {
// engfunc because origin are float
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, origin, 0)
write_byte(TE_SMOKE)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_short(g_spriteid_steam1)
write_byte(SMOKE_SCALE)
write_byte(SMOKE_FRAMERATE)
message_end()
}

stock bool:is_hull_vacant(const Float:origin[3], hull) {
new tr = 0
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr)
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true

return false
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Gabro
сообщение 4.6.2014, 14:01
Сообщение #2


Стаж: 11 лет

Сообщений: 94
Благодарностей: 77
Полезность: 67

тпшнуло? это как?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
ham1k
сообщение 4.6.2014, 14:03
Сообщение #3
Стаж: 12 лет

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

Цитата(Gabro @ 4.6.2014, 14:01) *
тпшнуло? это как?

телепорт ..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Gabro
сообщение 4.6.2014, 14:04
Сообщение #4


Стаж: 11 лет

Сообщений: 94
Благодарностей: 77
Полезность: 67

давайте логи сервера
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя shad
сообщение 4.6.2014, 14:04
Сообщение #5


Стаж: 11 лет

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

Чекал по форуму решение проблем, нашёл одно

Цитата(MrILYAS @ 28.9.2013, 4:31) *
Ошибка которая заставляет падать сервер возникает когда плагин пытается удалить entity (гильзу от гранаты) после её взрыва.
Хотя в этом нет особой необходимости ведь оно само исчезает спустя несколько секунд.

Решение: удалить строку Код:
engfunc(EngFunc_RemoveEntity,ent)

И сервер перестанет падать. Что я и сделал.

Все на сервере довольны.


Но не помогает.

Когда граната залетает в какой ни будь стык, то сервер падает
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя shad
сообщение 4.6.2014, 14:13
Сообщение #6


Стаж: 11 лет

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

Цитата(Gabro @ 4.6.2014, 14:04) *
давайте логи сервера


за сегодня несколько логов с ошибками, но именно с этим плагином не наблюдается, что делать?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
serfreeman1337
сообщение 4.6.2014, 14:14
Сообщение #7
Стаж: 13 лет

Сообщений: 912
Благодарности: выкл.

Замени:
Код:
{ // close to a solid object, trying to find a vacant spot
static Float:vec[3]
vec[2] = origin[2]

for (new i; i < sizeof g_sign; ++i) {
vec[0] = origin[0] - mins[0] * g_sign[i][0]
vec[1] = origin[1] - mins[1] * g_sign[i][1]
if (is_hull_vacant(vec, hull)) {
engfunc(EngFunc_SetOrigin, id, vec)
break
}
}
}

На:
Код:
{
ExecuteHamB(Ham_TakeDamage,id,0,0,1000.0,DMG_CRUSH)
}


И добавь в шапку плагина:
Код:
#include <hamsandwich>
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sweet
сообщение 4.6.2014, 14:16
Сообщение #8
Стаж: 15 лет

Сообщений: 1920
Благодарностей: 597
Полезность: 431

Цитата(Gabro @ 4.6.2014, 16:01) *
тпшнуло? это как?


Тпшкой становишься.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя shad
сообщение 4.6.2014, 14:28
Сообщение #9


Стаж: 11 лет

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

Цитата(serfreeman1337 @ 4.6.2014, 14:14) *
Замени:
Код:
{ // close to a solid object, trying to find a vacant spot
static Float:vec[3]
vec[2] = origin[2]

for (new i; i < sizeof g_sign; ++i) {
vec[0] = origin[0] - mins[0] * g_sign[i][0]
vec[1] = origin[1] - mins[1] * g_sign[i][1]
if (is_hull_vacant(vec, hull)) {
engfunc(EngFunc_SetOrigin, id, vec)
break
}
}
}

На:
Код:
{
ExecuteHamB(Ham_TakeDamage,id,0,0,1000.0,DMG_CRUSH)
}


И добавь в шапку плагина:
Код:
#include <hamsandwich>


заменил как ты написал, всё ровно, кинул дым в угол и сервер упал.


Скрытый текст
Wed Jun 4 16:25:57 2014 [pid 18521] [cs16-50410a] OK UPLOAD: Client "95.30.209.238", "/addons/amxmodx/scripting/teleport_smokegren.sma", 3322 bytes, 106.87Kbyte/sec
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: