|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
В одной функции 2 id игкрока
|
|
tavot | Дата: Четверг, 03.12.2009, 21:46:21 | Сообщение # 1 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| Суть в чем: 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
Статус: Не в сети
| Тебе надо в какой-нибудь глобальной переменной запоминать ид игроков
http://romanov4400.mybrute.com
|
|
| |
a_aqua | Дата: Четверг, 03.12.2009, 22:54:19 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 64
Статус: Не в сети
| Free?
|
|
| |
tavot | Дата: Четверг, 03.12.2009, 23:19:53 | Сообщение # 4 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| 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
Статус: Не в сети
| 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
Статус: Не в сети
| Вот так всегда, как только попросишь помощи - начинает получаться ) 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
Статус: Не в сети
| Да цикла там вообще не надо просто первый игрок это test[id] второй id
http://romanov4400.mybrute.com
|
|
| |
tavot | Дата: Четверг, 03.12.2009, 23:57:24 | Сообщение # 8 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| 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
Статус: Не в сети
| 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
Статус: Не в сети
| PomanoB, Спасибоище! Все работает ) теперь я понимаю что цикл тут совсем был не нужен. Дальше буду реализовывать функцию самой дуели .... тут будет посложнее, но оно того стоит ) Вопросик на по следок: дальше во всем плагине после этой процедуры эти id будут такими, до момента их принудительного обнуления, я правильно понимаю? то есть я могу в любой функции оперировать этими двумя id так же как и в public start_duel(id) .
|
|
| |
PomanoB | Дата: Пятница, 04.12.2009, 00:20:33 | Сообщение # 11 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Да, но только в той функции в которой есть параметр id второго игрока
http://romanov4400.mybrute.com
|
|
| |
tavot | Дата: Пятница, 04.12.2009, 00:37:36 | Сообщение # 12 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| PomanoB, Тог да можно сделать еще один массив test - ну скажем test_test ( на сколько я знаю в массивах и функциях (в названиях) нельзя использовать цифры) и присвоить ему id второго игрока ? хотя наверно это не принципиально .. но дальнейшая разработка плагина покажет.
|
|
| |
PomanoB | Дата: Пятница, 04.12.2009, 00:56:22 | Сообщение # 13 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Да 1 хватит я говорю про то что всегда надо знать какой именно игрок у тебя есть.... Quote (tavot) на сколько я знаю в массивах и функциях (в названиях) нельзя использовать цифры Почему же нельзя, можно)
http://romanov4400.mybrute.com
|
|
| |
tavot | Дата: Пятница, 04.12.2009, 16:03:25 | Сообщение # 14 |
Генерал-майор
Группа: Пользователи
Сообщений: 256
Статус: Не в сети
| Вот почти дописал скелет плагина. осталась похожая проблема в конце плагина. Где с другого плагина получается 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
Статус: Не в сети
| Quote (tavot) if(id==test3[id]) У тебя какие-то странные условие, получается если игрок соревнуется сам с собой))) введи id2 к примеру Quote (tavot) Как узнать, какой id первым нажал на кнопку? В kz_startclimb пройдись циклом по всему test и смотри есть такие игроки которые соревнуются с данным, либо он сам соревнуется с кем-то
http://romanov4400.mybrute.com
|
|
| |
| AMX Mod X Russian Community © 2006-2025 | |
|
| |