pinku
Journeyman
Posts: 118
Likes Given: 4
Likes Received: 2 in 2 posts
Joined: Apr 2013
Reputation: 4
|
Automatic 1v1 and SQL
Hey everyone!
Code:
[function f_autotourney_1v1_timer]
if (<more1> == 0)
if (<more2> > 0)
serv.b Reminder: Auto 1v1 beginning in <eval <more2> / 2> minutes, type .join for more details.
//serv.b It will begin in <eval <more2> / 2> minutes
more2 -= 1
else
serv.b Auto Tourney Attempting to Begin
f_autotourney_1v1_begin
endif
elseif (<more1> == 1)
SQLSELECT select charuid from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>'
while (<SQLROWEOF> == 0) // Always check to make sure the clients are online
obj = <SQLGETFIELD.0>
if (<obj.isonline>)
//Client Is Online
//Ensure they are in the waiting area or are fighting.
if (<obj.isevent.e_autotourney_wait>)
if (<obj.p.x> == 5385) && (<obj.p.y> == 1213)
//Client is in the right location, all is good
else
obj.f_1v1_disqualify 1
endif
elseif (<obj.isevent.e_autotourney_fight>)
//Client Must be fighting, ensure they are in the arena.
if (StrMatch(*Pods,<obj.region.name>))
//All is good
else
obj.f_1v1_disqualify 4
endif
else
obj.f_1v1_disqualify 3
end
else
obj.f_1v1_disqualify 2
endif
SQLNEXTROW
endwhile
SQLSELECT select charuid from sphere_tourney where won='-1' AND num='<eval 0<var.autotourney.num>>'
while (<SQLROWEOF> == 0) // Always check to make sure the clients are online and in pods
obj = <SQLGETFIELD.0>
if (<obj.isonline>)
//if (<obj.isevent.e_autotourney_fight>)
if (StrMatch(*Pods,<obj.region.name>))
//All is good
else
obj.f_1v1_disqualify 4
endif
//else
// obj.f_1v1_disqualify 5
//endif
else
obj.f_1v1_disqualify 6
endif
SQLNEXTROW
endwhile
SQLSELECT select count(*) from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>'
if (<SQLROWEOF> == 1)
serv.b Database error.
else
local.count <SQLGETFIELD.0>
endif
if (<local.count> > 1)
SQLSELECT select charuid from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>' ORDER BY Rand() LIMIT 2
local.fight1 <SQLGETFIELD.0>
SQLNEXTROW
local.fight2 <SQLGETFIELD.0>
serv.b <eval <local.count> /2> fights remaining in this round
while (<SQLROWEOF> == 0)
SQLNEXTROW
endwhile
obj = 0400300fe
if (0<obj.tag.inuse> == 0)
//Arena1 = 0400300fe
//Slot1 = 5384 1215 1
//Slot2 = 5397 1224 1
obj.tag.inuse 1
obj.more1 1
obj.more2 10
obj.timer 1
obj.tag.fight1 <local.fight1>
obj.tag.fight2 <local.fight2>
obj = <local.fight1>
obj.p = 5384 1215 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 1
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>'
obj = <local.fight2>
obj.p = 5397 1224 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 1
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>'
timer 30
return 1
endif
obj = 0400300ed
if (0<obj.tag.inuse> == 0)
//Arena2 = 0400300ed
//Slot1 = 5399 1215 1
//Slot2 = 5411 1224 1
obj.tag.inuse 1
obj.more1 1
obj.more2 10
obj.timer 1
obj.tag.fight1 <local.fight1>
obj.tag.fight2 <local.fight2>
obj = <local.fight1>
obj.p = 5399 1215 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 2
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>'
obj = <local.fight2>
obj.p = 5411 1224 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 2
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>'
timer 30
return 1
endif
obj = 0400300e9
if (0<obj.tag.inuse> == 0)
//Arena3 = 0400300e9
//Slot1 = 5384 1228 1
//Slot2 = 5397 1237 1
obj.tag.inuse 1
obj.more1 1
obj.more2 10
obj.timer 1
obj.tag.fight1 <local.fight1>
obj.tag.fight2 <local.fight2>
obj = <local.fight1>
obj.p = 5384 1228 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 3
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>'
obj = <local.fight2>
obj.p = 5397 1237 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 3
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>'
timer 30
return 1
endif
obj = 0400300d8
if (0<obj.tag.inuse> == 0)
//Arena4 = 0400300d8
//Slot1 = 5399 1228 1
//Slot2 = 5411 1237 1
obj.tag.inuse 1
obj.more1 1
obj.more2 10
obj.timer 1
obj.tag.fight1 <local.fight1>
obj.tag.fight2 <local.fight2>
obj = <local.fight1>
obj.p = 5399 1228 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 4
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>'
obj = <local.fight2>
obj.p = 5411 1237 1
obj.update
obj.stone 1
obj.events -e_autotourney_wait
obj.events +e_autotourney_fight
obj.tag.autotourney.arena 4
SQLREQUEST UPDATE sphere_tourney set won='-1' where charuid='<obj.uid>'
timer 30
return 1
endif
elseif (<local.count> == 1)
// 0400300fe
//0400300ed
//0400300e9
//0400300d8
if (0<uid.0400300fe.tag.inuse> == 0) && (0<uid.0400300ed.tag.inuse> == 0) && (0<uid.0400300e9.tag.inuse> == 0) && (0<uid.0400300d8.tag.inuse> == 0)
SQLSELECT select count(*) from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>+1>'
if (<SQLROWEOF> == 1)
serv.b Database error.
else
local.count2 <SQLGETFIELD.0>
endif
if (<local.count2> < 1)
//The one remaining client is the winner
SQLSELECT select charuid from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>'
obj = <SQLGETFIELD.0>
serv.b <obj.name> is the last one left in round <eval 0<var.autotourney.round>>. He is the winner!
if (<var.autotourney.round>==00)
obj.newitem i_treasure_food
obj.act.cont <obj.findlayer.21.uid>
endif
if (<var.autotourney.round>==01)
obj.newitem i_treasure_large_gold
obj.act.cont <obj.findlayer.21.uid>
endif
if (<var.autotourney.round>==02)
obj.newitem i_treasure_huge_gold
obj.act.cont <obj.findlayer.21.uid>
endif
if (<var.autotourney.round>==03)
obj.newitem i_treasure_huge_gold
obj.act.cont <obj.findlayer.21.uid>
obj.newitem i_treasure_killremove_small
obj.act.cont <obj.findlayer.21.uid>
endif
if (<var.autotourney.round> > 03_
obj.newitem i_treasure_huge_gold
obj.act.cont <obj.findlayer.21.uid>
obj.newitem i_treasure_killremove_large
obj.act.cont <obj.findlayer.21.uid>
endif
obj.newitem random_statue
obj.act.color colors_rare_all
obj.act.cont <obj.findlayer.21.uid>
obj.newitem i_tourny_ticket
obj.act.cont <obj.findlayer.21.uid>
obj.events -e_autotourney_wait
obj.tsendme 1
var.autotourney
var.autotourney.started
more1 = 0
more2 = 0
timer = 60*60*3
return 1
else
SQLSELECT select charuid from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>'
obj = <SQLGETFIELD.0>
serv.b <obj.name> is the last one left in round <eval 0<var.autotourney.round>>, and will be passing into round <eval 0<var.autotourney.round>+1>
SQLREQUEST UPDATE sphere_tourney set won=1 where charuid='<obj.uid>' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>'
SQLREQUEST INSERT INTO sphere_tourney (charname, charuid, won, round, num) VALUES('<obj.name>', '<obj.uid>', '0', '<eval 0<var.autotourney.round> + 1>', '<eval 0<var.autotourney.num>>')
timer 1
return 1
endif
else
say Tourney Pods are in use.. waiting
endif
else
SQLSELECT select count(*) from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>'
//if (<SQLROWEOF> == 1)
// serv.b Database error.
//else
// local.count2 <SQLGETFIELD.0>
//endif
//if (<local.count2>==0)
// serv.b No one is left in round <eval 0<var.autotourney.round>>. There is no winner!
// var.autotourney
// more1 = 0
// more2 = 0
// timer = 60*60*8
// return 1
//endif
if (0<uid.0400300fe.tag.inuse> == 0) && (0<uid.0400300ed.tag.inuse> == 0) && (0<uid.0400300e9.tag.inuse> == 0) && (0<uid.0400300d8.tag.inuse> == 0)
timer 30
var.autotourney.round <eval 0<var.autotourney.round>+1>
serv.b End of Round <eval 0<var.autotourney.round>>, intermission will be <timer> seconds.
else
say Tourney Pods are in use.. waiting
endif
endif
//Arena1 = 04002db90
//Slot1 = 5384 1215 1
//Slot2 = 5397 1224 1
//Arena2 = 04002db1b
//Slot1 = 5399 1215 1
//Slot2 = 5411 1224 1
//Arena3 = 04002dc82
//Slot1 = 5384 1128 1
//Slot2 = 5397 1237 1
//Arena4 = 04002dc04
//Slot1 = 5399 1228 1
//Slot2 = 5411 1237 1
//say x
//var.round 0
//Intermission for first fight.
//SQLSELECT select charuid from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>' AND round='<eval 0<var.autotourney.round>>' LIMIT 2
//if (<SQLROWEOF> == 1)
// serv.b Database error.
//else
// local.char1 = <SQLGETFIELD.0>
// SQLNEXTROW
// if (<SQLROWEOF> == 1)
// local.char2 = 0 // Should never happen.
// else
// local.char2 = <SQLGETFIELD.0>
// endif
//
// serv.b Selected two random players to fight {<uid.<local.char1>.name>, <uid.<local.char2>.name> }
// more1 = 2
// while (<SQLROWEOF> == 0)
// SQLNEXTROW
// wend
//endif
endif
serv.newitem i_gold
new.p 5398, 1226, 1
new.f_autotourney_1v1_checkforcorpses
new.remove
timer 30
[function f_autotourney_1v1_checkforcorpses]
foritems 50
if (<type> == t_corpse)
removefromview
// p = 5275 1174
attr = 08010
cont = 04006bcd2
timer = -1
endif
endfor
[function f_autotourney_1v1_begin]
var.autotourney.started 1
SQLSELECT select count(*) from sphere_tourney where won='0' AND num='<eval 0<var.autotourney.num>>'
if (<SQLROWEOF> == 1)
serv.b Database error.
else
serv.b <SQLGETFIELD.0> Players currently in the tournament.
while (<SQLROWEOF> == 0)
SQLNEXTROW
end while
more1 = 1
timer = 10
serv.b Intermission for <timer> seconds until the first fight.
endif
serv.b Beta
[function f_join_1v1]
sysmessage Joining 1v1
dialog d_1v1_join
[dialog d_1v1_join]
300,300
src.dialogclose d_1v1_join
page 0
gumppic 0 0 2080
gumppic 18 37 2081
gumppic 18 107 2081
gumppic 18 177 2082
gumppic 18 247 2083
dtext 30 7 100 ColdfireUO Automated Tournement
dtext 30 7 100
dhtmlgump 30 55 240 100 1 0 You've been invited to a 1v1 tournement with the following rules, please click 'Okay' to accept. (Blue means the options are enabled)
if (<var.autotourney.flags>&01)
dtext 30 170 100 (o) Mage
else
dtext 30 170 33 (x) Mage
endif
if (<var.autotourney.flags>&02)
dtext 30 190 100 (o) Melee
else
dtext 30 190 33 (x) Melee
endif
if (<var.autotourney.flags>&04)
dtext 30 210 100 (o) Loot
else
dtext 30 210 33 (x) Loot
endif
if (<var.autotourney.flags>&08)
dtext 160 170 100 (o) No Fizzling
else
dtext 160 170 33 (x) No Fizzling
endif
if (<var.autotourney.flags>&010)
dtext 160 190 100 (o) No Healing
else
dtext 160 190 33 (x) No Healing
endif
if (<var.autotourney.flags>&020)
dtext 160 210 100 (o) Mounts
else
dtext 160 210 33 (x) Mounts
endif
button 35 255 241 242 1 0 0
button 220 255 247 248 1 0 1
//dhtmlgump 20 60 500 200 0 0 You've been invited to a ColdfireUO 1v1 Automatic tournement. The rules are as follows <qval <var.autotourney.flags>&01 ? Mage:><qval <var.autotourney.flags>&02 ? Melee:><qval <var.autotourney.flags>&04 ? Loot:No Loot><qval <var.autotourney.flags>&08 ? No fizzling :><qval <var.autotourney.flags>&010 ? No Healing :><qval <var.autotourney.flags>&020 ? With Mounts :>
[dialog d_1v1_join button]
onbutton=0
sysmessage Canceled.
onbutton=1
f_autotourney_1v1_accept
[function f_autotourney_1v1_accept]
// if !(<isgm>)
// sysmessage Testing in progress, you cannot join.
// return 1
// endif
if (<isevent.e_jail_control>)
sysmessage You are jailed, no.
return 1
endif
if (<isevent.e_autotourney_wait>)
sysmessage You are already in the tournement
return 1
endif
if (0<var.autotourney.started>)
sysmessage The tourney has already begun
return 1
endif
dispel_all
if (<flags>&statf_dead)
resurrect
endif
hits = <src.str>
stam = <src.dex>
mana = <src.int>
serv.b <Name> has joined the tournement
serv.log <Name> has joined the tournement
events +e_autotourney_wait
SQLREQUEST INSERT INTO sphere_tourney (charname, charuid, won, round, num) VALUES('<name>', '<uid>', '0', '0', '<eval 0<var.autotourney.num>>')
if (<findlayer(25)>)
if (<VAR.autotourney.flags>&020)
tag.wasmounted = 1
FLAGS &= ~statf_onhorse
else
tag.ride <findlayer(25).more2>
dclick
try uid.<tag.ride>.go 5306,1163
endif
endif
p 5385 1213 1
update
tag.tourney 1
tag.karma <karma>
tag.fame <fame>
tag.kills <kills>
[function f_autotourney_1v1_death]
//Arena1 = 04002db90
//Slot1 = 5384 1215 1
//Slot2 = 5397 1224 1
//Arena2 = 04002db1b
//Slot1 = 5399 1215 1
//Slot2 = 5411 1224 1
//Arena3 = 04002dc82
//Slot1 = 5384 1128 1
//Slot2 = 5397 1237 1
//Arena4 = 04002dc04
//Slot1 = 5399 1228 1
//Slot2 = 5411 1237 1
// 0400300fe
//0400300ed
//0400300e9
//0400300d8
doswitch <eval 0<tag.autotourney.arena>>
serv.b Error
obj = 0400300fe
obj = 0400300ed
obj = 0400300e9
obj = 0400300d8
enddo
if (<isonline>)
newitem i_res_timer
act.morep <p>
act.equip
act.timer 0
else
tag.logoutp 5380 1217 1
endif
if (<obj.tag.fight1> == <uid>)
local.winner <obj.tag.fight2>
else
local.winner <obj.tag.fight1>
endif
SERV.LOG winner = <local.winner> loser = <uid>
SQLREQUEST DELETE FROM sphere_tourney where charuid='<local.winner>' AND num='<eval 0<var.autotourney.num>>'
SQLREQUEST DELETE FROM sphere_tourney where charuid='<uid>' AND num='<eval 0<var.autotourney.num>>'
SQLREQUEST INSERT INTO sphere_tourney (charname, charuid, won, round, num) VALUES('<uid.<local.winner>.name>', '<local.winner>', '0', '<eval 0<var.autotourney.round> + 1>', '<eval 0<var.autotourney.num>>')
obj.tag.inuse
events -e_autotourney_fight
obj = <local.winner>
obj.events -e_autotourney_fight
obj.events +e_autotourney_wait
obj.p 5385 1213 1
obj.update
if (<var.autotourney.flags>&04)
newitem i_bag
act.color colors_blue
DROPALL <act.uid>
//for <eval <findlayer.21.rescount> - 1>
// if !(<findlayer.21.findcont(<local._for>).attr>&04)
// obj = <findlayer.21.findcont(<local._for>.uid>
// obj.cont <act.uid>
// endif
//endfor
for 24
if (<local._for> == 11) || (<local._for> == 9) || (<local._for> == 15) || (<local._for> == 16) || (<local._for> == 21)
//Do Nothing with this
else
if !(<findlayer(<local._for>).attr>&04)
obj = <findlayer(<local._for>).uid>
obj.removefromview
obj.cont <act.uid>
endif
endif
endfor
obj = <local.winner>
act.name <name>'s remains from tourney <eval 0<var.autotourney.num>>
act.cont <obj.findlayer.29.uid>
endif
[itemdef i_res_timer]
ID=i_memory
TYPE=t_eq_script
name=tourney res timer
on @timer
cont.p <morep>
trysrc <cont.uid> cont.tsendme 1
if (<var.autotourney.round>==0)
trysrc <cont.uid> cont.newitem i_treasure_food
trysrc <cont.uid> cont.act.cont <cont.findlayer.21.uid>
endif
if (<var.autotourney.round>==1)
trysrc <cont.uid> cont.newitem i_treasure_large_gold
trysrc <cont.uid> cont.act.cont <cont.findlayer.21.uid>
endif
if (<var.autotourney.round>==2)
trysrc <cont.uid> cont.newitem i_treasure_huge_gold
trysrc <cont.uid> cont.act.cont <cont.findlayer.21.uid>
endif
if (<var.autotourney.round>==3)
trysrc <cont.uid> cont.newitem i_treasure_huge_gold
trysrc <cont.uid> cont.act.cont <cont.findlayer.21.uid>
trysrc <cont.uid> cont.newitem i_treasure_killremove_small
trysrc <cont.uid> cont.act.cont <cont.findlayer.21.uid>
endif
if (<var.autotourney.round> > 3)
trysrc <cont.uid> cont.newitem i_treasure_huge_gold
trysrc <cont.uid> cont.act.cont <cont.findlayer.21.uid>
trysrc <cont.uid> cont.newitem i_treasure_killremove_large
trysrc <cont.uid> cont.act.cont <cont.findlayer.21.uid>
endif
remove
return 1
[function f_autotourney_start_1v1]
SQLREQUEST DELETE FROM sphere_tourney
more2 = 12
serv.b 1v1 has been selected as the auto tournement.
serv.b type .join to see more information.
//01 == Mage
//02 == Melee
var.autotourney 1
var.autotourney.started
local.rand = <eval rand(0,500)>
//Choose Mage / Melee
if (<local.rand> < 350)
local.flags <local.flags>|03 //Mage / Melee
elseif (<local.rand> < 425)
local.flags <local.flags>|01 //Mage
else
local.flags <local.flags>|02 //Melee
endif
//loot
//04 == Loot
local.rand = <eval rand(0,500)>
if (<local.rand> > 300)
local.flags <local.flags>|04
endif
//No Fizzle
//08 == No Fizzle
local.rand = <eval rand(0,500)>
if (<local.rand> > 450)
local.flags <local.flags>|08
endif
//No Heal
//010 == No Heal
local.rand = <eval rand(0,500)>
if (<local.rand> > 450)
local.flags <local.flags>|010
endif
//Mounts
//020 == Mounts allowed
//local.rand = <eval rand(0,500)>
//if (<local.rand> > 250)
// local.flags <local.flags>|020
//endif
//sysmessage <local.flags>
var.autotourney.flags <local.flags>
var.autotourney.round 0
var.autotourney.num = <Eval 0<var.autotourney.num> + 1>
SERV.LOG SQLREQUEST INSERT INTO sphere_tourney_options (num, flags) VALUES ('<eval 0<var.autotourney.num>>', '<var.autotourney.flags>')
SQLREQUEST INSERT INTO sphere_tourney_options (num, flags) VALUES ('<eval 0<var.autotourney.num>>', '<var.autotourney.flags>')
//serv.b Tournament Number: <eval 0<var.autotourney.num>>
[function f_1v1_disqualify]
if (<argn> == 1)
local.reason contestant is waiting, but not in waiting area.
elseif (<argn> == 2)
local.reason contestant is logged off
elseif (<argn> == 3)
local.reason error, user is not waiting, nore fighting.
elseif (<argn> == 4)
local.reason contestant has left pods
elseif (<argn> == 5)
local.reason contestant is in fight queue but does not have fight event
elseif (<argn> == 6)
local.reason contestant is offline during a fight.
else
local.reason unknown reason
endif
if ((<argn> > 0) && (<argn> < 4))
p = 5381 1220 1
tag.logoutp 5381 1220 1
update
serv.log SQLREQUEST DELETE FROM sphere_tourney where charuid='<uid>' AND num='<eval 0<var.autotourney.num>>'
SQLREQUEST DELETE FROM sphere_tourney where charuid='<uid>' AND num='<eval 0<var.autotourney.num>>'
elseif ((<argn> > 3) && (<argn> < 7))
p = 5381 1220 1
tag.logoutp 5381 1220 1
f_autotourney_1v1_death 1
//hits 0
serv.log SQLREQUEST DELETE FROM sphere_tourney where charuid='<uid>' AND num='<eval 0<var.autotourney.num>>'
SQLREQUEST DELETE FROM sphere_tourney where charuid='<uid>' AND num='<eval 0<var.autotourney.num>>'
endif
events -e_autotourney_wait
events -e_autotourney_fight
serv.b <name> is disqualified from the tournament <local.reason>
serv.log <name> is disqualified from the tournament <local.reason>
I got this automatic 1v1 from Coldfire's script pack and I'm having some trouble understanding some SQL terms that are on the script. Including: SQLROWEOF, SQLGETFIELD and SQLNEXTROW. The tables and everything else is fine.
When asking dagger4k (the uploader - thanks for your attention ), he said:
Quote:The thing is coldfire used a custom version of sphere 55rc3 ( i think this was the base version) to the point in which the owner added custom triggers and shortcuts that were hardcoded. Soooo I assume that these "SQLROWEOF, SQLGETFIELD and SQLNEXTROW" are some of those custom triggers.
And yes, I checked again and they are hardcoded.
Now, I know it's probably hard to figure out what the author did, but does anyone know ways to script around this or at least have guess?
Thanks everyone!
|
|