AMX MOD X
Пятница, 29.03.2024, 10:43:12



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

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

  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » В одной функции 2 id игкрока (( затрунился написать адекватное название темы))
В одной функции 2 id игкрока
tavotДата: Суббота, 05.12.2009, 01:09:06 | Сообщение # 16
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
if(id==test3[id]) - это я проверял - кто где и не ошибся ли...
Если финишировал кто то и он это игрок 1 то..
Если финишировал кто то и он это игрок 2 то..
( у меня еще просто в голове не до конца все разложилось по полочкам, как с двумя id одновременно работать)

Т.е. когда приходит какой то id в kz_startclimb ( именно сюда - то есть в основном плагине джампа это делать? ) или в моем плагине в функции kz_finishclimb

И что то у меня туго доходит как мы узнаем что они соревнуются между собой?
видать все таки мышление еще более линейное....

new i
for (i=0; i<num; i++)
{
if(id==test[id])
}

Тоже чушь какая то получается... зачем тогда цикл?

Или надо сделать цикл:
Если кто то финишировал, проверяем есть ли у нас в тест или тест3
Если он есть, то ищем его вторую половинку?

Гм чувствую опять до 4 утра сидеть буду :)

Есть ли у нас тест или тест3 я еще представил себе как это сделать.
А вот как найти вторую половинку... хм...

И как назло не могу найти ни одного плагина который nxj то подобное делал, что бы подсмотреть.

Добавлено (05.12.2009, 01:07:59)
---------------------------------------------
что то пятница была рабочим днем...

new i
for (i=0; i<num; i++)
{
if(id==test[id]||id==test3[id]) // проверяем полученный id соответствует ли он test или test3 ( одному из игроков)
new first[33]
first[id]=id

if(first[id]!=0) // не могу понять как найти его пару....

}

Добавлено (05.12.2009, 01:09:06)
---------------------------------------------
Да икогда мы ее найдем, нам надо будет ждать то того момента как он тоже финиширует и это вновь вызовет функцию с самого начала.

Сообщение отредактировал tavot - Суббота, 05.12.2009, 00:55:21
 
PomanoBДата: Суббота, 05.12.2009, 10:48:20 | Сообщение # 17
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Quote (tavot)
id==test[id]

Буквально: Если ид игрока равняется ид игрока с которым соревнуется

if (is_user_alive(test[id]))
//Этот игрок (id) соревнуется с игроком test[id]
new i
for (i=0; i {
if(id==test[i])
С игроком id соревнуется игрок i
}


http://romanov4400.mybrute.com
 
tavotДата: Воскресенье, 06.12.2009, 07:51:46 | Сообщение # 18
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
Долго мучался, но так до конца и не получилось:
Code


public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту
{
  // Thanks connor <img rel="usm" src="http://amxmodx.ucoz.ru/Smiles/biggrin.gif" border="0" align="absmiddle" alt=":D">
  iMin[id] = floatround(tiempo, floatround_floor)/60;  
  iSec[id] = tiempo - (60*iMin[id]);
   
  /*
  if(id==test[id]){
   client_print(id,print_chat,"Finish id %d,",test[id])   
   client_print(id,print_chat,"%02d:%s%.5f", iMin[id], iSec[id] < 10 ? "0": "", iSec[id])
   server_print("%d",iSec[id])
  }
  if(id==test3[id]){
   client_print(id,print_chat,"Finish id %d,",test3[id])   
   client_print(id,print_chat,"%02d:%s%.5f", iMin[id], iSec[id] < 10 ? "0": "", iSec[id])
   server_print("%d",iSec[id])  
  }
  */  
  new i
  new players[32], num
  get_players(players, num, "c")
   
  //Этот игрок (id) соревнуется с игроком test[id]  
  for (i=0; i<num ;i++){  
    
   if(id==test[i]){ //С игроком id соревнуется игрок i  ( если предложивший финиширует первый)
    client_print(id,print_chat,"Cikle id %d, -- test [ %d ] First player",id,test3[i]) // Player win
    g_Finish_player[id]= 1
     
     
    if(g_Finish_player[i]==0){
      
     client_print(0,print_chat,"Win")
     client_print(id,print_chat,"%02d:%s%.5f", iMin[id], iSec[id] < 10 ? "0": "", iSec[id])
     WinTime[i]=iSec[id]
     WinTime2[i]=iMin[id]
      
    }else{
     
     new Float:lostiSec[33]
     new lostiMin[33]
     lostiSec[id]=iSec[id]-WinTime[i]
     lostiMin[id]=iMin[id]-WinTime2[i]
     client_print(id,print_chat,"Lost time %02d:%s%.5f", lostiMin[id], lostiSec[id] < 10 ? "0": "", lostiSec[id])
      
    }
     
   }
    
   if(id==test3[i]){//С игроком id соревнуется игрок i  (если согласившийся финиширует первый)
    client_print(id,print_chat,"Cikle id %d, -- test [ %d ] Second player",id,test[i])  // Player win
    g_Finish_player[id]= 1
    
    if(g_Finish_player[i]==0){
     
     client_print(0,print_chat,"Win")
     client_print(id,print_chat,"%02d:%s%.5f", iMin[id], iSec[id] < 10 ? "0": "", iSec[id])
     WinTime[i]=iSec[id]
     WinTime2[i]=iMin[id]     
    }else{
     
     new Float:lostiSec[33]
     new lostiMin[33]
     lostiSec[id]=iSec[id]-WinTime[i]
     lostiMin[id]=iMin[id]-WinTime2[i]
     client_print(id,print_chat,"Lost time %02d:%s%.5f", lostiMin[id], lostiSec[id] < 10 ? "0": "", lostiSec[id])
     
    }
   }
    
  }
}

Где то ошибка:
Возможно 4 ситуации:
Сам предложил - сам победил - ok
Сам предложил - Друг победил - no
Друг предложил - Сам победил - no
Друг предложил - сам проиграл. - ok

Вот как то так.

Добавлено (06.12.2009, 07:51:46)
---------------------------------------------
Касяк кажется в этом g_Finish_player[id]= 1
этим я хотел сказать что игрок победил.

Сообщение отредактировал tavot - Воскресенье, 06.12.2009, 07:32:54
 
PomanoBДата: Воскресенье, 06.12.2009, 09:59:05 | Сообщение # 19
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Code
  new i = 0
   new players[32], num  
if (is_user_alive(test[id])
{
  // С этим игроком соревновался игрок test[id]
  i = test[id]
   
}
    
   get_players(players, num, "c")  
     
   //Этот игрок (id) соревнуется с игроком test[i]   
for (i=0; i<num ;i++){   
     if (test[i] == id)
  break // Нашли игрока с которым соревнуется id
}

if (i) // Сработал один из двух вариантов
{
  if (isFninish[i])
   // Выиграл игрок i
  else
   // Выиграл игрок id
   
}


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

Добавлено (06.12.2009, 14:07:54)
---------------------------------------------
Немного сократил свой код, но он так же не работает
зависит от этого Касяк кажется в этом g_Finish_player[id]= 1

Code
public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту   
{   

   iMin[id] = floatround(tiempo, floatround_floor)/60;    
   iSec[id] = tiempo - (60*iMin[id]);   

   new i   
   new players[32], num   
   get_players(players, num, "c")   
     
   //Этот игрок (id) соревнуется с игроком test[id]    
   for (i=0; i<num ;i++){    
      
    if(id==test[i]||id==test3[i]){ //С игроком id соревнуется игрок i  ( если предложивший финиширует первый)   
     client_print(id,print_chat,"Cikle id %d, -- test [ %d ] First player",id,test3[i]) // Player win   
     g_Finish_player[id]= 1   
       
       
     if(g_Finish_player[i]==0){   
        
      client_print(0,print_chat,"Win")   
      client_print(id,print_chat,"%02d:%s%.5f", iMin[id], iSec[id] < 10 ? "0": "", iSec[id])   
      WinTime[i]=iSec[id]   
      WinTime2[i]=iMin[id]   
        
      }else{   
        
      new Float:lostiSec[33]   
      new lostiMin[33]   
      lostiSec[id]=iSec[id]-WinTime[i]   
      lostiMin[id]=iMin[id]-WinTime2[i]   
      client_print(id,print_chat,"Lost time %02d:%s%.5f", lostiMin[id], lostiSec[id] < 10 ? "0": "", lostiSec[id])   
        
     }   
       
    }   

   }   
     
}


Сообщение отредактировал tavot - Воскресенье, 06.12.2009, 14:08:25
 
PomanoBДата: Воскресенье, 06.12.2009, 14:18:51 | Сообщение # 21
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Так попробуй
Code

public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon)
{
  static isFinish[33]
  isFinish[id] = 1
  new i = 0  
  new players[32], num   
  if (is_user_alive(test[id])  
  {  
   // С этим игроком соревновался игрок test[id]  
   i = test[id]  
   
  }  
  else
  {
   get_players(players, num, "c")   
    
   //Этот игрок (id) соревнуется с игроком test[i]    
   for (i=0; i<num ;i++){    
    if (test[i] == id)  
    break // Нашли игрока с которым соревнуется id  
   }  
     
  }
  if (i) // Сработал один из двух вариантов  
  {  
   if (isFninish[i])  
   {
   // Выиграл игрок i  
   }
   else  
   {
   // Выиграл игрок id  
   }  
  }
}


http://romanov4400.mybrute.com
 
tavotДата: Понедельник, 07.12.2009, 12:34:54 | Сообщение # 22
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
В общем продолжаю думать.
test[id] - это игрок который предложил дуэль
test3[id] - это игрок который согласился на дуэль.

В public kz_finishclimb надо узнать:
1 Кто финишировал test или test3
if( id == test[id] || id == test3[id] )
2 Найти его пару

3 Узнать кто первый финишировал.

Без второго массива не обойтись ( по крайней мере я не догадался как ), так как эта функция вызывается при любом финише т.е. любого другого игрока вне дуэли.
Может добавить какой то идентификатор?
+ надо учесть - если сразу будет 2 дуэли.

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 test3[33]
// test[id] - первый игрок
// test3[id] - второй игрок

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")      
     register_concmd("say fin", "fin")      
}       

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 //записываем айди второго игрока в тест3
     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("\rPriglawenie na dyel:","menu_handler")       
     menu_additem(menu,"\wYes","1",0)       
     menu_additem(menu,"\wNo","2",0)       
     menu_setprop(menu,M PROP_E XIT,-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!")       
       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 //записываем айди второго игрока в тест3
         
     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,"Player 1 id [%d]",test[id])      
     client_print(id,print_chat,"Player 2 id [%d]",test3[id])
          
}
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",test[id])      
     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)     

}

Может
test[id]=какое то случайно с генерированное число
test3[id]=какое то случайно с генерированное число

Тогда можно будет проверять в цикле:
test[id]==test3[i]

Сообщение отредактировал tavot - Понедельник, 07.12.2009, 13:27:41
 
PomanoBДата: Понедельник, 07.12.2009, 17:46:48 | Сообщение # 23
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Quote (tavot)
test[id] - это игрок который предложил дуэль
test3[id] - это игрок который согласился на дуэль.

Зачем 2 массива, если id - который согласился, а test[id] - который предложил


http://romanov4400.mybrute.com
 
tavotДата: Понедельник, 07.12.2009, 18:53:25 | Сообщение # 24
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
Я пробовал без второго массива - у меня не выходило.
Как сделать проверку что id не дуелится с test[id] ?

Да и потом если присваивать идентификатор - все равно массив нужен.
По другому у меня не получалось, с двумя массивами хоть что то.

Буду пробовать с двумя массивами и идентификатором.

Добавлено (07.12.2009, 18:23:46)
---------------------------------------------
кажется я повторяюсь на чет проверки...

Добавлено (07.12.2009, 18:49:44)
---------------------------------------------
вот такой пример:

Code
    if(id==test[id])
  client_print(id,print_chat,"Finish id %d",test[id])   
  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)    

тут предельно ясно кто и что, а если без второго массива - то уже цикл нужен

id==test[i] - это если согласился
id==id - это тогда что?
А нужно узнать id - кто предложил.

Добавлено (07.12.2009, 18:53:25)
---------------------------------------------
Видать мы просто друг друга не допонимаем )

 
PomanoBДата: Понедельник, 07.12.2009, 18:56:47 | Сообщение # 25
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Quote (tavot)
id не дуелится с test[id]

Именно что дуелится, тут проверять ничего не надо


http://romanov4400.mybrute.com
 
tavotДата: Понедельник, 07.12.2009, 19:35:19 | Сообщение # 26
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
А если вот так ( проверить нет возможности,я на работе):
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)  
  finish[id]=1  
  }
   
  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)
  finish[id]=1
  }
    
  new i    
  new players[32], num    
  get_players(players, num, "c")    
       
  //Этот игрок (id) соревнуется с игроком test[id]     
  for (i=0; i<num ;i++){      
    
   if(id==test[i]||id==test3[i]){ //С игроком id соревнуется игрок i  ( если предложивший финиширует первый)    
    client_print(id,print_chat,"Cikle id %d, -- test [ %d ] First player",id,test3[i]) // Player win    
       
     if(finish[i]==0){    
       client_print(0,print_chat,"Win")    
      client_print(id,print_chat,"%02d:%s%.5f", iMin[id], iSec[id] < 10 ? "0": "", iSec[id])    
      WinTime[i]=iSec[id]    
      WinTime2[i]=iMin[id]    
          
     }else{    
          
      new Float:lostiSec[33]    
      new lostiMin[33]    
      lostiSec[id]=iSec[id]-WinTime[i]    
      lostiMin[id]=iMin[id]-WinTime2[i]    
      client_print(id,print_chat,"Lost time %02d:%s%.5f", lostiMin[id], lostiSec[id] < 10 ? "0": "", lostiSec[id])    
          
     }    
   }
  }
}

Но у меня сомнения на счет if(finish[i]==0){
тут должно проверятсья не финишировал ли второй дуэлянт.
 
PomanoBДата: Понедельник, 07.12.2009, 23:19:41 | Сообщение # 27
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Меня напрягает твой идея с 2 массивами и
(id==test3[id]) как такое вообще может быть, он же не может сам с собой


http://romanov4400.mybrute.com
 
tavotДата: Вторник, 08.12.2009, 02:20:26 | Сообщение # 28
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
Начал с нуля и пошагово, вот что у меня получилось:

Code
new finish[33]
static isFinish[33]  
public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту  
{  
  new iMin, Float:iSec;  
  iMin = floatround(tiempo, floatround_floor)/60;   
  iSec = tiempo - (60*iMin);
   new players[32],num
  new i=0
  get_players(players, num)  
     
   
  isFinish[id] = 1  
      
  if(id==test[id]){  
    
   new i2
   new players2[32], num2
   get_players(players2, num2)  
   for (i2=0; i2<num2 ;i2++){     
      
    if(isFinish[i2]){
     client_print(id,print_chat," lost") // lost 2player
    }else{
     client_print(id,print_chat," win") // win 2player
    }
   }
   
  } else{
    
   for (i=0; i<num ;i++){     
    if (id==test3[i])   
    client_print(id,print_chat,"Fin 2 player")
   }    
  }
   
  if(i)
  {
   if(isFinish[i]){
    client_print(id,print_chat,"End lost") // lost 2player
   }else{
    client_print(id,print_chat,"End win") // win 2player
   }
  }
   
}

Есть одна проблема: Игроку test ( тот кто предлагал дуель)
пишется если выграл
win
win
win
если проиграл
win
win
lost

Я так понимаю это из за цикла, а по два раза это из за присутствия фэйк бота и второго игрока.
как это убрать?

Добавлено (08.12.2009, 01:46:10)
---------------------------------------------
и еще одна проблема - даже если не вызывать ни кого на дуэль срабатывают циклы... но это уже не такая проблема...

Добавлено (08.12.2009, 02:01:58)
---------------------------------------------
Если пробую вот так:

Code
  new i2 = 0
   new players2[32], num2
   get_players(players2, num2)  
   for (i2=0; i2<num2 ;i2++){     
      
    if(isFinish[i2]){
    client_print(id,print_chat," FEST CIKLE") // lost 2player
    break
    }
   }
   if(i2){
    client_print(id,print_chat," lost") // lost 2player
   }else{
    client_print(id,print_chat," win") // win 2player
   }

То возвращает:
При финаше первым lost
При финише вторым FEST CIKLE и lost

Добавлено (08.12.2009, 02:20:26)
---------------------------------------------
Ну конечно я же проверяю if(isFinish[i2]){ финишировал ли кто нибудь вообще.
а ндо проверить финишировал ли игрок которому предлагалась дуэль.

РоманоВ, есть идеи?

 
PomanoBДата: Вторник, 08.12.2009, 08:41:11 | Сообщение # 29
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Code

public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту   
{   
  new iMin, Float:iSec;   
  iMin = floatround(tiempo, floatround_floor)/60;    
  iSec = tiempo - (60*iMin);  
  new players[32],num  
  new i=0  
  get_players(players, num)   
   
  static finish[33]
   
  finish[id] = 1
   
  if (is_user_alive(test[id]))
   i = test[id]
  else
  {
   for (i = 0; i < num; i++)
   {
    if (test[players[i]] == id)
    {
     i = players[i]
     break
    }
   }
  }
  if (i)
  {
   if (finish[i])
   {
    client_print(id, print_chat, "You looser!")
   }
   else
   {
    client_print(id, print_chat, "You win!")
   }
  }
}


http://romanov4400.mybrute.com
 
tavotДата: Вторник, 08.12.2009, 17:43:33 | Сообщение # 30
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
PomanoB,
тестю.

Добавлено (08.12.2009, 10:29:36)
---------------------------------------------
ЧТо то у меня подозрения что finish[id] = 1 -- далее сравнивается с самим id? не его значением.

Добавлено (08.12.2009, 12:03:29)
---------------------------------------------
Я изначально отталкивался от финиша второго игрока.
Вот тут:

Code
static isFinish[33]    
public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту    
{    
   new iMin, Float:iSec;    
   iMin = floatround(tiempo, floatround_floor)/60;     
   iSec = tiempo - (60*iMin);   
   new players[32],num   
   new i=0   
   get_players(players, num)    
     
   isFinish[id] = 1    
     
   if(id==test[id]){    
    client_print(id,print_chat," Finish player test[id] - predlagavshiy dyel") // lost 2player   
       
    } else{   
      
    for (i=0; i<num ;i++){       
     if (id==test3[i])     
      client_print(id,print_chat,"Fin 2 player")   
    }      
   }   
     
   if(i)   
   {   
    if(isFinish[i]){   
     client_print(i,print_chat,"WIN Player i ") // lost 2player   
     }else{   
     client_print(id,print_chat,"WIN Player id") // win 2player   
       
    }   
   }   
     
}

Получается что мы проверяем кто финишировал первый.

Добавлено (08.12.2009, 12:05:21)
---------------------------------------------
А надо еще узнать время второго игрока - что бы рассчитать на какое время он отстал от лидера.

Добавлено (08.12.2009, 13:39:42)
---------------------------------------------
Вот так:

Code

new finish[33]   
static isFinish[33]    
public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту    
{    
   new iMin, Float:iSec;    
   iMin = floatround(tiempo, floatround_floor)/60;     
   iSec = tiempo - (60*iMin);   
   new players[32],num   
   new i=0   
   get_players(players, num)    
     
   isFinish[id] = 1    
     
   if(id==test[id]){    
    client_print(id,print_chat," Fin 1 player") // lost 2player   
    i = test[id]   
   } else{   
    for (i=0; i<num ;i++){       
     if (id==test3[i])     
     client_print(id,print_chat,"Fin 2 player")   
    }      
   }   
   if(i){   
    if(isFinish[i]){   
     client_print(i,print_chat,"WIN Player i")   
     }else{   
     client_print(id,print_chat,"WIN Player id")   
    }   
    if(isFinish[i]==0){   
     client_print(i,print_chat,"Lost Player i")   
     }else{   
     client_print(id,print_chat,"Lost Player id")   
    }     

   }
}

Вроде работает.
но еще раз на всякий случай по тестирую.
Если все работает, то как узнать где чье время?

Добавлено (08.12.2009, 14:15:35)
---------------------------------------------
нифга все равно.... ааа я чувствую как плавятся мои мозги...

Добавлено (08.12.2009, 15:18:32)
---------------------------------------------
Зачем нужен test3
в функции public start_duel(id)
мы передаем id обоих игроков в основной плагин джампа.
----------------
А в функции
public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon)
основной плагин нам отдает id игрока прошедшего карту.

Этот id может быть
1 Простым игроком - не дуэлянтом
2 Игроком предложившим дуэль
3 Игроком согласившийся на дуэль
----------------

Следовательно:
if(id==test[id]) - проверяет совпадает ли id с игроком который предложил дуэль - так как для него есть отдельный массив в новом плагине.

Если это равенство не верно, то:
в цикле мы ищем test[i] == id - а что мы ищем? - id то пришло не из этого плагина, а из основного.

Добавлено (08.12.2009, 17:43:33)
---------------------------------------------
УРА ПОБЕДА

Code
static finish[33]  

public kz_finishclimb(id, Float:tiempo, checkpoints, gochecks, weapon) // игрока прошедшего карту    
{    

   
  finish[id] = 1  
   
  if(id==test[id]){

   if(finish[test3[id]]!=0){
    client_print(id,print_chat,"Lost test[id]")
   }else{
    client_print(id,print_chat,"Win test[id]")
   }
  }
   
  if(id==test3[id]){

   if(finish[test[id]]!=0){
    client_print(id,print_chat,"Lost test3[id]")
   }else{
    client_print(id,print_chat,"Win test3[id]")
   }
  }


Сообщение отредактировал tavot - Вторник, 08.12.2009, 15:18:56
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » В одной функции 2 id игкрока (( затрунился написать адекватное название темы))
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024