AMX MOD X
Среда, 24.04.2024, 23:01:40



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

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

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » В одной функции 2 id игкрока (( затрунился написать адекватное название темы))
В одной функции 2 id игкрока
tavotДата: Четверг, 03.12.2009, 21:46:21 | Сообщение # 1
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
Суть в чем:
1 игрок пишет "/команда ник"
Если игрок с таким именем существует то
игрок номер 2 получает меню с вопросом и отвечает да или нет ( если нет, плагин заканчивается)
Если ответил да то:
Для них обоих выполняется команда старт.

И ждем пока кто то из них не подаст команду финиш. ( нажатие на кнопку)

дальше заглядывать пока что рано.

Вот то что сам накропал.

Code

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <fun>
#include <cstrike>
#include <engine>

#define PLUGIN "test"
#define VERSION "0.0.1"
#define AUTHOR "Svoloch"

new bool:g_user_duel[33]
//new bool:g_user_duel_yes[33]

public plugin_modules()
{
  require_module("fakemeta")
  require_module("fun")
}

public plugin_init() {  
  register_plugin(PLUGIN, VERSION, AUTHOR)
  register_clcmd("my_menu","AwesomeMenu");  
  register_concmd("test", "fight",_, "[target]")
}  
public fight(id)
{  
  g_user_duel[id]== true
  new g_who[33]
  read_argv(1,g_who,99)

  new id = cmd_target(id,g_who,2)
  client_print(id,print_chat,"perviy sey id2 %d", id)
    
  new g_iPlayers[32],g_iNum,i
  get_players(g_iPlayers, g_iNum,"a");
  for(i = 0 ; i < g_iNum ; i++)
  {
   new g_name_n[33]
   get_user_name(id,g_name_n,99)
   if(g_who[id]==g_name_n[id]){
     
   client_print(id,print_chat,"Zapros otpravlen")
   set_task(1.0,"AwesomeMenu",id)
    
   }else{
     
   client_print(id,print_chat,"Net takogo igroka")  
   return PLUGIN_HANDLED  
   }
    
    
  }  
  return PLUGIN_HANDLED  
   
}
public AwesomeMenu(id) {  
  new menu=menu_create("\rLook at this awesome Menu!:","menu_handler")  
  menu_additem(menu,"\wYes","1",0)  
  menu_additem(menu,"\wNo","2",0)  
  menu_setprop(menu,MPROP_EXIT,-1)
  menu_display(id,menu,0)  
}  
public menu_handler(id,menu,item) {  

  new data[6], iName[64]  
  new access, callback  
   
  menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)  

  new key = str_to_num(data)  
  switch(key) {  
   case 1: {  
    client_print(id, print_chat, "Hooray! You selected the Awesome 1st Selection")  
     
    start_duel(id)
    menu_destroy(menu)
    return PLUGIN_HANDLED  
   }  
   case 2: {  
    client_print(id, print_chat, "OH NO! You selected the Awesome 2nd Selection! BEWARE!")  
    menu_destroy(menu)
     
   }  
  }  
  menu_destroy(menu)  
  return PLUGIN_HANDLED  
}
public start_duel(id)
{
  new g_iPlayers[32],g_iNum,i
  get_players(g_iPlayers, g_iNum,"a");
  for(i = 0 ; i < g_iNum ; i++)
  {
   if()
   {
   client_print(id,print_chat,"If start duel %d",id)
   }else{
   client_print(id,print_chat,"If start duel  False")  
   }
    
  }
  return PLUGIN_HANDLED  
}

Ни как не могу сделать так что бы в функции start_duel(id)
Обоим игрокам ( тому который подавал команду и тот который согласился, писался текст ( когда текст им обоим напишется при том что бы для каждого писался отдельно, т.е. по id , дальше будет сам плагин ) вернее сама идея )

 
PomanoBДата: Четверг, 03.12.2009, 22:04:13 | Сообщение # 2
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Тебе надо в какой-нибудь глобальной переменной запоминать ид игроков

http://romanov4400.mybrute.com
 
a_aquaДата: Четверг, 03.12.2009, 22:54:19 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 64
Репутация: 3
Статус: Не в сети
Free?
 
tavotДата: Четверг, 03.12.2009, 23:19:53 | Сообщение # 4
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
если не лень можно поподробнее.
Я уже часов 6 сижу голову ломаю.

видать мышление еще не способно понимать четкую разницу отличий глобальных от не глобальных ( вернее это я понимаю)
а вот как то реализовать что то ни как...

Я так понимаю что:
в самом начале надо указать что игрок который подает команду - в его id ( вернее в переменную ) должно указываться что он подал команду

а в последней функции должно узнаваться какой игрок ее подавал.

Вот это то у меня и не выходит.

a_aqua
попрошу без флуда

Добавлено (03.12.2009, 23:19:53)
---------------------------------------------
О сделал
но

Code
   if(test[id]==1)  
    {  
    client_print(id,print_chat,"If start duel %d",id)  
    }else{  
    client_print(id,print_chat,"If start duel  False")   
    }

передается только тому кто согласился

Пошел еще 6 часов париться что бы обоим передавалось ....

Сообщение отредактировал tavot - Четверг, 03.12.2009, 23:13:17
 
PomanoBДата: Четверг, 03.12.2009, 23:22:06 | Сообщение # 5
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
1 пишет команду, его ид запоминается в g_player_command[id_player2] = id_player1
Где g_player_command - массив на всех игроков
2-ому показывается меню, если он согласен, то первый игрок (который подавал команду) будет g_player_command[id], где id - этот тот игрок который нажал Да в меню


http://romanov4400.mybrute.com
 
tavotДата: Четверг, 03.12.2009, 23:29:11 | Сообщение # 6
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
Вот так всегда, как только попросишь помощи - начинает получаться )
Code
    for(i = 0 ; i < g_iNum ; i++)
  {
   if(test[id]==1)
   {
   client_print(test[id],print_chat,"If start test %d",test[id])
   client_print(id,print_chat,"If start duel %d",id)
   }else{
   client_print(id,print_chat,"If start duel  False")  
   }
    
  }

Вопрос из цикла как правильно вытащить это дело?
ну скажем что бы я после цикла поставил вновь

Code
  client_print(test[id],print_chat,"If start test %d",test[id])
   client_print(id,print_chat,"If start duel %d",id)
 
PomanoBДата: Четверг, 03.12.2009, 23:30:55 | Сообщение # 7
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Да цикла там вообще не надо
просто первый игрок это test[id] второй id


http://romanov4400.mybrute.com
 
tavotДата: Четверг, 03.12.2009, 23:57:24 | Сообщение # 8
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
Вроде разобрался, но где то все равно косяк.
С одного игрока работает, с другого нет:
Code

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <fun>
#include <cstrike>
#include <engine>

#define PLUGIN "test"
#define VERSION "0.0.1"
#define AUTHOR "Svoloch"

//new bool:g_user_duel[33]
//new bool:g_user_duel_yes[33]
new test[32]
new test_test[32]
public plugin_modules()
{
  require_module("fakemeta")
  require_module("fun")
}

public plugin_init() {  
  register_plugin(PLUGIN, VERSION, AUTHOR)
  register_clcmd("my_menu","AwesomeMenu");  
  register_concmd("test", "fight",_, "[target]")
}  
public fight(id)
{  
  test[id] = 1;
  new g_who[33]
  read_argv(1,g_who,99)
  new id = cmd_target(id,g_who,2)
    
  new g_iPlayers[32],g_iNum,i
  get_players(g_iPlayers, g_iNum,"a");
  for(i = 0 ; i < g_iNum ; i++)
  {
   new g_name_n[33]
   get_user_name(id,g_name_n,99)
   if(g_who[id]==g_name_n[id]){
   set_task(1.0,"AwesomeMenu",id)
   }else{
   client_print(id,print_chat,"Net takogo igroka")  
   return PLUGIN_HANDLED  
   }
  }  
  return PLUGIN_HANDLED  
}
public AwesomeMenu(id) {  
  new menu=menu_create("\rLook at this awesome Menu!:","menu_handler")  
  menu_additem(menu,"\wYes","1",0)  
  menu_additem(menu,"\wNo","2",0)  
  menu_setprop(menu,MPROP_EXIT,-1)
  menu_display(id,menu,0)  
}  
public menu_handler(id,menu,item) {  

  new data[6], iName[64]  
  new access, callback  

  menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)  

  new key = str_to_num(data)  
  switch(key) {  
   case 1: {  
    client_print(id, print_chat, "Hooray! You selected the Awesome 1st Selection")  
     
    start_duel(id)
    menu_destroy(menu)
    return PLUGIN_HANDLED  
   }  
   case 2: {  
    client_print(id, print_chat, "OH NO! You selected the Awesome 2nd Selection! BEWARE!")  
    menu_destroy(menu)
     
   }  
  }  
  menu_destroy(menu)  
  return PLUGIN_HANDLED  
}
public start_duel(id)
{/*
  new g_iPlayers[32],g_iNum,i
  get_players(g_iPlayers, g_iNum,"a");
  for(i = 0 ; i < g_iNum ; i++)
  {
   if(test[id]==1&&test_test[id]==1)
   {
   client_print(test[id],print_chat,"If start test %d",test[id])
   client_print(id,print_chat,"If start duel %d",id)
   }else{
   client_print(id,print_chat,"If start duel  False")  
   }
    
  }
*/  
  client_print(test[id],print_chat,"Perviy igrok %d",test[id])
  client_print(id,print_chat,"Vtoroy igrok %d",id)
   
  set_user_armor(test[id],50)
  set_user_armor(id,50)
  test[id] = 0;
  id = 0;
  return PLUGIN_HANDLED  
}

Видать эт jult то я невнимателен, сам это понимаю, но вот где, ни как не могу определить. был бы третий комп ;)

Добавлено (03.12.2009, 23:57:24)
---------------------------------------------
Если юзер 1 ( id 1) предлагает - то все ок.
А если Юзер 2 ( id 2) предлагает - не пашет.

Не может быть причины в этом:
test[id] = 1;

 
PomanoBДата: Пятница, 04.12.2009, 00:05:48 | Сообщение # 9
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Code

/* Plugin generated by AMXX-Studio */  

#include <amxmodx>  
#include <amxmisc>  
#include <fakemeta>  
#include <hamsandwich>  
#include <xs>  
#include <fun>  
#include <cstrike>  
#include <engine>  

#define PLUGIN "test"  
#define VERSION "0.0.1"  
#define AUTHOR "Svoloch"  

//new bool:g_user_duel[33]  
//new bool:g_user_duel_yes[33]  
new test[33]  
public plugin_modules()  
{  
   require_module("fakemeta")  
   require_module("fun")  
}  

public plugin_init() {   
   register_plugin(PLUGIN, VERSION, AUTHOR)  
  // register_clcmd("my_menu","AwesomeMenu");   
   register_concmd("test", "fight",_, "[target]")  
}   
public fight(id)  
{   
   test[id] = 1;  
   new g_who[33]  
   read_argv(1,g_who,99)  
   new id2 = cmd_target(id,g_who,2)  
      
    
    if(id2){  
     test[id2] = id
  set_task(1.0,"AwesomeMenu",id2)  
    }else{  
  client_print(id,print_chat,"Net takogo igroka")   
    return PLUGIN_HANDLED   
    }  
    
   return PLUGIN_HANDLED   
}  
public AwesomeMenu(id) {   
   new menu=menu_create("\rLook at this awesome Menu!:","menu_handler")   
   menu_additem(menu,"\wYes","1",0)   
   menu_additem(menu,"\wNo","2",0)   
   menu_setprop(menu,MPROP_EXIT,-1)  
   menu_display(id,menu,0)   
}   
public menu_handler(id,menu,item) {   

   new data[6], iName[64]   
   new access, callback   

   menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)   

   new key = str_to_num(data)   
   switch(key) {   
    case 1: {   
     client_print(id, print_chat, "Hooray! You selected the Awesome 1st Selection")   
       
     start_duel(id)  
     menu_destroy(menu)  
     return PLUGIN_HANDLED   
    }   
    case 2: {   
     client_print(id, print_chat, "OH NO! You selected the Awesome 2nd Selection! BEWARE!")   
     menu_destroy(menu)  
       
    }   
   }   
   menu_destroy(menu)   
   return PLUGIN_HANDLED   
}  
public start_duel(id)  
{
   client_print(test[id],print_chat,"Perviy igrok %d",test[id])  
   client_print(id,print_chat,"Vtoroy igrok %d",id)  
     
   set_user_armor(test[id],50)  
   set_user_armor(id,50)  
   test[id] = 0;  
   id = 0;  
   return PLUGIN_HANDLED   
}

Как-то так


http://romanov4400.mybrute.com
 
tavotДата: Пятница, 04.12.2009, 00:16:24 | Сообщение # 10
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
Спасибоище! Все работает )
теперь я понимаю что цикл тут совсем был не нужен.

Дальше буду реализовывать функцию самой дуели .... тут будет посложнее, но оно того стоит )

Вопросик на по следок:

дальше во всем плагине после этой процедуры эти id будут такими, до момента их принудительного обнуления, я правильно понимаю?
то есть я могу в любой функции оперировать этими двумя id так же как и в public start_duel(id) .

 
PomanoBДата: Пятница, 04.12.2009, 00:20:33 | Сообщение # 11
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Да, но только в той функции в которой есть параметр id второго игрока

http://romanov4400.mybrute.com
 
tavotДата: Пятница, 04.12.2009, 00:37:36 | Сообщение # 12
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
Тог да можно сделать еще один массив test - ну скажем test_test ( на сколько я знаю в массивах и функциях (в названиях) нельзя использовать цифры) и присвоить ему id второго игрока ?
хотя наверно это не принципиально .. но дальнейшая разработка плагина покажет.
 
PomanoBДата: Пятница, 04.12.2009, 00:56:22 | Сообщение # 13
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Да 1 хватит я говорю про то что всегда надо знать какой именно игрок у тебя есть....
Quote (tavot)
на сколько я знаю в массивах и функциях (в названиях) нельзя использовать цифры

Почему же нельзя, можно)


http://romanov4400.mybrute.com
 
tavotДата: Пятница, 04.12.2009, 16:03:25 | Сообщение # 14
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
Вот почти дописал скелет плагина.
осталась похожая проблема в конце плагина.
Где с другого плагина получается id
и его надо сравнить с нашими первыми.
буду завтра сам пробовать )
не получится буду просить помощи )

Добавлено (04.12.2009, 12:02:28)
---------------------------------------------
Что то я все равно туплю....

Тут передается id первого игрока в test

Code
public fight(id)       
{
         test[id] = id

И далее я ее легко могу в любой функции использовать.
А вот засунуть id второго игрока скажем test2 не получается.
т.е. получается но при тестах это видит только лишь второй игрок.

Code

/* Plugin generated by AMXX-Studio */    

#include <amxmodx>    
#include <amxmisc>    
#include <fakemeta>    
#include <hamsandwich>    
#include <xs>    
#include <fun>    
#include <cstrike>    
#include <engine>    
#include <kzarg>

#define PLUGIN "test"    
#define VERSION "0.0.1"    
#define AUTHOR "Svoloch"    

new test[33]    
new test2[33]
new test3[33]
public plugin_modules()    
{    
   require_module("fakemeta")    
   require_module("fun")    
}    

public plugin_init() {     
   register_plugin(PLUGIN, VERSION, AUTHOR)    
   register_concmd("test", "fight",_, "[target]")    
   register_concmd("say /test", "testt")    
}     
// test[id] - первый игрок
// id - второй игрок
public fight(id)  // айди первого игрока
{
      test[id] = id   
     
   new g_who[33]    
   read_argv(1,g_who,99)    
   new id2 = cmd_target(id,g_who,2)    
   test3[id]=id2
   if(id2){    
    test[id2] = id   
    set_task(1.0,"AwesomeMenu",id2)    
    }else{    
    client_print(id,print_chat,"Net takogo igroka")     
    return PLUGIN_HANDLED     
   }    
     
   return PLUGIN_HANDLED     
}    
public AwesomeMenu(id) //айди второго игрока
{     
   new menu=menu_create("\rLook at this awesome Menu!:","menu_handler")     
   menu_additem(menu,"\wYes","1",0)     
   menu_additem(menu,"\wNo","2",0)     
   menu_setprop(menu,MPROP_EXIT,- 1)    
   menu_display(id,menu,0)     
}     
public menu_handler(id,menu,item) //айди второго игрока   
   {     
     
   new data[6], iName[64]     
   new access, callback     
     
   menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)     
     
   new key = str_to_num(data)     
   switch(key) {     
    case 1: {     
     client_print(id, print_chat, "1st Selection")     
       
     start_duel(id)    
     menu_destroy(menu)    
     return PLUGIN_HANDLED     
    }     
    case 2: {     
     client_print(id, print_chat, "2nd Selection! BEWARE!")     
     menu_destroy(menu)    
       
    }     
   }     
   menu_destroy(menu)     
   return PLUGIN_HANDLED     
}

public start_duel(id)  //айди второго игрока   
{   
   client_print(test[id],print_chat,"Perviy igrok %d",test[id])    
   client_print(id,print_chat,"Vtoroy igrok %d",id)    
     
   set_user_armor(test[id],50)    
   set_user_armor(id,50)    
     
   client_cmd(test[id],"say /start")
   client_cmd(id,"say /start")
     
   test3[id]=id
     
   kz_get_user_duel(id)
   kz_get_user_duel_two(test[id])
   return PLUGIN_HANDLED     
}
public testt(id) //айди игрока команды say /test
{
   client_print(id,print_chat,"Test2 id %d",test[id])    
   client_print(id,print_chat,"Test3 id %d",test3[id])
      
}
public kz_finishclimb(id) // игрока прошедшего карту
{

}

вот так вроде как заработало )

Добавлено (04.12.2009, 15:33:57)
---------------------------------------------
Как узнать, какой id первым нажал на кнопку?
Нужно это для того что бы:
Из времени второго игрока выесть первое - это будет время на которое оторвался лидер.

Code
public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту
{
   new iMin, Float:iSec;
   iMin = floatround(tiempo, floatround_floor)/60;   
   iSec = tiempo - (60*iMin);
      
   if(id==test[id])
   client_print(id,print_chat,"Finish id %d, time: %d ",test[id], checkpoints)    
   client_print(id,print_chat,"%02d:%s%.5f", iMin, iSec < 10 ? "0": "", iSec)   
   if(id==test3[id])
   client_print(id,print_chat,"Finish id %d,",test3[id])    
   client_print(id,print_chat,"%02d:%s%.5f", iMin, iSec < 10 ? "0": "", iSec)   
}

Добавлено (04.12.2009, 16:03:25)
---------------------------------------------
Или же можно сравнить показатели Float:tiempo
и у кого меньше - признается лидером.
Вопрос как это сделать.
у меня получаются только какие то ужасные мега конструкции из if ....

Сообщение отредактировал tavot - Пятница, 04.12.2009, 15:34:16
 
PomanoBДата: Пятница, 04.12.2009, 22:57:55 | Сообщение # 15
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Quote (tavot)
 if(id==test3[id])

У тебя какие-то странные условие, получается если игрок соревнуется сам с собой)))
введи id2 к примеру
Quote (tavot)
Как узнать, какой id первым нажал на кнопку?

В kz_startclimb пройдись циклом по всему test и смотри есть такие игроки которые соревнуются с данным, либо он сам соревнуется с кем-то


http://romanov4400.mybrute.com
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » В одной функции 2 id игкрока (( затрунился написать адекватное название темы))
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024