- Joined
- Apr 29, 2007
- Messages
- 826
- Message Queueing -
OH MY GAWD, not that guy again. Yes. Seriously.
This time with something, I don't know if I could really say useful, well it's simple. It allows you to queue text messages up. Why would anyone need this? err, yeah. I needed this because I had an text message showing up the whole game, I just updated the text of it. So imagine you're creating another text message. Right! It moves up. And because we don't want that, we use my system to queue the new text message in there. And depending on the order selected(no you cant specify it by numbers yet, I was too lazy) it will be under/over it.
Enough talked, just review the script. It isn't very long.
And because I for one like cJass
OH MY GAWD, not that guy again. Yes. Seriously.
This time with something, I don't know if I could really say useful, well it's simple. It allows you to queue text messages up. Why would anyone need this? err, yeah. I needed this because I had an text message showing up the whole game, I just updated the text of it. So imagine you're creating another text message. Right! It moves up. And because we don't want that, we use my system to queue the new text message in there. And depending on the order selected(no you cant specify it by numbers yet, I was too lazy) it will be under/over it.
Enough talked, just review the script. It isn't very long.
JASS:
library_once MeQ
globals
private constant real INTERVAL = 0.15
private constant real DEFAULT_TIME = 5
private constant real DEFAULT_X = 0
private constant real DEFAULT_Y = 0
private constant force DEFAULT_FORCE = bj_FORCE_ALL_PLAYERS
private constant boolean REVERSE = true
endglobals
private keyword queue
globals
queue Queue
queue MessageQueue
endglobals
private struct queue extends array
readonly static integer counter = 0
private static hashtable hash
private static method onInit takes nothing returns nothing
set .hash = InitHashtable()
call TimerStart(CreateTimer(), INTERVAL, true, function thistype.display)
endmethod
private static method display takes nothing returns nothing
local integer i
local integer k = -1
local string msg
call ClearTextMessages()
if REVERSE then
set i = .counter
loop
set i = i-1
exitwhen i <= -1
set msg = LoadStr(.hash, i, 0)
if IsPlayerInForce(GetLocalPlayer(), LoadForceHandle(.hash, StringHash(msg), 5)) then
call DisplayTimedTextToPlayer(GetLocalPlayer(), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
endif
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1) then
call .deleteMessage(i)
endif
endloop
else
set i = -1
loop
set i = i+1
exitwhen i >= .counter
set msg = LoadStr(.hash, i, 0)
if IsPlayerInForce(GetLocalPlayer(), LoadForceHandle(.hash, StringHash(msg), 5)) then
call DisplayTimedTextToPlayer(GetLocalPlayer(), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
endif
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1) then
call .deleteMessage(i)
endif
endloop
endif
endmethod
static method registerMessage takes string msg, real time, real x, real y, force to returns integer
call SaveStr(.hash, .counter, 0, msg)
call SaveInteger(.hash, StringHash(msg), 0, .counter)
call SaveReal(.hash, StringHash(msg), 1, time)
call SaveReal(.hash, StringHash(msg), 2, 0)
call SaveReal(.hash, StringHash(msg), 3, x)
call SaveReal(.hash, StringHash(msg), 4, y)
call SaveForceHandle(.hash, StringHash(msg), 5, to)
set .counter = .counter+1
return .counter-1
endmethod
static method updateMessage takes integer ptr, string msg returns nothing
call SaveInteger(.hash, StringHash(msg), 0, ptr)
call SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 1))
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 2))
call SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 3))
call SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 4))
call SaveForceHandle(.hash, StringHash(msg), 5, LoadForceHandle(.hash, StringHash(LoadStr(.hash, ptr, 0)), 5))
call SaveStr(.hash, ptr, 0, msg)
endmethod
static method updateByMessage takes string oldmsg, string newmsg returns nothing
call .updateMessage(.findMessage(oldmsg), newmsg)
endmethod
static method deleteMessage takes integer ptr returns nothing
local integer i = ptr-1
local string msg
if LoadStr(.hash, ptr, 0) == "" or ptr < 0 or .counter <= 0 then
return
endif
loop
set i = i+1
exitwhen i >= .counter
call SaveStr(.hash, i, 0, LoadStr(.hash, i+1, 0))
set msg = LoadStr(.hash, i, 0)
call SaveInteger(.hash, StringHash(msg), 0, i)
call SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(msg), 1))
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2))
call SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(msg), 3))
call SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(msg), 4))
call SaveForceHandle(.hash, StringHash(msg), 5, LoadForceHandle(.hash, StringHash(LoadStr(.hash, ptr, 0)), 5))
endloop
set .counter = .counter-1
endmethod
static method deleteByMessage takes string msg returns nothing
call .deleteMessage(.findMessage(msg))
endmethod
static method findMessage takes string msg returns integer
local integer i = -1
loop
set i = i+1
exitwhen i >= .counter
if LoadStr(.hash, i, 0) == msg then
return LoadInteger(.hash, StringHash(LoadStr(.hash, i, 0)), 0)
endif
endloop
return -1
endmethod
endstruct
function RegisterMessage takes string msg, real time, real x, real y, force to returns integer
return Queue.registerMessage(msg, time, x, y, to)
endfunction
function UpdateMessage takes integer ptr, string msg returns nothing
call Queue.updateMessage(ptr, msg)
endfunction
function UpdateByMessage takes string oldstr, string newstr returns nothing
call Queue.updateByMessage(oldstr, newstr)
endfunction
function DeleteMessage takes integer ptr returns nothing
call Queue.deleteMessage(ptr)
endfunction
function DeleteByMessage takes string msg returns nothing
call Queue.deleteByMessage(msg)
endfunction
function FindMessage takes string msg returns integer
return Queue.findMessage(msg)
endfunction
endlibrary
JASS:
library_once MeQ
globals
private constant real INTERVAL = 0.15
private constant real DEFAULT_TIME = 5
private constant real DEFAULT_X = 0
private constant real DEFAULT_Y = 0
private constant boolean REVERSE = true
endglobals
private keyword queue
globals
queue array Queue
queue array MessageQueue
endglobals
private struct queue
readonly integer counter = 0
readonly timer t = null
private static hashtable hash
private static method onInit takes nothing returns nothing
local integer i = -1
local timer t
loop
set i = i+1
exitwhen i >= 12
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
set Queue[i] = thistype.allocate()
set MessageQueue[i] = Queue[i]
endif
endloop
set .hash = InitHashtable()
endmethod
private static method display takes nothing returns nothing
local thistype this = LoadInteger(.hash, GetHandleId(GetExpiredTimer()), 0)
local integer i
local integer k = -1
local string msg
call ClearTextMessages()
if REVERSE then
set i = .counter
loop
set i = i-1
exitwhen i <= -1
set msg = LoadStr(.hash, i, this)
call DisplayTimedTextToPlayer(Player(this-1), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1) then
call .deleteMessage(i)
endif
endloop
else
set i = -1
loop
set i = i+1
exitwhen i >= .counter
set msg = LoadStr(.hash, i, this)
call DisplayTimedTextToPlayer(Player(this-1), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1) then
call .deleteMessage(i)
endif
endloop
endif
if .counter == 0 then
call ClearTextMessages()
call PauseTimer(.t)
endif
endmethod
method registerMessage takes string msg, real time, real x, real y returns integer
call SaveStr(.hash, .counter, this, msg)
call SaveInteger(.hash, StringHash(msg), 0, .counter)
call SaveReal(.hash, StringHash(msg), 1, time)
call SaveReal(.hash, StringHash(msg), 2, 0)
call SaveReal(.hash, StringHash(msg), 3, x)
call SaveReal(.hash, StringHash(msg), 4, y)
if .counter == 0 then
if .t == null then
set .t = CreateTimer()
call SaveInteger(.hash, GetHandleId(.t), 0, this)
endif
call TimerStart(.t, INTERVAL, true, function thistype.display)
endif
set .counter = .counter+1
return .counter-1
endmethod
method updateMessage takes integer ptr, string msg returns nothing
call SaveInteger(.hash, StringHash(msg), 0, ptr)
call SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 1))
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 2))
call SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 3))
call SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 4))
call SaveStr(.hash, ptr, 0, msg)
endmethod
method updateByMessage takes string oldmsg, string newmsg returns nothing
call .updateMessage(.findMessage(oldmsg), newmsg)
endmethod
method deleteMessage takes integer ptr returns nothing
local integer i = ptr-1
local string msg
if LoadStr(.hash, ptr, this) == "" or ptr < 0 or .counter <= 0 then
return
endif
loop
set i = i+1
exitwhen i >= .counter
call SaveStr(.hash, i, this, LoadStr(.hash, i+1, this))
set msg = LoadStr(.hash, i, this)
call SaveInteger(.hash, StringHash(msg), 0, i)
call SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(msg), 1))
call SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2))
call SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(msg), 3))
call SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(msg), 4))
endloop
set .counter = .counter-1
endmethod
method deleteByMsg takes string msg returns nothing
call .deleteMessage(.findMessage(msg))
endmethod
method findMessage takes string msg returns integer
local integer i = -1
loop
set i = i+1
exitwhen i >= .counter
if LoadStr(.hash, i, this) == msg then
return LoadInteger(.hash, StringHash(LoadStr(.hash, i, 0)), 0)
endif
endloop
return -1
endmethod
endstruct
function RegisterMessage takes string msg, real time, real x, real y, queue to returns integer
return to.registerMessage(msg, time, x, y)
endfunction
function UpdateMessage takes integer ptr, string msg, queue to returns nothing
call to.updateMessage(ptr, msg)
endfunction
function UpdateByMessage takes string oldstr, string newstr, queue to returns nothing
call to.updateByMessage(oldstr, newstr)
endfunction
function DeleteMessage takes integer ptr, queue to returns nothing
call to.deleteMessage(ptr)
endfunction
function DeleteByMessage takes string msg, queue to returns nothing
call to.deleteByMsg(msg)
endfunction
function FindMessage takes string msg, queue to returns integer
return to.findMessage(msg)
endfunction
endlibrary
And because I for one like cJass
JASS:
#include "cj_types.j"
#include "cj_typesEX.j"
library_once MeQ
{
#define
{
private INTERVAL = 0.15
private DEFAULT_TIME = 5
private DEFAULT_X = 0
private DEFAULT_Y = 0
private DEFAULT_FORCE = bj_FORCE_ALL_PLAYERS
private REVERSE = true
}
private keyword queue
queue Queue
queue MessageQueue
#define
{
<Queue.registerMessage>(msg) = Queue##.registerMessage(msg, DEFAULT_TIME, DEFAULT_X, DEFAULT_Y, DEFAULT_FORCE)
<Queue.registerMessage>(msg, time) = Queue##.registerMessage(msg, time, DEFAULT_X, DEFAULT_Y, DEFAULT_FORCE)
<Queue.registerMessage>(msg, x, y) = Queue##.registerMessage(msg, DEFAULT_TIME, x, y, DEFAULT_FORCE)
<Queue.registerMessage>(msg, time, x, y) = Queue##.registerMessage(msg, time, x, y, DEFAULT_FORCE)
<Queue.registerMessage>(msg, time, x, y, to) = Queue##.registerMessage(msg, time, x, y, to)
<MessageQueue.registerMessage>(msg) = MessageQueue##.registerMessage(msg, DEFAULT_TIME, DEFAULT_X, DEFAULT_Y, DEFAULT_FORCE)
<MessageQueue.registerMessage>(msg, time) = MessageQueue##.registerMessage(msg, time, DEFAULT_X, DEFAULT_Y, DEFAULT_FORCE)
<MessageQueue.registerMessage>(msg, x, y) = MessageQueue##.registerMessage(msg, DEFAULT_TIME, x, y, DEFAULT_FORCE)
<MessageQueue.registerMessage>(msg, time, x, y) = MessageQueue##.registerMessage(msg, time, x, y, DEFAULT_FORCE)
<MessageQueue.registerMessage>(msg, time, x, y, to) = MessageQueue##.registerMessage(msg, time, x, y, to)
<RegisterMessage>(msg) = Register##Message(msg, DEFAULT_TIME, DEFAULT_X, DEFAULT_Y, DEFAULT_FORCE)
<RegisterMessage>(msg, time) = Register##Message(msg, time, DEFAULT_X, DEFAULT_Y, DEFAULT_FORCE)
<RegisterMessage>(msg, x, y) = Register##Message(msg, DEFAULT_TIME, x, y, DEFAULT_FORCE)
<RegisterMessage>(msg, time, x, y) = Register##Message(msg, time, x ,y, DEFAULT_FORCE)
<RegisterMessage>(msg, time, x, y, to) = Register##Message(msg, time, x ,y, to)
}
private struct queue extends array
{
readonly static int counter = 0
private static hashtable hash
private static void onInit()
{
.hash = new hashtable
TimerStart(new timer, INTERVAL, true, function thistype.display)
}
private static void display()
{
int i
int k = -1
string msg
ClearTextMessages()
if REVERSE
{
i = .counter
do
{
exitwhen --i <= -1
msg = LoadStr(.hash, i, 0)
if IsPlayerInForce(GetLocalPlayer(), LoadForceHandle(.hash, StringHash(msg), 5))
{
DisplayTimedTextToPlayer(GetLocalPlayer(), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
}
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1)
{
.deleteMessage(i)
}
}
}
else
{
i = -1
do
{
exitwhen ++i >= .counter
msg = LoadStr(.hash, i, 0)
if IsPlayerInForce(GetLocalPlayer(), LoadForceHandle(.hash, StringHash(msg), 5))
{
DisplayTimedTextToPlayer(GetLocalPlayer(), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
}
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1)
{
.deleteMessage(i)
}
}
}
}
static int registerMessage(string msg, float time, float x, float y, force to)
{
SaveStr(.hash, .counter, 0, msg)
SaveInteger(.hash, StringHash(msg), 0, .counter)
SaveReal(.hash, StringHash(msg), 1, time)
SaveReal(.hash, StringHash(msg), 2, 0)
SaveReal(.hash, StringHash(msg), 3, x)
SaveReal(.hash, StringHash(msg), 4, y)
SaveForceHandle(.hash, StringHash(msg), 5, to)
.counter++
return .counter-1
}
static void updateMessage(int ptr, string msg)
{
SaveInteger(.hash, StringHash(msg), 0, ptr)
SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 1))
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 2))
SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 3))
SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 4))
SaveForceHandle(.hash, StringHash(msg), 5, LoadForceHandle(.hash, StringHash(LoadStr(.hash, ptr, 0)), 5))
SaveStr(.hash, ptr, 0, msg)
}
static void updateByMessage(string oldmsg, string newmsg)
{
.updateMessage(.findMessage(oldmsg), newmsg)
}
static void deleteMessage(int ptr)
{
int i = ptr-1
string msg
if LoadStr(.hash, ptr, 0) == "" || ptr < 0 || .counter <= 0 {return}
do
{
exitwhen ++i >= .counter
SaveStr(.hash, i, 0, LoadStr(.hash, i+1, 0))
msg = LoadStr(.hash, i, 0)
SaveInteger(.hash, StringHash(msg), 0, i)
SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(msg), 1))
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2))
SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(msg), 3))
SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(msg), 4))
SaveForceHandle(.hash, StringHash(msg), 5, LoadForceHandle(.hash, StringHash(LoadStr(.hash, ptr, 0)), 5))
}
.counter--
}
static void deleteByMsg(string msg)
{
.deleteMessage(.findMessage(msg))
}
static int findMessage(string msg)
{
int i = -1
do
{
exitwhen ++i >= .counter
if LoadStr(.hash, i, 0) == msg {return LoadInteger(.hash, StringHash(LoadStr(.hash, i, 0)), 0)}
}
return -1
}
}
int RegisterMessage(string msg, float time, float x, float y, force to)
{
return Queue.registerMessage(msg, time, x, y, to)
}
void UpdateMessage(int ptr, string msg)
{
Queue.updateMessage(ptr, msg)
}
void UpdateByMessage(string oldstr, string newstr)
{
Queue.updateByMessage(oldstr, newstr)
}
void DeleteMessage(int ptr)
{
Queue.deleteMessage(ptr)
}
void DeleteByMessage(string msg)
{
Queue.deleteByMsg(msg)
}
int FindMessage(string msg)
{
return Queue.findMessage(msg)
}
}
JASS:
#include "cj_types.j"
#include "cj_typesEX.j"
library_once MeQ
{
#define
{
private INTERVAL = 0.15
private DEFAULT_TIME = 5
private DEFAULT_X = 0
private DEFAULT_Y = 0
private REVERSE = true
}
private keyword queue
queue array Queue
queue array MessageQueue
private struct queue
{
readonly int counter = 0
readonly timer t = null
private static hashtable hash
private static void onInit()
{
int i = -1
timer t
do
{
exitwhen ++i >= 12
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING
{
Queue[i] = thistype.allocate()
MessageQueue[i] = Queue[i]
}
}
.hash = new hashtable
}
private static void display()
{
thistype this = LoadInteger(.hash, GetHandleId(GetExpiredTimer()), 0)
int i
int k = -1
string msg
ClearTextMessages()
if REVERSE
{
i = .counter
do
{
exitwhen --i <= -1
msg = LoadStr(.hash, i, this)
DisplayTimedTextToPlayer(Player(this-1), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1)
{
.deleteMessage(i)
}
}
}
else
{
i = -1
do
{
exitwhen ++i >= .counter
msg = LoadStr(.hash, i, this)
DisplayTimedTextToPlayer(Player(this-1), LoadReal(.hash, StringHash(msg), 3), LoadReal(.hash, StringHash(msg), 4), INTERVAL, msg)
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2)+INTERVAL)
if LoadReal(.hash, StringHash(msg), 2) >= LoadReal(.hash, StringHash(msg), 1)
{
.deleteMessage(i)
}
}
}
if .counter == 0 {ClearTextMessages(); PauseTimer(.t)}
}
int registerMessage(string msg, float time, float x, float y)
{
SaveStr(.hash, .counter, this, msg)
SaveInteger(.hash, StringHash(msg), 0, .counter)
SaveReal(.hash, StringHash(msg), 1, time)
SaveReal(.hash, StringHash(msg), 2, 0)
SaveReal(.hash, StringHash(msg), 3, x)
SaveReal(.hash, StringHash(msg), 4, y)
if .counter == 0
{
if .t == null
{
.t = new timer
SaveInteger(.hash, GetHandleId(.t), 0, this)
}
TimerStart(.t, INTERVAL, true, function thistype.display)
}
.counter++
return .counter-1
}
void updateMessage(int ptr, string msg)
{
SaveInteger(.hash, StringHash(msg), 0, ptr)
SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 1))
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 2))
SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 3))
SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(LoadStr(.hash, ptr, 0)), 4))
SaveStr(.hash, ptr, 0, msg)
}
void updateByMessage(string oldmsg, string newmsg)
{
.updateMessage(.findMessage(oldmsg), newmsg)
}
void deleteMessage(int ptr)
{
integer i = ptr-1
string msg
if LoadStr(.hash, ptr, 0) == "" || ptr < 0 || .counter <= 0 {return}
do
{
exitwhen ++i >= .counter
SaveStr(.hash, i, this, LoadStr(.hash, i+1, this))
msg = LoadStr(.hash, i, this)
SaveInteger(.hash, StringHash(msg), 0, i)
SaveReal(.hash, StringHash(msg), 1, LoadReal(.hash, StringHash(msg), 1))
SaveReal(.hash, StringHash(msg), 2, LoadReal(.hash, StringHash(msg), 2))
SaveReal(.hash, StringHash(msg), 3, LoadReal(.hash, StringHash(msg), 3))
SaveReal(.hash, StringHash(msg), 4, LoadReal(.hash, StringHash(msg), 4))
}
.counter--
}
void deleteByMsg(string msg)
{
.deleteMessage(.findMessage(msg))
}
int findMessage(string msg)
{
int i = -1
do
{
exitwhen ++i >= .counter
if LoadStr(.hash, i, this) == msg {return LoadInteger(.hash, StringHash(LoadStr(.hash, i, 0)), 0)}
}
return -1
}
}
int RegisterMessage(string msg, float time, float x, float y, queue to)
{
return to.registerMessage(msg, time, x, y)
}
void UpdateMessage(int ptr, string msg, queue to)
{
to.updateMessage(ptr, msg)
}
void UpdateByMessage(string oldstr, string newstr, queue to)
{
to.updateByMessage(oldstr, newstr)
}
void DeleteMessage(int ptr, queue to)
{
to.deleteMessage(ptr)
}
void DeleteByMessage(string msg, queue to)
{
to.deleteByMsg(msg)
}
int FindMessage(string msg, queue to)
{
return to.findMessage(msg)
}
}
Last edited: