If you want to add something to the prompt, create a trigger. Leave the pattern BLANK. Set the type to 'prompt'.
Then put: cecho('<somecolour>WHATEVER') into the script.
Obviously, adjust that to put useful info into it. If you want to replace the existing prompt, there are various ways to do it and you need to be more specific with your question.
I'm trying to write a multiline trigger that captures the whohere and sends an alert when a target is seen. I'm also trying to write one to know when a room is empty. I set these up as multiline triggers but they don't seem to fire properly.
For the second trigger I'm doing: You can see these other people here: [exact match] 1 [line spacer] Health(.*) [perl regex]
Would you feel comfortable using gmcp instead? The following code populates a list of names present in the room (whohere.all) The 3 functions run when gmcp data is updated.
The whohere.parse() function is not included as it sorts the names (alliers, enemies, unknowns) and displays them in my UI - not something useful to you.
I left it in there though so you can see where you'd put a similar function of your own - in your case testing each name against a list of enemies and then whatever your alert is.
Also, a table remove tool I use in the whohere script, even though I don't remember why I use it here instead of just table.remove()
Disclaimer: it's only a couple of days old and I'm not 100% sure I did the remove player function correctly. It seems to work but somehow doesn't seem quite right to me.
whohere = whohere or {}
function whohere.players()
whohere.all = {}
names = gmcp.Room.Players
for _,player in ipairs(names) do
table.insert(whohere.all, player.name)
end
whohere.parse()
end
function whohere.addplayer()
names = gmcp.Room.AddPlayer
if not table.contains(whohere.all,names.name) then
table.insert(whohere.all, names.name)
end
whohere.parse()
end
function whohere.remplayer()
table.removeall(whohere.all, gmcp.Room.RemovePlayer)
whohere.parse()
end
registerAnonymousEventHandler('gmcp.Room.Players', function() whohere.players() end )
registerAnonymousEventHandler('gmcp.Room.AddPlayer', function() whohere.addplayer() end )
registerAnonymousEventHandler('gmcp.Room.RemovePlayer', function() whohere.remplayer() end )
--remove all instances of value V from indexed table T
function table.removeall(t,v)
for i,val in ipairs(t) do
if v == val then
table.remove(t,i)
end
end
end
You need to use the gmod functions. When you log in, you need to use gmod.enableModule.
<code> gmod.enableModule("any_name_you_want", "IRE.Targets") end --disable first in case you've logged out so when you enable it it works (there may be a proper to do this)<br>function enableIRETargets()<br> gmod.disableModule("any_name_you_want", "IRE.Targets")<br>
After that, you need to tell the server what you want to target.
function requestTargetFromServer(targetID)<br> sendGMCP(string.format([[IRE.Target.Set "%s"]], targetID))<br>end<br>
Once the server gets back to you, which is typically the prompt following your request, you will have the following table available: gmcp.IRE.Target.Info
You'll need to make a prompt trigger to have it echo on your prompt. You could simply run the following function on a prompt trigger:
function echoTargetHealthPercentOnPrompt()<br> local target = gmcp.IRE.Target.Info<br><br> --if the target is still alive<br> if target.id ~= "" then<br> echo(string.format(": Target: %s (%s%s)", target.id, target.hpperc, "%"))<br> end<br>end<br>
So, in order:
enableIRETargets() after you log in
requestTargetFromServer(targetID) when you've picked a target
have a prompt trigger run echoTargetHealthPercentOnPrompt()
You'll of course want to use these in conjunction with aliases, triggers, or events. Whatever you have set up!
function echoTargetHealthPercentOnPrompt()<br> local target = gmcp.IRE.Target.Info<br><br> --if the target is still alive<br> if target.id ~= "" then<br> echo(string.format(": Target: %s (%s%s)", target.id, target.hpperc, "%"))<br> end<br>end
I made my own, but had a question about this. target.id doesn't clear when the mob dies, so I'm perpetually stuck with the target % it died at on my prompt. Suggestions?
function echoTargetHealthPercentOnPrompt()<br> local target = gmcp.IRE.Target.Info<br><br> --if the target is still alive<br> if target.id ~= "" then<br> echo(string.format(": Target: %s (%s%s)", target.id, target.hpperc, "%"))<br> end<br>end
I made my own, but had a question about this. target.id doesn't clear when the mob dies, so I'm perpetually stuck with the target % it died at on my prompt. Suggestions?
You could write an event handler for gmcp.Char.Items.List.Remove.
function gmcpItemRemoved()<br> local item = gmcp.Char.Items.Remove<br><br> if item.location == "room" then<br> if item.item.id == gmcp.IRE.Target.Set<br> targetExists = false<br> end<br> end<br>end<br>
You could set targetExists = true when setting a new target and use the above event handler know when the target dies.
I'm not certain why your target.id isn't being cleared, though. For me, gmcp.IRE.Target.Info.id is equal to "" right after my target dies and I just check against that.
If you're having trouble, though, I'd definitely recommend implementing an event handler as mentioned above since it's the most reliable way to know if your target has died or left the room.
So, someone asked me how to do a gradual color shift and I honestly have no idea. I come to ask for help. How would I get something to shift colors gradually so that the shift takes about a second to go from (arbitrary colors) blue (0,0,255) to yellow (250, 255, 0)?
Now if I wanted to write something that would print entryOne and entryTwo as echo links that would display their respective values, how would I do that? The closest I came was to get them all to link to the exact same thing. Now my brain is fried and it's time to seek help!
Just wanted to note that I could not get the sendGMCP method of setting IRE.Target to work, but enabling the gmod then using the settarget (blah) server alias did the trick.
print entryOne and entryTwo as echo links that would display their respective values,
Not entirely sure what you're after, nor where you're going wrongm but a little tip when playing around with echoLink (and other instances where you need to define a function as a string) is to use string.format to keep it much more readable, and obvious when you're missing quotes, or have too many.
The other gotcha in a script like this is to remember that local vars in the loop structure will not be available to the clickable link function thingy. So you can't use display(list) in the following piece of code, you need to reference myTable directly, as it is global.
The following works when I paste it into my own scripts folder.
myTable = {
entryOne = {
"some",
"stuff",
},
entryTwo = {
"another",
"thing",
},
}
for tname,list in pairs(myTable) do
local cmd = string.format([[display(myTable['%s'])]], tname)
cechoLink('\nmyTable.' .. tname, cmd, 'Click to display the table.', true)
end
Comments
Then put: cecho('<somecolour>WHATEVER')
into the script.
Obviously, adjust that to put useful info into it.
If you want to replace the existing prompt, there are various ways to do it and you need to be more specific with your question.
For the second trigger I'm doing:
You can see these other people here: [exact match]
1 [line spacer]
Health(.*) [perl regex]
Multi line and trigger is checked.
The following code populates a list of names present in the room (whohere.all)
The 3 functions run when gmcp data is updated.
The whohere.parse() function is not included as it sorts the names (alliers, enemies, unknowns) and displays them in my UI - not something useful to you.
I left it in there though so you can see where you'd put a similar function of your own - in your case testing each name against a list of enemies and then whatever your alert is.
Also, a table remove tool I use in the whohere script, even though I don't remember why I use it here instead of just table.remove()
Disclaimer: it's only a couple of days old and I'm not 100% sure I did the remove player function correctly. It seems to work but somehow doesn't seem quite right to me.
After that, you need to tell the server what you want to target.
Once the server gets back to you, which is typically the prompt following your request, you will have the following table available: gmcp.IRE.Target.Info
You'll need to make a prompt trigger to have it echo on your prompt. You could simply run the following function on a prompt trigger:
So, in order:
- enableIRETargets() after you log in
- requestTargetFromServer(targetID) when you've picked a target
- have a prompt trigger run echoTargetHealthPercentOnPrompt()
You'll of course want to use these in conjunction with aliases, triggers, or events. Whatever you have set up!You could set targetExists = true when setting a new target and use the above event handler know when the target dies.
I'm not certain why your target.id isn't being cleared, though. For me, gmcp.IRE.Target.Info.id is equal to "" right after my target dies and I just check against that.
If you're having trouble, though, I'd definitely recommend implementing an event handler as mentioned above since it's the most reliable way to know if your target has died or left the room.
http://doc.qt.io/qt-5/qtquick-animation-example.html
Seems neat, did not know Qt had animation.
entryOne = {
"some",
"stuff",
},
entryTwo = {
"another",
"thing",
},
}
Now if I wanted to write something that would print entryOne and entryTwo as echo links that would display their respective values, how would I do that? The closest I came was to get them all to link to the exact same thing. Now my brain is fried and it's time to seek help!
Not entirely sure what you're after, nor where you're going wrongm but a little tip when playing around with echoLink (and other instances where you need to define a function as a string) is to use string.format to keep it much more readable, and obvious when you're missing quotes, or have too many.
The other gotcha in a script like this is to remember that local vars in the loop structure will not be available to the clickable link function thingy. So you can't use display(list) in the following piece of code, you need to reference myTable directly, as it is global.
The following works when I paste it into my own scripts folder.