AMX MOD X
Четверг, 28.03.2024, 19:45:04



Приветствую Вас Гость | RSS
[ Главная ] [ roll - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Плагины » Готовые плагины » roll (выбрасывание костей как в WoW)
roll
HoRRoRДата: Суббота, 27.06.2009, 20:27:47 | Сообщение # 1
Полковник
Группа: Скриптеры
Сообщений: 181
Репутация: 8
Статус: Не в сети
Возникла такая ситуация... ZP мод, долго не было режима немезис. Я админ предлагаю стартовать режим вручную. игроки согласны и возникает вопрос, кого сделать немезисом? Много кто-хочет им побыть. Вспомнив аналогию /roll из World of Warcraft решил сначала поискать такой плагин, ну а т.к. его не было, решил сделать сам.

Этой мой первый плагин, поэтому прошу не пинать ногами а помочь, где надо :)

Комманды (вводятся в чате):
- Для всех:
/roll - вывод случайного число от 1 до 100. Аналог выбрасывания костей. Причем все видят, кто сколько выбросил.
- Для админа:
/endroll - закончить ролл. Т.е. бывает не уследить за чатом, кто сколько выбросил. Эта комманда показыват имя победителя и сколько он выбросил.
/resetroll - Позволяет игрокам начать ролл заново, т.к. за раунд допускается только один /roll.
/playerroll - выводит имя случайного игрока.

Список изменений:
0.2 - первый релиз
0.3 - добавил мультиязычность (EN & RU)

Прикрепления: roll.txt (1.0 Kb) · amx_roll.sma (4.3 Kb)


Сообщение отредактировал HoRRoR - Понедельник, 29.06.2009, 13:55:38
 
PomanoBДата: Суббота, 27.06.2009, 21:04:19 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Идея плагин мне понравилась, молодец ;)
Несколько замечаний:
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
Репутация: 8
Статус: Не в сети
я и не считаю придирками :) я вобще не ожидал что сам смогу что-то написать

Добавлено (2009-06-27, 9:09 Pm)
---------------------------------------------
насчет текста неочень понял.
как мне выводить сообщение всем, только одному игроку. и как оО

 
ZETAДата: Суббота, 27.06.2009, 21:12:26 | Сообщение # 4
Генерал-майор
Группа: Скриптеры
Сообщений: 369
Репутация: 21
Статус: Не в сети
Quote (PomanoB)
Не совсем оптимально написано, зачем столько раз получать имя

Имя же получается только один раз, при удовлетворении условия? :)


Говори что думаешь и думай что говоришь...
 
PomanoBДата: Суббота, 27.06.2009, 21:29:24 | Сообщение # 5
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
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
Репутация: 21
Статус: Не в сети
А почему вторая цитата моя? blink Второй вопрос не мой :D

Говори что думаешь и думай что говоришь...
 
PomanoBДата: Суббота, 27.06.2009, 21:56:02 | Сообщение # 7
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Не знаю, форум так поставил, я внимания не обратил)

http://romanov4400.mybrute.com
 
HoRRoRДата: Суббота, 27.06.2009, 23:01:02 | Сообщение # 8
Полковник
Группа: Скриптеры
Сообщений: 181
Репутация: 8
Статус: Не в сети
хорошо, допустим в 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
Репутация: 19
Статус: Не в сети
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
Репутация: 8
Статус: Не в сети
во, теперь всё понятно! спс! :)

Добавлено (2009-06-28, 11:20 Am)
---------------------------------------------
всё равно не работает цвет. ^x04 к примеру выглядят в игре как четыре пробелла.

еще аопрос кстати: как скрыть сообщение в чате? т.е. например чтобы когда пишешь /roll, в чат это не писалось дабы не засорять чат

 
defaultNick8433Дата: Воскресенье, 28.06.2009, 12:49:29 | Сообщение # 11
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
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
Репутация: 8
Статус: Не в сети
все равно не работает
 
defaultNick8433Дата: Воскресенье, 28.06.2009, 21:35:12 | Сообщение # 13
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
Ты наверное не так что-то делал,потому что у меня всё работало.На вот,держи,вставил правильно код окраски сообщений,работает.
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
Репутация: 8
Статус: Не в сети
Все понял в чем траблы были - нужно было в начале сообщения теги ставить, а я ставил только там где надо

а как насчет со скрыванием сообщений?

 
defaultNick8433Дата: Воскресенье, 28.06.2009, 21:57:08 | Сообщение # 15
Генерал-полковник
Группа: Скриптеры
Сообщений: 806
Репутация: 19
Статус: Не в сети
Вот этого как раз я не понил)Тебе надо скрывать сообщение,когда употребляет несколько раз команду.То есть если первый раз игрок ввёл команду,то остальное количество блокировать?

Раскручиваю сайты,ставлю трекера на хостинг.Всё бесплатно.Если заинтересовало,то моя аська 400538001
 
AMX Mod X Форум » Плагины » Готовые плагины » roll (выбрасывание костей как в WoW)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024