Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
Xey Apple))) » 09 июл 2017, 20:41
Всем привет.Собираю свой зомби сервер в кс 1.6. Занялся этим в первый раз и не чего не понимаю в скриптинге. С горя пополам нашел рабочий и не кривой плагин, который добавляет в магазин возможность докупить жизни (HP) ... В общем столкнулся с проблемой,что теперь любой игрок может купить бесконечное число жизни и быть бессмертным
Буду очень благодарен если поможете с этой проблемой, буду ждать ответа.
Вот исходник:
- Код: Выделить всё
new const item_name[] = "Buy 5000 HP!"
const g_item_cost = 25
new g_itemid_buyhp
new hpamount
new g_maxplayers, g_msgSayText
public plugin_init()
{
register_plugin("[ZP] Buy Health Points", "1.0", "STRELOK")
g_itemid_buyhp = zp_register_extra_item(item_name, g_item_cost, ZP_TEAM_ZOMBIE)
hpamount = register_cvar("zp_buyhp_amount", "5000")
g_msgSayText = get_user_msgid("SayText")
g_maxplayers = get_maxplayers()
}
public zp_extra_item_selected(id, itemid)
{
if (itemid != g_itemid_buyhp)
return;
set_user_health(id,get_user_health(id)+get_pcvar_num(hpamount))
zp_colored_print(id, "^x04[ZP]^x01 You Bought 5000 HP!")
}
zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;
static changed[5], changedcount changedcount = 0
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
-
Xey Apple)))
-
- Сообщения: 6
- Зарегистрирован: 09 июл 2017, 20:21
- Благодарил (а): 2 раз.
- Поблагодарили: 0 раз.
Xey Apple))) » 10 июл 2017, 11:37
нашёл вот такой гайд :
пробовал делать как написано не работает
- Код: Выделить всё
1.Делаем массив.
new limit - если нужно сделать общий лимит.
new limit[33] - если нужно сделать лимит для каждого игрока.
2.Использование.
Добавляем limit++ или limit[id]++ в конце функции покупки или использования чего либо.
3.Ограничение.
Добавляем в начале функции.
if(limit >= 5) - limit или limit[id], число 5 - это лимит использования
return
4.Обнуление.
1)Добавляем в plugin_init()
register_event("HLTV", "round_start", "a", "1=0", "2=0")
2)Добавляем функцию в конце плагина
public round_start()
{
for (new i = 1; i <= get_maxplayers(); i++) - для каждого игрока
{
limit[i] = 0
}
limit = 0 - для всех
}
-
Xey Apple)))
-
- Сообщения: 6
- Зарегистрирован: 09 июл 2017, 20:21
- Благодарил (а): 2 раз.
- Поблагодарили: 0 раз.
артист666 » 10 июл 2017, 12:48
Так ты покажи как делал.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
-
артист666
-
- Сообщения: 2706
- Зарегистрирован: 09 апр 2013, 17:46
- Благодарил (а): 284 раз.
- Поблагодарили: 639 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn
Xey Apple))) » 10 июл 2017, 13:37
я пробовал ,но файл не компилируется и происходят ошибки... хоть что то есть верное у меня ?
- Код: Выделить всё
new const item_name[] = "Купить [5000] HP"
const g_item_cost = 25
new g_itemid_buyhp
new hpamount
new g_maxplayers, g_msgSayText
new limit
public plugin_init()
{
register_plugin("[ZP] Buy Health Points", "1.0", "STRELOK")
register_event("HLTV", "round_start", "a", "1=0", "2=0")
g_itemid_buyhp = zp_register_extra_item(item_name, g_item_cost, ZP_TEAM_ZOMBIE)
hpamount = register_cvar("zp_buyhp_amount", "5000")
g_msgSayText = get_user_msgid("SayText")
g_maxplayers = get_maxplayers()
limit++
}
public zp_extra_item_selected(id, itemid)
{
if(limit >= 5) - limit
if (itemid != g_itemid_buyhp)
return;
set_user_health(id,get_user_health(id)+get_pcvar_num(hpamount))
zp_colored_print(id, "^x04[ZP]^x01 Вы купили [5000] HP")
}
zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;
static changed[5], changedcount changedcount = 0
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
public round_start()
{
for (new i = 1; i <= get_maxplayers(); i++)
{
limit[i] = 0
}
limit = 0
}
-
Xey Apple)))
-
- Сообщения: 6
- Зарегистрирован: 09 июл 2017, 20:21
- Благодарил (а): 2 раз.
- Поблагодарили: 0 раз.
RevCrew » 10 июл 2017, 13:48
Приблизительно так должно быть
- Код: Выделить всё
new const item_name[] = "Купить [5000] HP"
const g_item_cost = 25
new g_itemid_buyhp
new hpamount
new g_maxplayers, g_msgSayText
new limit[33]
public plugin_init()
{
register_plugin("[ZP] Buy Health Points", "1.0", "STRELOK")
register_event("HLTV", "round_start", "a", "1=0", "2=0")
g_itemid_buyhp = zp_register_extra_item(item_name, g_item_cost, ZP_TEAM_ZOMBIE)
hpamount = register_cvar("zp_buyhp_amount", "5000")
g_msgSayText = get_user_msgid("SayText")
g_maxplayers = get_maxplayers()
}
public client_authorized(id) limit[id] = 0;
public round_start()
{
for (new i = 1; i <= get_maxplayers(); i++)
{
limit[i] = 0;
}
}
public zp_extra_item_selected(id, itemid)
{
if(limit[id] >= MAX_HP_COUNT) return;
if (itemid != g_itemid_buyhp)
return;
set_user_health(id,get_user_health(id)+get_pcvar_num(hpamount))
zp_colored_print(id, "^x04[ZP]^x01 Вы купили [5000] HP")
limit[id] ++;
}
zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;
static changed[5], changedcount changedcount = 0
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
-
RevCrew
-
- Сообщения: 1648
- Зарегистрирован: 15 июл 2013, 20:45
- Благодарил (а): 273 раз.
- Поблагодарили: 357 раз.
- Языки программирования: Unkown
Xey Apple))) » 10 июл 2017, 14:09
к сожалению не работает( буду пробовать дальше
-
Xey Apple)))
-
- Сообщения: 6
- Зарегистрирован: 09 июл 2017, 20:21
- Благодарил (а): 2 раз.
- Поблагодарили: 0 раз.
артист666 » 10 июл 2017, 15:23
Уверен?
- Код: Выделить всё
А в zp_extra_item_selected не должно ничего возвращаться?
Просто если цена итема списывается в том же плагине, откуда сам форвард, тогда если игрок исчерпал лимит, с него будет списываться аммо(ну или какая там валюта), а сам предмет(хп) выдаваться не будет.
Наверное типа того:
- Код: Выделить всё
public zp_extra_item_selected(id, itemid)
{
if(itemid != g_itemid_buyhp) return PLUGIN_CONTINUE
if(limit[id] >= MAX_HP_COUNT) return ZP_PLUGIN_HANDLED
set_user_health(id, get_user_health(id) + get_pcvar_num(hpamount))
zp_colored_print(id, "^x04[ZP]^x01 Вы купили [5000] HP")
limit[id]++
return PLUGIN_CONTINUE
}
Ну и
- Код: Выделить всё
public round_start()
{
arrayset(limit, 0, sizeof(limit))
}
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
-
артист666
-
- Сообщения: 2706
- Зарегистрирован: 09 апр 2013, 17:46
- Благодарил (а): 284 раз.
- Поблагодарили: 639 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn
Xey Apple))) » 10 июл 2017, 17:28
вроде сделал всё, как описано ,но не компилируется (ошибки)
- Код: Выделить всё
new const item_name[] = "Купить [5000] HP"
const g_item_cost = 25
new g_itemid_buyhp
new hpamount
new g_maxplayers, g_msgSayText
new limit[33]
public plugin_init()
{
register_plugin("[ZP] Buy Health Points", "1.0", "STRELOK")
register_event("HLTV", "round_start", "a", "1=0", "2=0")
g_itemid_buyhp = zp_register_extra_item(item_name, g_item_cost, ZP_TEAM_ZOMBIE)
hpamount = register_cvar("zp_buyhp_amount", "5000")
g_msgSayText = get_user_msgid("SayText")
g_maxplayers = get_maxplayers()
}
public client_authorized(id) limit[id] = 0;
public round_start()
{
for (new i = 1; i <= get_maxplayers(); i++)
{
limit[i] = 0;
}
}
public round_start()
{
arrayset(limit, 0, sizeof(limit))
{
}
public zp_extra_item_selected(id, itemid)
{
if (itemid != g_itemid_buyhp) return PLUGIN_CONTINUE
if(limit[id] >= MAX_HP_COUNT) return ZP_PLUGIN_HANDLED
set_user_health(id,get_user_health(id)+get_pcvar_num(hpamount))
zp_colored_print(id, "^x04[ZP]^x01 Вы купили [5000] HP")
limit[id]++
return PLUGIN_CONTINUE
}
zp_colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount
argscount = numargs()
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
if (!is_user_connected(player))
continue;
static changed[5], changedcount changedcount = 0
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
else
{
vformat(buffer, charsmax(buffer), message, 3)
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
Добавлено спустя 34 минуты 12 секунд:можно в личку или здесь цену?во сколько обойдется по деньгам если вы исправите
-
Xey Apple)))
-
- Сообщения: 6
- Зарегистрирован: 09 июл 2017, 20:21
- Благодарил (а): 2 раз.
- Поблагодарили: 0 раз.
артист666 » 10 июл 2017, 20:00
2 функции round_start, ту надо было удалить.
+ скобку оставил после arayset.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
-
артист666
-
- Сообщения: 2706
- Зарегистрирован: 09 апр 2013, 17:46
- Благодарил (а): 284 раз.
- Поблагодарили: 639 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20