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

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

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

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

Помощь с выдачей функции правильно.

, На RuneMod-е
Статус пользователя CH0CAPIC
сообщение 28.8.2014, 14:55
Сообщение #1


Стаж: 12 лет

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

Здравствуйте. Нужна помощь с плагином RuneMod-а runemod_chicken. Я выдал способность курице, чтобы она не могла бы взять оружие. Вещь то сработала, но оружие не может взять не только курица, но и все остальные, чего быть не должно. Можете поправить код так, чтобы оружие не могла брать только курица, а все остальные игроки могли. Заранее благодарен.

Код:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include "runemod.inc" // We need to include this file, as it contains info we need. Like #define`s and stocks

#define m_iPrimaryWeapon 116

new g_HasRune[MAXPLAYERS+1]
new g_MaxPlayers
new g_BlockWeapons

public plugin_init()
{
register_plugin("RuneMod Chicken", "1.0.0", "AdogeN")
g_MaxPlayers = get_maxplayers()
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
RegisterHam(Ham_Touch, "weapon_hegrenade", "player_touchweapon")
RegisterHam(Ham_Touch, "weaponbox", "player_touchweapon")
RegisterHam(Ham_Touch, "armoury_entity", "player_touchweapon")
RegisterPlugin("ChickenName","ChickenDisc",{220,220,0},API_ROUNDSTARTED+API_EVENTCHANGEWEAPON+API_USELANGSYSTEM+API_B
ADRUNE)
}

public API_CurWeaponChange(id, ent)
{
if(g_HasRune[id] == 1)
{
player_strip_weapons(id)
}
return PLUGIN_CONTINUE
}
// This function is used base plugin to inform this plugin that a user has picked up the rune.
public API_PickUpRune(id)
{
g_HasRune[id] = 1
g_BlockWeapons = 1
cs_set_user_model(id, "amonster3")
player_strip_weapons(id)
if(cs_get_user_team(id)==CS_TEAM_T)
{
set_rendering(id,kRenderFxGlowShell,150,0,0,kRenderTransAlpha,255)
}
else
{
set_rendering(id,kRenderFxGlowShell,0,0,150,kRenderTransAlpha,255)
}
new tclip, tammo
new weapon = get_user_weapon(id,tclip,tammo)
if(weapon == CSW_KNIFE){
entity_set_string(id, EV_SZ_viewmodel, "models/knife/v_tot.mdl")
entity_set_string(id, EV_SZ_weaponmodel, "models/knife/p_tot.mdl")
}
}

public API_RoundStarted()
{
for(new i=1;i<=g_MaxPlayers;i++) if(g_HasRune[i])
{
API_PickUpRune(i)
}
}

public Event_CurWeapon(id)
{
if (!is_user_alive(id) || g_HasRune[id] == 0) {
return PLUGIN_CONTINUE
}

new weapon = read_data(2)
if(weapon == CSW_KNIFE){
entity_set_string(id, EV_SZ_viewmodel, "models/knife/v_tot.mdl")
entity_set_string(id, EV_SZ_weaponmodel, "models/knife/p_tot.mdl")
}
return PLUGIN_CONTINUE
}

public player_touchweapon(id, ent)
{
static model[32], class[32]

if(g_BlockWeapons)
return HAM_SUPERCEDE

if(is_valid_ent(id) && g_HasRune[ent] == 1 && is_user_alive(ent))
{
entity_get_string(id, EV_SZ_model, model, charsmax(model))
if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')
{
entity_get_string(id, EV_SZ_classname, class, charsmax(class))
if(equal(class, "weapon_hegrenade"))
remove_entity(id)

return HAM_SUPERCEDE
}

}

return HAM_IGNORED
}

public plugin_precache() {
precache_model("models/player/amonster3/amonster3.mdl")
precache_model("models/knife/v_tot.mdl")
precache_model("models/knife/p_tot.mdl")
}

public API_DropedRune(id,Reason) //This function is called by the base plugin to inform about the user droped his rune for whatever reason ( he could have used droprune or died )
{
g_HasRune[id] = 0
g_BlockWeapons = 0
cs_reset_user_model(id)
set_rendering(id,kRenderFxNone,0,0,0,kRenderTransAlpha,255)
}

stock player_strip_weapons(id)
{
strip_user_weapons(id)
give_item(id, "weapon_knife")
set_pdata_int(id, m_iPrimaryWeapon, 0)
}


ps.gif На всякий случайный выкладываю инклад RuneMod-а.

Отредактировал: CH0CAPIC, - 28.8.2014, 14:59
Прикрепленные файлы:
Прикрепленный файл  runemod.rar ( 2,56 килобайт ) Кол-во скачиваний: 6
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Stimul1
сообщение 28.8.2014, 15:28
Сообщение #2


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

Бегло прошелся по коду, попробуй убрать:
Код:
if(g_BlockWeapons)
return HAM_SUPERCEDE


Отредактировал: Stimul1, - 28.8.2014, 15:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 28.8.2014, 15:41
Сообщение #3


Стаж: 12 лет

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

Цитата(Stimul1 @ 28.8.2014, 14:28) *
Бегло прошелся по коду, попробуй убрать:
Код:
if(g_BlockWeapons)
return HAM_SUPERCEDE

Уже пробовал, в результате отключается вся функция.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fintok
сообщение 28.8.2014, 17:10
Сообщение #4


Стаж: 16 лет

Сообщений: 756
Благодарностей: 294
Полезность: 638

CH0CAPIC,
Код:
new g_BlockWeapons
--->
Код:
new g_BlockWeapons[MAXPLAYERS+1]


Код:
g_BlockWeapons
--->
Код:
g_BlockWeapons[id]
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 28.8.2014, 17:39
Сообщение #5


Стаж: 12 лет

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

Цитата(Fintok @ 28.8.2014, 16:10) *
CH0CAPIC,
Код:
new g_BlockWeapons
--->
Код:
new g_BlockWeapons[MAXPLAYERS+1]


Код:
g_BlockWeapons
--->
Код:
g_BlockWeapons[id]

Сделал как вы сказали, но теперь сразу же в начале раунда я не могу взять выброшенное оружие, а также плагин начал ругаться:

Код
L 08/28/2014 - 19:35:32: [AMXX] Run time error 4: index out of bounds
L 08/28/2014 - 19:35:32: [AMXX]    [0] runemod_chicken.sma::player_touchweapon (line 84)


84 линия:

Код:
if(g_BlockWeapons[id])
return HAM_SUPERCEDE


Отредактировал: CH0CAPIC, - 28.8.2014, 17:40
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 28.8.2014, 18:12
Сообщение #6


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

кто такая курица?
это игрок?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 28.8.2014, 18:13
Сообщение #7


Стаж: 12 лет

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

Цитата(Legenda @ 28.8.2014, 17:12) *
кто такая курица?
это игрок?

Да, просто ему выдаётся моделька.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 28.8.2014, 18:20
Сообщение #8


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

возможно надо так:
public player_touchweapon(ent,id)
update
точнее у тебя в плагине косяк маленький

в коде ниже
id - это объект на земле, какое-то оружие выкинутое игроком либо расставленное на карте
ent - это игрок
из-за этого ты путаешься кто и чем тут является...
перепиши правильно...
что бы под ent был объект
а под id был игрок...
Код:
public player_touchweapon(id, ent)
{
static model[32], class[32]

if(g_BlockWeapons)
return HAM_SUPERCEDE

if(is_valid_ent(id) && g_HasRune[ent] == 1 && is_user_alive(ent))
{
entity_get_string(id, EV_SZ_model, model, charsmax(model))
if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')
{
entity_get_string(id, EV_SZ_classname, class, charsmax(class))
if(equal(class, "weapon_hegrenade"))
remove_entity(id)

return HAM_SUPERCEDE
}

}

return HAM_IGNORED
}


грубо говоря сделай замену
ent => pid
id => ent
а остальное как Fintok сказал выше
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 28.8.2014, 18:39
Сообщение #9


Стаж: 12 лет

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

Цитата(Legenda @ 28.8.2014, 17:20) *
возможно надо так:
public player_touchweapon(ent,id)
update
точнее у тебя в плагине косяк маленький

в коде ниже
id - это объект на земле, какое-то оружие выкинутое игроком либо расставленное на карте
ent - это игрок
из-за этого ты путаешься кто и чем тут является...
перепиши правильно...
что бы под ent был объект
а под id был игрок...
Код:
public player_touchweapon(id, ent)
{
static model[32], class[32]

if(g_BlockWeapons)
return HAM_SUPERCEDE

if(is_valid_ent(id) && g_HasRune[ent] == 1 && is_user_alive(ent))
{
entity_get_string(id, EV_SZ_model, model, charsmax(model))
if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')
{
entity_get_string(id, EV_SZ_classname, class, charsmax(class))
if(equal(class, "weapon_hegrenade"))
remove_entity(id)

return HAM_SUPERCEDE
}

}

return HAM_IGNORED
}


грубо говоря сделай замену
ent => pid
id => ent
а остальное как Fintok сказал выше

Большое спасибо, в этом была главная проблема, но вот плагин всё равно продолжает ругаться... (сведения выше)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 28.8.2014, 18:40
Сообщение #10


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

покажи то, что в итоге получилось...
лучше как файл в архиве...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 28.8.2014, 18:41
Сообщение #11


Стаж: 12 лет

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

Цитата(Legenda @ 28.8.2014, 17:40) *
покажи то, что в итоге получилось...

Код:
public player_touchweapon(ent, id)
{
static model[32], class[32]

if(g_BlockWeapons[id])
return HAM_SUPERCEDE

if(is_valid_ent(ent) && g_HasRune[id] && is_user_alive(id))
{
entity_get_string(id, EV_SZ_model, model, charsmax(model))
if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')
{
entity_get_string(id, EV_SZ_classname, class, charsmax(class))
if(equal(class, "weapon_hegrenade"))
remove_entity(ent)

return HAM_SUPERCEDE
}

}

return HAM_IGNORED
}

не стал добавлять pid, всего навсего поменял местами id и ent, как вы сказали.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 28.8.2014, 18:43
Сообщение #12


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

а тут забыл?

entity_get_string(id, EV_SZ_model, model, charsmax(model))
и еще
entity_get_string(id, EV_SZ_classname, class, charsmax(class))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 28.8.2014, 19:14
Сообщение #13


Стаж: 12 лет

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

Цитата(Legenda @ 28.8.2014, 17:43) *
а тут забыл?

entity_get_string(id, EV_SZ_model, model, charsmax(model))
и еще
entity_get_string(id, EV_SZ_classname, class, charsmax(class))

Сделал, как вы сказали, но всё же выдаёт ошибку, вот полный код.
Прикрепленные файлы:
Прикрепленный файл  runemod_chicken.sma ( 3,29 килобайт ) Кол-во скачиваний: 6
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Stimul1
сообщение 28.8.2014, 19:43
Сообщение #14


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

Всю функцию замени на:
Код
public player_touchweapon(ent, id)
{
    if(is_valid_ent(ent) && is_user_alive(id))
    {
        if(g_BlockWeapons[id])
            return HAM_SUPERCEDE
        
        if(g_HasRune[id])
        {
            static model[32], class[32]
            entity_get_string(ent, EV_SZ_model, model, charsmax(model))
            
            if(model[7] == 'w' && model[9] == 'h' && model[10] == 'e' && model[11] == 'g')
            {
                entity_get_string(ent, EV_SZ_classname, class, charsmax(class))
                if(equal(class, "weapon_hegrenade"))
                    remove_entity(ent)

                return HAM_SUPERCEDE
            }

        }
    }
    return HAM_IGNORED
}


Отредактировал: Stimul1, - 28.8.2014, 19:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: