|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
roll
|
|
HoRRoR | Дата: Суббота, 27.06.2009, 20:27:47 | Сообщение # 1 |
Полковник
Группа: Скриптеры
Сообщений: 181
Статус: Не в сети
| Возникла такая ситуация... ZP мод, долго не было режима немезис. Я админ предлагаю стартовать режим вручную. игроки согласны и возникает вопрос, кого сделать немезисом? Много кто-хочет им побыть. Вспомнив аналогию /roll из World of Warcraft решил сначала поискать такой плагин, ну а т.к. его не было, решил сделать сам. Этой мой первый плагин, поэтому прошу не пинать ногами а помочь, где надо Комманды (вводятся в чате): - Для всех: /roll - вывод случайного число от 1 до 100. Аналог выбрасывания костей. Причем все видят, кто сколько выбросил. - Для админа: /endroll - закончить ролл. Т.е. бывает не уследить за чатом, кто сколько выбросил. Эта комманда показыват имя победителя и сколько он выбросил. /resetroll - Позволяет игрокам начать ролл заново, т.к. за раунд допускается только один /roll. /playerroll - выводит имя случайного игрока. Список изменений: 0.2 - первый релиз 0.3 - добавил мультиязычность (EN & RU)
Сообщение отредактировал HoRRoR - Понедельник, 29.06.2009, 13:55:38 |
|
| |
PomanoB | Дата: Суббота, 27.06.2009, 21:04:19 | Сообщение # 2 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Идея плагин мне понравилась, молодец Несколько замечаний: Code public client_putinserver(id) { get_user_name(id,name,32) g_rolled[id] = 0 rolldata[id] = 0 } Не совсем понятно зачем надо запоминать имя последнего присоединившегося игрока) Не понятно зачем нужна переменная rolldataall Чтобы не вводить массив rolldata, можно запоминать что выпало в g_rolled, тогда if ( g_rolled[id]) уже бросал else бросить Code g_rollwinnerscore = rolldata[0] for (new j = 0; j < 33; j++) { if( rolldata[j] > g_rollwinnerscore ) { g_rollwinnerscore = rolldata[j] get_user_name(j,name,32) } } Не совсем оптимально написано, зачем столько раз получать имя Code new winner = 0 for (new i = 1; i < 33; i++) { if (rolldata [i] > rolldata[winner]) { winner = i } } get_user_name(winner, name, 31) Это не придирки, просто советы по оптимизации Добавлено (2009-06-27, 9:04 Pm) --------------------------------------------- Про цветной чат: Code new text[100] format(text,99,"^x04Зелёный^x01Нормальный цвет^x03Цвет команды") message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id) write_byte(id) write_string(text) message_end() То есть надо предварять текст перфиксами ^x04 - Зелёный, и тд
http://romanov4400.mybrute.com
|
|
| |
HoRRoR | Дата: Суббота, 27.06.2009, 21:09:18 | Сообщение # 3 |
Полковник
Группа: Скриптеры
Сообщений: 181
Статус: Не в сети
| я и не считаю придирками я вобще не ожидал что сам смогу что-то написать Добавлено (2009-06-27, 9:09 Pm) --------------------------------------------- насчет текста неочень понял. как мне выводить сообщение всем, только одному игроку. и как оО
|
|
| |
ZETA | Дата: Суббота, 27.06.2009, 21:12:26 | Сообщение # 4 |
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Статус: Не в сети
| Quote (PomanoB) Не совсем оптимально написано, зачем столько раз получать имя Имя же получается только один раз, при удовлетворении условия?
Говори что думаешь и думай что говоришь...
|
|
| |
PomanoB | Дата: Суббота, 27.06.2009, 21:29:24 | Сообщение # 5 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Quote (ZETA) Имя же получается только один раз Да, один раз самого удачливого игрока) Quote (ZETA) как мне выводить сообщение всем, только одному игроку. и как оО Для одного игрока так как я показал, при этом id - это и есть тот игрок которому покажется сообщение Для всех игроков надо изменить на message_begin(MSG_ALL, get_user_msgid("SayText"), {0,0,0}, id) При этом id должно быть индексом реально присутствующего на сервере игрока, но не нулём
http://romanov4400.mybrute.com
|
|
| |
ZETA | Дата: Суббота, 27.06.2009, 21:39:04 | Сообщение # 6 |
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Статус: Не в сети
| А почему вторая цитата моя? Второй вопрос не мой
Говори что думаешь и думай что говоришь...
|
|
| |
PomanoB | Дата: Суббота, 27.06.2009, 21:56:02 | Сообщение # 7 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Не знаю, форум так поставил, я внимания не обратил)
http://romanov4400.mybrute.com
|
|
| |
HoRRoR | Дата: Суббота, 27.06.2009, 23:01:02 | Сообщение # 8 |
Полковник
Группа: Скриптеры
Сообщений: 181
Статус: Не в сети
| хорошо, допустим в message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id), SayText - это мой текст. но в client_print(0, print_chat, " ''%s'' rolled the %d.",name,rolldataall) мы задаем значения name и rolldataall через %s и %d. а как теперь указывать? я про где какой значение подставлять
Сообщение отредактировал HoRRoR - Суббота, 27.06.2009, 23:01:23 |
|
| |
defaultNick8433 | Дата: Суббота, 27.06.2009, 23:31:48 | Сообщение # 9 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Статус: Не в сети
| Code new text[100] format(text,99,"^x04 %s rolled the ^x04 %d",name,rolldataall) message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id) write_byte(id) write_string(text) message_end() Не так уж и сложно,правда?
Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
|
|
| |
HoRRoR | Дата: Воскресенье, 28.06.2009, 11:20:25 | Сообщение # 10 |
Полковник
Группа: Скриптеры
Сообщений: 181
Статус: Не в сети
| во, теперь всё понятно! спс! Добавлено (2009-06-28, 11:20 Am) --------------------------------------------- всё равно не работает цвет. ^x04 к примеру выглядят в игре как четыре пробелла. еще аопрос кстати: как скрыть сообщение в чате? т.е. например чтобы когда пишешь /roll, в чат это не писалось дабы не засорять чат
|
|
| |
defaultNick8433 | Дата: Воскресенье, 28.06.2009, 12:49:29 | Сообщение # 11 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Статус: Не в сети
| Code new text[100] format(text,99,"%s ^x04rolled the %d",name,rolldataall) message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id) write_byte(id) write_string(text) message_end() Проверь так должно сработать
Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
|
|
| |
HoRRoR | Дата: Воскресенье, 28.06.2009, 18:42:16 | Сообщение # 12 |
Полковник
Группа: Скриптеры
Сообщений: 181
Статус: Не в сети
| все равно не работает
|
|
| |
defaultNick8433 | Дата: Воскресенье, 28.06.2009, 21:35:12 | Сообщение # 13 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Статус: Не в сети
| Ты наверное не так что-то делал,потому что у меня всё работало.На вот,держи,вставил правильно код окраски сообщений,работает. Code /* Plugin generated by AMXX-Studio */
#include <amxmodx> #include <amxmisc>
#define PLUGIN "ROLL" #define VERSION "0.1" #define AUTHOR "HoRRoR"
new g_rolled[33] new name[33] new rolldata[33] new rolldataall
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /roll", "clCmdRoll") register_clcmd("say /resetroll", "clCmdResRoll") register_clcmd("say /endroll", "clCmdEndRoll") register_clcmd("say /playerroll", "clCmdPlayerRoll") register_logevent("roundStart", 2, "1=Round_Start") }
public client_putinserver(id) { get_user_name(id,name,32) g_rolled[id] = 0 rolldata[id] = 0 }
public roundStart() { for (new i = 0; i < 33; i++) { g_rolled[i] = 0 } }
public clCmdPlayerRoll(id) { new text[100] if(is_user_admin(id)) { new plnum new plrandom
plnum = get_playersnum() plrandom = random_num(1,plnum) get_user_name(plrandom,name,32) format(text,99,"^x04[*]Random player is: %s.",name) message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() // client_print(0, print_chat, "[*] Random player is: %s. (debug: %d - plnum, %d - plrandom)",name,plnum,plrandom) }else{ format(text,99,"^x01[*]You are not admin.") message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() } }
public clCmdRoll(id) { new text[100] if ( g_rolled[id] != 1 ) { rolldata[id] = random_num(1,100) rolldataall = rolldata[id] get_user_name(id,name,32)
format(text,99, "^x03[*] ''%s'' rolled the %d.",name,rolldataall) message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() g_rolled[id] = 1 }else{ format(text,99,"^x01[*] You already rolled in this round.") message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() } }
public clCmdEndRoll(id) { new text[100] if(is_user_admin(id)) { new g_rollwinnerscore g_rollwinnerscore = rolldata[0] for (new j = 0; j < 33; j++) { if( rolldata[j] > g_rollwinnerscore ) { g_rollwinnerscore = rolldata[j] get_user_name(j,name,32) } } format(text,99,"^x04[*] The roll win ''%s'' with %d score.",name,g_rollwinnerscore) message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end()
}else{ format(text,99, "^x03[*] You are not admin.") message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() } }
public clCmdResRoll(id) { new text[100] if(is_user_admin(id)) { for (new i = 0; i < 33; i++) { g_rolled[i] = 0 } format(text,99, "^x01[*] Roll been reseted.") message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() }else{ format(text,99, "^x04[*] You are not admin.") message_begin(MSG_ALL,get_user_msgid("SayText"),{0,0,0},id) write_byte(id) write_string(text) message_end() } }
Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
|
|
| |
HoRRoR | Дата: Воскресенье, 28.06.2009, 21:55:30 | Сообщение # 14 |
Полковник
Группа: Скриптеры
Сообщений: 181
Статус: Не в сети
| Все понял в чем траблы были - нужно было в начале сообщения теги ставить, а я ставил только там где надо а как насчет со скрыванием сообщений?
|
|
| |
defaultNick8433 | Дата: Воскресенье, 28.06.2009, 21:57:08 | Сообщение # 15 |
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Статус: Не в сети
| Вот этого как раз я не понил)Тебе надо скрывать сообщение,когда употребляет несколько раз команду.То есть если первый раз игрок ввёл команду,то остальное количество блокировать?
Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
|
|
| |
| AMX Mod X Russian Community © 2006-2025 | |
|
| |