Objects for setting up a player collection using relay

Moderator: MacroQuest Developers

selu989
orc pawn
orc pawn
Posts: 18
Joined: Wed Sep 15, 2004 1:55 pm

Objects for setting up a player collection using relay

Post by selu989 » Sun Aug 06, 2006 10:11 am

small sample code and a basic object for passing player data between sessions/computers and a small player object to hold the data.

Code: Select all



function main()
{
	echo start!
	declare players collection:player script
	declare com comms script
	
	while 1
	{
		com:pulse
		wait 20
		echo .............................
		echo ${com.connected} connected players..
		com:print
		
	}
	
}

;atoms used for passing data using the relay commands
atom(global) update(string pname, int tid, int pid, int chp,int mmana, string ho, int mhp, int cmana, int cast, string comb)
{
	
	if !${players.Element[${pname}](exists)} 
				{
					players:Set[${pname}]
				}
			
	players.Element[${pname}]:update[${pname},${tid},${pid},${chp},${mmana},${ho},${mhp},${cmana},${cast},${comb}]
	
}

atom(global) removeme(string pname)
{
	
	players:Erase[${pname}]
}

; comm objject
objectdef comms
{
	
	variable string myHome = ${SettingXML[InnerSpace.XML].Set[Remote].GetString[Name].Escape}.${Session}
	
	member:int connected()
	{
		variable int count = 0
		if ${players.FirstKey(exists)}
		{
			count:Inc
			while ${players.NextKey(exists)}
			count:Inc
			
		}
		
		return ${count}
	}
	method pulse()
	{
		if ${players.FirstKey(exists)}
			{
				do
				{	
					
					relay ${players.CurrentValue.host} update ${Me.Name} ${Target.ID} ${Me.ID} ${Me.CurrentHPs} ${Me.MaxMana} ${myHome} ${Me.MaxHPs} ${Me.CurrentMana} ${Me.Casting.ID} ${Me.Combat}
												
				}
				while ${players.NextKey(exists)}
			
			}
	}
	
		
	method print()
	{
		if ${players.FirstKey(exists)}
					{
						do
						{
							echo Name:${players.CurrentValue.name} TargetID:${players.CurrentValue.target} playerid:${players.CurrentValue.playerid} currHP:${players.CurrentValue.currhp} MaxHp:${players.CurrentValue.maxhp} MaxMana:${players.CurrentValue.maxmana} CurrMana:${players.CurrentValue.currentmana} Casting:${Spell[${players.CurrentValue.casting}].Name} combat:${players.CurrentValue.combat}
							
						}
						while ${players.NextKey(exists)}
					
			}
		else
			echo No Players connected!
		
	}
	
	method Initialize()
	{
		relay all squelch update ${Me.Name} ${Target.ID} ${Me.ID} ${Me.CurrentHPs} ${Me.MaxMana} ${myHome} ${Me.MaxHPs} ${Me.CurrentMana} ${Me.Casting.ID}
	}
	
	method Shutdown()
	{
		if ${players.FirstKey(exists)}
			{
						do
						{	
							if ${Me.Name.NotEqual[${players.CurrentValue.name}]}
							{
								relay ${players.CurrentValue.host} removeme ${Me.Name} 
								echo Sending disconnect to ${players.CurrentValue.host}...
							}
							
						}
						while ${players.NextKey(exists)}
					
			}
	}
}

;player object
objectdef player
{
	variable string plname
	variable string host
	variable int targetid
	variable int playerid
	variable int currhp
	variable int maxhp
	variable int currmana
	variable int maxmana
	variable int casting
	variable bool combat
	
	
method update(string pname, int tid, int pid, int chp,int mmana, string ho, int mhp, int cmana, int cast,string comb)
{
	plname:Set[${pname}]
	targetid:Set[${tid}]
	playerid:Set[${pid}]
	currhp:Set[${chp}]
	maxmana:Set[${mmana}]
	host:Set[${ho}]
	maxhp:Set[${mhp}]
	currmana:Set[${cmana}]
	casting:Set[${cast}]
	if ${comb.Equal[TRUE]}
		combat:Set[TRUE]
	else
		combat:Set[FALSE]
		
}


	member:int target()
	{
		return ${targetid}
	}

	member:int playerid()
	{
		return ${playerid}
	}

	member:int currhp()
	{
		return ${currhp}
	}

	member:int maxmana()
	{
		return ${maxmana}
	}

	member name()
	{
		return ${plname}
	}
	
	member host()
	{
		return ${host}
	}
	
	member:int currentmana()
	{
		return ${currmana}
	}

	member:int maxhp()
	{
		return ${maxhp}
	}
	
	member:int casting()
	{
		return ${casting}
	}
	
	member:int pcthp()
	{
		return ${Math.Calc[${currhp}/${maxhp}*100].Int}
	}
	
	member:int pctmana()
	{
		return ${Math.Calc[${currmana}/${maxmana}*100].Int}
	}
	
	member:bool combat()
	{
		return ${combat}
	}
}
*note*
Im using a external players collection to hold the data (see main declaration) and the comms object is hardcoded to work against that. works for my little bot setup.

Mind the linewrap there is a few really long lines in the code.

xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:16 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:17 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:19 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:20 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:21 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:22 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:23 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:24 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:25 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 7:27 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 8:04 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 8:05 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 8:06 am


xyilla
naggy
naggy
Posts: 33673
Joined: Sun Feb 23, 2025 5:36 am

Re: Objects for setting up a player collection using relay

Post by xyilla » Thu Jul 24, 2025 8:07 am