Помощь - Поиск - Пользователи - Календарь
Полная версия: Авто-арена
UoKit.com Форумы > Ultima Online : Dev > Sphere Server > Архив готовых скриптов
NFx
к сожалению не могу сам протестить - в одно рыло не особо такие вещи просмотришь smile.gif

значит так, суть такая, стоит камешек. Туда подбегает народ, открывает мпенюшку и если хочет вступить в какую-либо команду - вступает.

Сразу даю ЦУ - как ткоа поставили камешек, сразу ставьте себе гм 1 и дабл тык два раза - он станет оранжевым(состояние [Blocked]), значит отключился, затем дабл тык - станет фиолетовым, значит работает.

Одновременно меню с камня может открывать только один игрок, сделанно на всякий случаи.

Изображение

Как только прошло полчаса - вещи игркоов летят в банк, затем они портаются на позиции по командам, коордианты указанны в дефах, cr_place1 и cr_place2

Код
[DEFNAME cr_colors]
cr_activated 64
cr_activating 110
cr_busy 238
cr_blocked 248
cr_place1 1491 1629 18
cr_place2 1480 1629 18


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

Дальше, прошло полчаса - камень переводистя в состояние [Has started], т.е. турнир начат. Игроки уже стоят на позициях своих команд, НО у них стоит 0 дексы и 0 стамины, т.е. сдвинуться с места они в течении 2ух минут не могут - в это время они должны одеваться и морально готвоится. Сразу замечу - могут возникнуть неприятности со статлоком.

До этого момента вроде все ок тут и одному моно постестить было. Дальшеигроки махаются себе и махаются, при смерте и логауте им возвращается карма и они летят в бриту, ес-сно тут же выбывают из соревнования.

Когда игрок умер или логаутился - автоматически идет проверка, остались ли еще в живых члены его команды, т.е. как только умирает последний игрок комнады - втоаря команда тут же выигрывает, никаких плиток бегать расставлять не нада.

Выигрывшие игроки умирают, возвращаютсвои карму и киллы которые были до турнира, умирают, летят в бриту, там оживают и получают 1к гольда.

Вот именно этот момент, правильно ли определяются попедители я тестил через жопу, и н есовсем в нем уверен. Если кто возьмется тетсить - буду рад.

Ах да, как только победители вылетели в бриту - тут же стоун автоматически включается на новый набор.

вот весь сркипт(+ еще сферху кусок с дефами):

Сам камень:

Код
// cOLOR RACE
[ITEMDEF i_CR_stone]
DEFNAME=i_cr_stone
NAME=CR stone
TYPE=t_script
ID=3798

ON=@dclick
IF (<src.flags>&statf_dead)
RETURN 1
ENDIF
IF (<src.isGM>)
IF (<color> == cr_activated)
 RETURn 1
ENDIF
IF (<color> == cr_activating)
  color=cr_blocked
  name=<tag.name> [Blocked]
  timer=-1
  FOR m 1 10    //обнуление участников
    TRYP 0 uid.<tag.memberG<eval <local.m>>>.tag.joined  
    TRYP 0 uid.<tag.memberG<eval <local.m>>>.sysmessage @110 [SERVER] You declined to join CR tournament.
    TRYP 0 uid.<tag.memberG<eval <local.m>>>.events -e_cr_joined
   TRYP 0 tag.memberG<eval <local.m>>  
  ENDFOR
ELSE
  color=cr_activating
  name=<tag.name>
  timer=30*60
ENDIF
RETURN 1
ENDIF
if (<color> != cr_activated) && (<color> != cr_blocked)
if (<color> == cr_busy)
 src.sysmessage @110 [SERVER] CR system is busy, wait please!
 RETURN 1
ENDIF
color=cr_busy
name=<tag.name> [busy]
src.tag.cr=<eval <uid>>
src.events +e_cr_monitor
dialog d_activation
RETURN 1
Else
src.sysmessage @110 [SERVER] CR is in progress!
RETURN 1
ENDIF

ON=@timer
IF (0<tag.part2>)
FOR m 1 10 //возвращение дексы и стамины
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.dex <uid.<tag.memberG<eval <local.m>>>.tag.olddex>
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.stam <uid.<tag.memberG<eval <local.m>>>.dex>
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.message @110 CR has started!
ENDFOR
tag.part2=
timer=-1
ELSE
color=cr_activated
name=<tag.name> [Has started]
FOR m 1 10   //кидание и подготовка участников к турниру
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.sysmessage @110 [SERVER] CR tournament has begun! You have 2 minutes to prepare
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.events -e_cr_joined
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.events +e_cr
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.tag.olddex <uid.<tag.memberG<eval <local.m>>>.dex>
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.dex 0
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.stam 0
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.all_to_bank
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.cr_items <qval (0<uid.<tag.memberG<eval <local.m>>>.tag.joined> < 6) ? 64 : 238 >
 TRYP 0 uid.<tag.memberG<eval <local.m>>>.p <qval (0<tag.joined> < 6) ? <def.cr_place1> : <def.cr_place2> >
ENDFOR
timer=2*60
 tag.part2=1
ENDIF

ON=@create
color=cr_activating
tag.name=CR stone
timer=30*60
NFx
Диалог-меню записи на турнир
Код
[DIALOG d_activation]
10, 10
resizepic 0 0 3500 350 180
dtext 35 20 0 Состояние команд на данный момент:
dtext 110 35 0 Осталось <eval <timer>/60>:<eval <timer>-((<timer>/60)*60)>
tilepic 113 88 3937
tilepic 127 88 3936
FOR l 0 1
FOR k 1 5
 dtext <eval 60 + <local.l>*160> <eval 40 + <local.k>*18> <eval 64 + <local.l>*174> <QVAL 0<tag.memberG<eval <local.k>+<local.l>*5>> ? <uid.<tag.memberG<eval <local.k>+<local.l>*5>>.name> :  - пусто -  >
 IF 0<tag.memberG<eval <local.k>+<local.l>*5>>
  IF (0<tag.memberG<eval <local.k>+<local.l>*5>> == <src.uid>)
   button <eval 35 + <local.l>*160> <eval 40 + <local.k>*18> 038 038 1 0 <eval <local.k>+<local.l>*5>
  ENDIF
 ELSEIF !( 0<src.tag.joined> )
  button <eval 35 + <local.l>*160> <eval 40 + <local.k>*18> 037 037 1 0 <eval <local.k>+<local.l>*5>
 ENDIF
ENDFOR
ENDFOR

[DIALOG d_activation BUTTON]
ON=0
color=cr_activating
name=<tag.name>
src.events -e_cr_monitor

ON={1 10}
IF 0<tag.memberG<eval <argn>>>   // ты покидаешь очередь
TRYP 0 tag.memberG<eval <argn>>
src.sysmessage @110 [SERVER] You declined to join CR tournament.
src.tag.joined=
src.events -e_cr_joined
ELSE   // записываешься
TRYP 0 tag.memberG<eval <argn>> <src.uid>
src.sysmessage @110 [SERVER] You joined CR tournament.
src.tag.joined=<eval <argn>>
src.events +e_cr_joined
ENDIF
color=cr_activating
name=<tag.name>
src.events -e_cr_monitor
RETURN 1
NFx
Евенты на то чтоб толкьо один игрок одновременно сомтрел меню стоуна + евенты чтоб выкидывало из записи тех кто помер/логаутился, т.е. неспособных к утрниру в данный момент.

Код
[EVENTS e_cr_monitor]

ON=@LOGout
TRYP 0 uid.0<tag.cr>.color 110
TRYP 0 uid.0<tag.cr>.name <uid.<tag.cr>.tag.name>
events -e_cr_monitor

ON=@death
TRYP 0 uid.0<tag.cr>.color 110
TRYP 0 uid.0<tag.cr>.name <uid.<tag.cr>.tag.name>
events -e_cr_monitor

[EVENTS e_cr_joined]

ON=@logout
TRYP 0 uid.0<tag.cr>.tag.memberG<eval <tag.joined>>
sysmessage @110 [SERVER] You declined to join CR tournament.
tag.joined=
events -e_cr_joined

ON=@death
TRYP 0 uid.0<tag.cr>.tag.memberG<eval <tag.joined>>
sysmessage @110 [SERVER] You declined to join CR tournament.
tag.joined=
events -e_cr_joined
NFx
Сам евент, деиствующий на арене, т.е. следящий за смертью/логаутом игркоов с арены + функция для победителеи

Код
[EVENTS e_cr]

ON=@death
TRYP 0 uid.<tag.cr>.tag.memberG<eval <tag.joined>>
IF 0<tag.joined> < 6
var.schet=5
ELSE
var.schet=10
ENDIF
tag.joined=
var.z=0
FOR m <eval <var.schet>-4> <eval <var.schet>>
var.z=<var.z>+0<uid.<tag.cr>.tag.memberG<eval <local.m>>>
ENDFOR
IF (<var.z> == 0)
 FOR m 1 10
  IF 0<uid.<tag.cr>.tag.memberG<eval <local.m>>>
   TRYP 0 uid.<tag.cr>.tag.memberG<eval <local.m>>.exit_arena
   TRYP 0 uid.<tag.cr>.tag.memberG<eval <local.m>>  
  ENDIF
 ENDFOR
 TRYP 0 uid.<tag.cr>.color=cr_activating
 TRYP 0 uid.<tag.cr>.name=<uid.<tag.cr>.tag.name>
 TRYP 0 uid.<tag.cr>.timer=30*60
ENDIF
karma=<tag.karma>
kills=<tag.kills>
events -e_cr
go britain
sysmessage @55 [SERVER] You've left CR.
resurrect


on=@logout
TRYP 0 uid.<tag.cr>.tag.memberG<eval <tag.joined>>
IF 0<tag.joined> < 6
var.schet=5
ELSE
var.schet=10
ENDIF
tag.joined=
var.z=0
FOR m <eval <var.schet>-4> <eval <var.schet>>
var.z=<var.z>+0<uid.<tag.cr>.tag.memberG<eval <local.m>>>
ENDFOR
IF (<var.z> == 0)
 FOR m 1 10
  IF 0<uid.<tag.cr>.tag.memberG<eval <local.m>>>
   TRYP 0 uid.<tag.cr>.tag.memberG<eval <local.m>>.exit_arena
   TRYP 0 uid.<tag.cr>.tag.memberG<eval <local.m>>  
  ENDIF
 ENDFOR
 TRYP 0 uid.<tag.cr>.color=cr_activating
 TRYP 0 uid.<tag.cr>.name=<uid.<tag.cr>.tag.name>
 TRYP 0 uid.<tag.cr>.timer=30*60
ENDIF
karma=<tag.karma>
kills=<tag.kills>
events -e_cr
sysmessage @55 [SERVER] You've left CR.
go britain

[FUNCTION exit_arena]
events -e_cr
say WINNER
kill
go britain
tag.joined=
karma=<tag.karma>
kills=<tag.kills>
sysmessage @55 [SERVER] You've won CR!
resurrect
newitem=i_gold
new.amount=1000
bounce <new.uid>
NFx
Сумки с зельями/магиеи + функция на доспехи + функция на то, чтоб вещи летели в банк перед стартом турнира

Код

[TEMPLATE cr_pack1]
CONTAINER=i_bag
ITEM=i_reag_black_pearl,20
ITEM=i_reag_blood_moss,20
ITEM=i_reag_garlic,20
ITEM=i_reag_ginseng,20
ITEM=i_reag_mandrake_root,20
ITEM=i_reag_nightshade,20
ITEM=i_reag_sulfur_ash,20
ITEM=i_reag_spider_silk,20
ITEM=i_spellbook
MORE1=0ffffffff
MORE2=0ffffffff

[TEMPLATE cr_pack2]
CONTAINER=i_bag
ITEM=i_potion_heal, 2
ITEM=i_potion_cure, 2
ITEM=i_bandage, 10
ITEM=i_potion_mana, 2

[FUNCTION cr_items]
newitem=i_backpack
equip <new.uid>
newitem=i_platemail_chest
new.color=<args>
equip <new.uid>
newitem=i_platemail_leggings
new.color=<args>
equip <new.uid>
newitem=i_platemail_arms
new.color=<args>
equip <new.uid>
newitem=i_platemail_gorget
new.color=<args>
equip <new.uid>
newitem=i_platemail_gloves
new.color=<args>
equip <new.uid>
newitem=i_platemail_helm
new.color=<args>
equip <new.uid>
newitem=i_sword_long
new.color=<args>
equip <new.uid>
newitem=i_shield_kite_metal
new.color=<args>
equip <new.uid>
newitem=i_mace
new.color=<args>
equip <new.uid>
newitem=i_bow
new.color=<args>
equip <new.uid>
newitem=i_arrow
new.amount=20
bounce <new.uid>
newitem=cr_pack1
bounce <new.uid>
newitem=cr_pack2
bounce <new.uid>

karma=<tag.karma>
kills=<tag.kills>



/////////////////////////////////
////////////////bank
//////////////////////////////
[function all_to_bank]
IF (<eval <FINDLAYER.25.UID>> >= 1)
      //findid.i_mount_selector.remove
      FINDLAYER.25.REMOVEFromview
      local.newtpmouid=<FINDLAYER.25.uid>
      FINDLAYER.25.CONT=<FINDLAYER.29>
      UID.<local.newtpmouid>.ID=<SERV.CHARDEF.<UID.<local.newtpmouid>.more1>.ICON>
      UID.<local.newtpmouid>.TYPE=t_figurine
      UID.<local.newtpmouid>.ATTR=00
  IF (<src.findlayer(21).fcount> >= 0) //|| (<weight> > 60)
       var.pack = <findlayer(21).uid>
       findlayer(layer_hand1).cont = <findlayer(21).uid>
       findlayer(layer_hand2).cont = <findlayer(21).uid>
       findlayer(layer_shoes).cont = <findlayer(21).uid>
       findlayer(layer_pants).cont = <findlayer(21).uid>
       findlayer(layer_shirt).cont = <findlayer(21).uid>
       findlayer(layer_helm).cont = <findlayer(21).uid>
       findlayer(layer_gloves).cont = <findlayer(21).uid>
       findlayer(layer_ring).cont = <findlayer(21).uid>
       findlayer(layer_collar).cont = <findlayer(21).uid>
       findlayer(layer_half_apron).cont = <findlayer(21).uid>
       findlayer(layer_chest).cont = <findlayer(21).uid>
       findlayer(layer_wrist).cont = <findlayer(21).uid>
       findlayer(layer_tunic).cont = <findlayer(21).uid>
       findlayer(layer_ears).cont = <findlayer(21).uid>
       findlayer(layer_arms).cont = <findlayer(21).uid>
       findlayer(layer_cape).cont = <findlayer(21).uid>
       findlayer(layer_legs).cont = <findlayer(21).uid>
       findlayer(layer_skirt).cont = <findlayer(21).uid>
       findlayer(layer_robe).cont = <findlayer(21).uid>
       var.packcol=<findlayer(21).color>
       findlayer(layer_pack).attr = 0
     IF (0<var.col> == 01)
          findlayer(layer_pack).name = Tournament Buffer Pack
          findlayer(layer_pack).color=451
          var.col=
     ELSE
          findlayer(layer_pack).name = Tournament Buffer Pack
          findlayer(layer_pack).color=451
     ENDIF
       findlayer(layer_pack).cont = <findlayer(layer_bankbox).uid>
       newitem=i_backpack
       new.color=<var.packcol>
       new.equip
       update
       message @91 All your items were moved to bank
       RETURN 1
  ELSE
       message @91 You have no items to move
       RETURN 0
  ENDIF
ELSE
  IF (<src.findlayer(21).fcount> >= 0) //|| (<weight> > 60)
       var.pack = <findlayer(21).uid>
       findlayer(layer_hand1).cont = <findlayer(21).uid>
       findlayer(layer_hand2).cont = <findlayer(21).uid>
       findlayer(layer_shoes).cont = <findlayer(21).uid>
       findlayer(layer_pants).cont = <findlayer(21).uid>
       findlayer(layer_shirt).cont = <findlayer(21).uid>
       findlayer(layer_helm).cont = <findlayer(21).uid>
       findlayer(layer_gloves).cont = <findlayer(21).uid>
       findlayer(layer_ring).cont = <findlayer(21).uid>
       findlayer(layer_collar).cont = <findlayer(21).uid>
       findlayer(layer_half_apron).cont = <findlayer(21).uid>
       findlayer(layer_chest).cont = <findlayer(21).uid>
       findlayer(layer_wrist).cont = <findlayer(21).uid>
       findlayer(layer_tunic).cont = <findlayer(21).uid>
       findlayer(layer_ears).cont = <findlayer(21).uid>
       findlayer(layer_arms).cont = <findlayer(21).uid>
       findlayer(layer_cape).cont = <findlayer(21).uid>
       findlayer(layer_legs).cont = <findlayer(21).uid>
       findlayer(layer_skirt).cont = <findlayer(21).uid>
       findlayer(layer_robe).cont = <findlayer(21).uid>
       var.packcol=<findlayer(21).color>
       findlayer(layer_pack).attr = 0
     IF (0<var.col> == 01)
          findlayer(layer_pack).name = Tournament Buffer Pack
          findlayer(layer_pack).color=451
          var.col=
     ELSE
          findlayer(layer_pack).name = Tournament Buffer Pack
          findlayer(layer_pack).color=451
     ENDIF
       findlayer(layer_pack).cont = <findlayer(layer_bankbox).uid>
       newitem=i_backpack
       new.color=<var.packcol>
       new.equip
       update
       message @91 All your items were moved to bank
       RETURN 1
  ELSE
       message @91 You have no items to move
       RETURN 0
  ENDIF
ENDIF
evil3
что и где подправить шоб на 55i работала без ошибок??? и ваще реально на 55i сделать такой авто турнир ??
NFx
Можно. Но тогда это такаааааая морооооооока, что лично я заниматься не намерен. Да и не тестена она еще даже похорошему, писал же
NFx
Добавил еще сообщения типо ты выиграл/выбыл при смерти/логауте и выигрыше, + проверку чтоб мертвые по камню не стучали smile.gif
Э Брат
Код

15:00:ERROR:(ctf.scp,321)Can't resolve <src.findlayer.21).fcount>
15:00:ERROR:(ctf.scp,321)Undefined symbol ''
15:00:ERROR:(ctf.scp,364)Can't resolve <src.findlayer.21).fcount>
15:00:ERROR:(ctf.scp,364)Undefined symbol ''


После окончания отчета меня кинуло в бриту и противника тоже стамина 0 которая не востановилась обратно, декс 0 тоже, госта вместе с телом выкинуло к брит банку а я остался на арене стоять ждать неизвестно чего smile.gif
Вот так правь!
yoboys
Посмотри на дату создания темы :lol2:...Если тебе нужен подобный скрипт то тебе сюда...
Э Брат
чот не глянул на дату smile.gif
и твоя ссылка не работает !
yoboys
Всё работает wink.gif Вот конкретная ссылка: http://scriptsharing.dv-team.de/dle/
Э Брат
Чот косяк какойто у половину народу не работает эта сылка sad.gif а другой половину открывает
filter
У меня всё работает ))))
Wap
Цитата(filter @ 29.4.2009, 9:11) *

У меня всё работает ))))
Я за тебя рад.
SoE
Цитата
Я за тебя рад.

За него все рады!
Цитата
У меня всё работает ))))

Почти год прошел ohmy.gif а ты только одумался
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.