|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
|
player_spawn+set_user_gravity=runtime error 10
|
|
| bohdan4ik | Дата: Пятница, 30.10.2009, 18:09:52 | Сообщение # 1 |
|
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Не в сети
| Здравствуйте, ув. форумчане! Пришел к вам с боольшой такой проблемкой: Есть плагин (самописный, ессесн) в нем обрабатывается событие возрождения игрока: plugin_init: Code register_event("ResetHUD", "player_spawn", "be") (илиCode RegisterHam(Ham_Spawn, "player", "player_spawn", 1) но результат тот же) Код player_spawn: Code public player_spawn(id) { if (g_PlayerSomeFlag[id]) { set_user_gravity(id, get_user_gravity(id) - get_user_gravity(id) * 0.5) // doesn't work's set_user_rendering(id, kRenderGlow, 200, 255, 200, kRenderFxHologram, 25) // doesn't work's set_user_health(id, get_user_health(id) * 2) // doesn't work's if (!zp_get_user_zombie(id)) { set_user_footsteps(id, 1) // this work's cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM) // this work's } } return PLUGIN_CONTINUE } Почему бронь/бесшумные шаги выставляет, а гравитацию/отображение/жизни - нет? З.Ы.: Время от времени все нормально, что меня и вводит в ступор. upd: Блин, и броню не всегда дает =\

Сообщение отредактировал bohdan4ik - Пятница, 30.10.2009, 18:37:40 |
| |
|
|
| AnOrangeJuice | Дата: Пятница, 30.10.2009, 20:38:05 | Сообщение # 2 |
|
Лейтенант
Группа: Пользователи
Сообщений: 62
Статус: Не в сети
| лучше ham_spawn, чем resetHUD Code public player_spawn(id) { if (g_PlayerSomeFlag[id]) { set_user_gravity(id, 0.75) set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,160) set_user_health(id, 200) if (!zp_get_user_zombie(id)) { set_user_footsteps(id, 1) // this work's cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM) // this work's } } return PLUGIN_CONTINUE } если надо glow, то замени строку с set_user_rendering на эту: Code set_user_rendering(id,kRenderFxGlowShell,200,255,200,kRenderNormal,25)
Сообщение отредактировал AnOrangeJuice - Пятница, 30.10.2009, 20:42:13 |
| |
|
|
| bohdan4ik | Дата: Пятница, 30.10.2009, 21:53:15 | Сообщение # 3 |
|
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Не в сети
| AnOrangeJuice, вы, вероятно, немного не поняли: amx выдает ошибку времени исполнения с кодом 10, что значит "неверный игрок" Quote L 10/30/2009 - 21:52:41: [FUN] Invalid player 1 L 10/30/2009 - 21:52:41: [AMXX] Displaying debug trace (plugin "some_plugin.amxx") L 10/30/2009 - 21:52:41: [AMXX] Run time error 10: native error (native "set_user_gravity") L 10/30/2009 - 21:52:41: [AMXX] [0] some_plugin.sma::player_spawn (line 82) З.Ы.: Мне уже начинает казаться, что у меня какой-то заколдованный amx/hlds...

Сообщение отредактировал bohdan4ik - Пятница, 30.10.2009, 22:05:46 |
| |
|
|
| NiHiLaNTh | Дата: Пятница, 30.10.2009, 22:37:57 | Сообщение # 4 |
|
Рядовой
Группа: Пользователи
Сообщений: 6
Статус: Не в сети
| в player_spawn ( id ) ты не делаешь проверки Code if ( !is_user_alive ( id ) || !is_user_connected ( id )) return
|
| |
|
|
| AnOrangeJuice | Дата: Пятница, 30.10.2009, 22:45:10 | Сообщение # 5 |
|
Лейтенант
Группа: Пользователи
Сообщений: 62
Статус: Не в сети
| Quote (NiHiLaNTh) в player_spawn ( id ) ты не делаешь проверки автор сам бы додумался мб -_-
|
| |
|
|
| bohdan4ik | Дата: Пятница, 30.10.2009, 23:29:08 | Сообщение # 6 |
|
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Не в сети
| Quote (NiHiLaNTh) в player_spawn ( id ) ты не делаешь проверки Code if ( !is_user_alive ( id ) || !is_user_connected ( id )) return Ну, начнем с того, что бронь выдает. И флаги у нас "be", в случае с ResetHUD (при указании флага "e", если вы не знаете, событие будет обработано только когда пользователь будет доступен, следовательно, зачем несколько раз повторять одну и ту же процедуру?). Quote (AnOrangeJuice) Quote (NiHiLaNTh) в player_spawn ( id ) ты не делаешь проверки автор сам бы додумался мб -_- Пробовал еще до создания темы (почему я ее и создал, этот amxmodx не укладывается в мое сознание, особенно если учесть скудную документацию). Результат тот же. З.Ы.: return в функции должен быть один и только один. Читаем good coding style guides.

|
| |
|
|
| AnOrangeJuice | Дата: Суббота, 31.10.2009, 01:40:01 | Сообщение # 7 |
|
Лейтенант
Группа: Пользователи
Сообщений: 62
Статус: Не в сети
| Quote З.Ы.: return в функции должен быть один и только один. Читаем good coding style guides. да ты чоооооооо O__O Code RegisterHam(Ham_Spawn, "player", "player_spawn", 1) Code public player_spawn(id) { if (is_user_alive(id), g_PlayerSomeFlag[id]) { set_user_gravity(id, 0.75) set_user_rendering(id,kRenderFxGlowShell,200,255,200,kRenderNormal,25) set_user_health(id, 200) if (!zp_get_user_zombie(id)) { //set_user_footsteps(id, 1) cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM) } } return PLUGIN_CONTINUE }
Сообщение отредактировал AnOrangeJuice - Суббота, 31.10.2009, 01:43:56 |
| |
|
|
| bohdan4ik | Дата: Суббота, 31.10.2009, 09:51:42 | Сообщение # 8 |
|
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Не в сети
| Простите, но читать чужие посты уже не модно, да?Quote (bohdan4ik) Пробовал еще до создания темы (почему я ее и создал, этот amxmodx не укладывается в мое сознание, особенно если учесть скудную документацию). Результат тот же. Пришел за советом, блин...

|
| |
|
|
| PomanoB | Дата: Суббота, 31.10.2009, 11:27:17 | Сообщение # 9 |
 Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Поставь set_task на 0.1 секунды
http://romanov4400.mybrute.com
|
| |
|
|
| bohdan4ik | Дата: Суббота, 31.10.2009, 12:42:00 | Сообщение # 10 |
|
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Не в сети
| Quote (PomanoB) Поставь set_task на 0.1 секунды Не поверите, ждал этого ответа. Спасибо, первый ответ по существу. Но, увы... Code new g_TaskID
public plugin_init() { register_plugin("Some module", "0.1", "bohdan4ik") RegisterHam(Ham_Spawn, "player", "player_spawn_task", 1) // register_event("CurWeapon", "player_spawn", "be") // Если реагировать на смену оружия, то все, падла, выставляет >_< }
public player_spawn_task(id) { new args[1] args[0] = id set_task(0.5, "player_spawn", g_TaskID, args, 1) // Мб, я что-то не так понимаю? g_TaskID += 1 }
public player_spawn(id) { if (is_user_alive(id)) { set_user_gravity(id, 0.5) client_print(id, print_chat, "Fck u, Billy, twice!") // Дело делает, но гравитация стандартная >_< } return PLUGIN_CONTINUE } З.Ы.: Я вот сейчас думаю: может, основать пока плагин на CurWeapon, а потом уже, в лучшие времена, поломать еще мозг и сделать, все-таки, по-человечески? Просто сил нет уже, если бы мозг мог высохнуть, то он бы и высох >_< З.З.Ы.: Под действие бонусов будут попадать 2-3 человека, максимум, так что, не думаю, что нагрузка окажется намного выше, чем обычно.

|
| |
|
|
| PomanoB | Дата: Суббота, 31.10.2009, 13:14:12 | Сообщение # 11 |
 Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Code public player_spawn_task(id) { set_task(0.5, "player_spawn", id) }
http://romanov4400.mybrute.com
|
| |
|
|
| bohdan4ik | Дата: Суббота, 31.10.2009, 13:29:22 | Сообщение # 12 |
|
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Не в сети
| Quote (PomanoB) Code public player_spawn_task(id) { set_task(0.5, "player_spawn", id) } Чудеса, блин, науки и техники =\ Только что набрел на этот пример в вики, но так и не смог понять: почему мы вставляем id игрока на место, где должен располагаться, согласно документации, уникальный идентификатор задания?.. Мой мозг... Мой бедный мозг... upd: Да, работает. Вы сохранили мне еще несколько миллионов нервных клеток upd1: Не то, что некоторые, блин...

Сообщение отредактировал bohdan4ik - Суббота, 31.10.2009, 13:42:06 |
| |
|
|
| PomanoB | Дата: Суббота, 31.10.2009, 14:55:07 | Сообщение # 13 |
 Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Потому что первым параметром в функцию таска передается его уникальный номер) И, кстати, номер не обязан быть уникальным
http://romanov4400.mybrute.com
|
| |
|
|
| bohdan4ik | Дата: Суббота, 31.10.2009, 15:03:01 | Сообщение # 14 |
|
Рядовой
Группа: Пользователи
Сообщений: 10
Статус: Не в сети
| Quote (PomanoB) Потому что первым параметром в функцию таска передается его уникальный номер) Тьфу, блин, я имел такое подозрение, но лень было что-либо проверять (точнее проверял, но, видимо, кол-ва игроков было недостаточно для вычисления "бага" ). Надеялся, что тут действуют те же правила, что и в "нормальных" ЯП) Quote (PomanoB) И, кстати, номер не обязан быть уникальным А вот эта фраза ввела меня в ступор, ибо это прямая противоположность того, что я прочитал в документации)

|
| |
|
|
| PomanoB | Дата: Суббота, 31.10.2009, 16:30:20 | Сообщение # 15 |
 Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Я про то, что не будет никаких конфликтов, ошибок, если сделать два таска с одним идентификатором.
http://romanov4400.mybrute.com
|
| |
|
|
 | AMX Mod X Russian Community © 2006-2026  |  |
|
| |