|
Lua Addon Ideas
Bismarck.Drakelth
Server: Bismarck
Game: FFXI
Posts: 734
By Bismarck.Drakelth 2021-08-21 03:41:42
I figured, it would be a nice QoL update from SE though
Asura.Wotasu
Server: Asura
Game: FFXI
Posts: 342
By Asura.Wotasu 2021-08-21 04:49:54
Something to remove animation-lock with. Totaly ruins the game when you have like 30 adds. Already has existed for the past decade JaZero(Plugin). This is detectable server-side, right? More so that it is visibly noticeable for everyone watching you moving around during weaponskills/JA's the magic casting end animation etc.
Bismarck.Drakelth said: »I figured, it would be a nice QoL update from SE though This was addressed by SE I think somewhere, they felt that XI should be a slower pace game.
By Shichishito 2021-08-21 12:25:25
I get it but it also sounds very botty or at least would be used by botters. i see your point but there are other addons in the windower client that make botting easier and it didn't stop them to release them nor to change their minds later and remove them.
By Wiking 2021-08-21 15:26:50
Slower pace? Why'd they give us +25% movement speed and basically teleport everywhere then -.-.
By mhomho 2021-08-21 15:45:07
I just want AutoRA to keep firing. Basically, I want it to auto ranged attack and continue past 1000TP and after I weaponskill have it return to auto ranged attacking.
I fiddled with it some and found it could be set to auto past 1000TP, but after weaponskilling it stopped. I guess I could make the macro send console commands to weaponskill and then input ara start again.
By Shichishito 2021-08-21 15:51:02
Slower pace? Why'd they give us +25% movement speed and basically teleport everywhere then -.-. well befor the movement speed this game was basically slowmo. however thats how it usually goes, the community makes a QoL update suggestion and the devs say no and hide behind some arbitrary "reason".
thats code for laughing in ppls face and following up with gtfo. not sure why ppl still show up to those Q and As.
By DaneBlood 2021-08-21 21:47:38
I don't know if this is possible, but an addon that overrides examination messages and instead autotrades correct items to ???s(for spawns/quests/whatever else) if check them with the proper items inventory would be nice.
Yeah that would e the most totally awesome add-on ever
New Add-on: Sir PopaLot : https://ffxiah.com/forum/topic/55597/new-add-on-sir-popalot/
Currently its all hardcoded so i have to add in all the things by Hands but its pretty nifty and supports all abyssea and ZNM pops and some other quest related trades
It does requires the tradeNPC add'on being installed as well
and HTMB if you want the grab KI part to work as well
[+]
By Wiking 2021-08-22 04:24:06
Any addon out there that keeps track of Assault missions or adoulin quests etc? so it's easier to figure out where to go next.
By Tathamet 2021-08-22 13:26:30
For adoulin quest and coalitions at least: https://github.com/Ivaar/Windower-addons/tree/master/QuestLog
I don't know of anything similar existing for assaults.
[+]
By RadialArcana 2021-08-23 07:45:20
How difficult would it be to create a lua to stop specific sound effect file from loading in a specific zone?
Bismarck.Xurion
Server: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2021-08-23 08:14:31
How difficult would it be to create a lua to stop specific sound effect file from loading in a specific zone? Someone hates the fireworks.
By RadialArcana 2021-08-23 09:43:36
Wanting to remove the water sound effect in Windurst Mog house.
I know what file it is but if you mod it, then water effects in other areas of the world are changed too.
I already modded the firework sounds xD
Bismarck.Xurion
Server: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2021-08-23 11:54:12
Wanting to remove the water sound effect in Windurst Mog house.
I know what file it is but if you mod it, then water effects in other areas of the world are changed too.
I already modded the firework sounds xD Do share!
By RadialArcana 2021-08-23 12:55:36
Wanting to remove the water sound effect in Windurst Mog house.
I know what file it is but if you mod it, then water effects in other areas of the world are changed too.
I already modded the firework sounds xD Do share!
PlayOnline\SquareEnix\FINAL FANTASY XI\sound\win\se\se034\
se034071.spw (boom firework noise)
se034072.spw (crackle firework noise)
Don't forget to log all the way out of the game and back in, these are loaded near the start and stay in memory so any changes won't have any effect till you restart
[+]
By Wiking 2021-08-24 04:06:07
Thanks!!
By RadialArcana 2021-09-03 06:51:29
I find the way FFXI displays the story to be pretty poor honestly, the way it fills the chat box with the dialogue tends to ruin the overall immersion into the story. Since you're getting /yell or /party chat that you forgot to turn off. The font is bad too.
Other games do this far better, could a simple textured and moveable text box be created as an addon that intercepts all story text and displays it as shown in the image below with a scrollbar?
[+]
Bismarck.Xurion
Server: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2021-09-03 08:11:22
I've seen an implementation of the FF14 NPC dialog overlay (yellow rounded container with text) as an addon about a year ago iirc. I'm not sure what it was called or if it even got completed, but it was pretty good looking.
VIP
Server: Fenrir
Game: FFXI
Posts: 719
By Fenrir.Niflheim 2021-09-03 15:00:38
I've seen an implementation of the FF14 NPC dialog overlay (yellow rounded container with text) as an addon about a year ago iirc. I'm not sure what it was called or if it even got completed, but it was pretty good looking. Balloon, it is a JP addon. A person named Yuki on the windower disord did some work to add English handling to the addon.
Here was their most recent post regarding their efforts: https://discord.com/channels/338590234235371531/641259466494574602/879961675569197076
[+]
By RadialArcana 2021-09-03 15:59:33
That looks pretty great.
By Tathamet 2021-09-03 17:08:19
Like so? (Edit: ha beaten to the punch, I should F5 my tabs more often)
Not my work, but it was recently posted in the Windower discord: https://cdn.discordapp.com/attachments/641259466494574602/879961675678220338/Balloon.zip
[+]
By RadialArcana 2021-09-03 18:54:17
Only problems with it seem to be that sometimes the text box disappears at the start of a conversation with an npc sometimes (possibly linked to a yell or something happening at the same time?), also it doesn't display quotation marks. It shows a square icon, which I suppose is due to JP language or maybe a font issue.
Another bug is if a word appears with a hyphen between them it breaks past the confines of the text box, depending on the position of this in the conversation.
Added a different texture to the box
By Draylo 2021-09-03 20:17:59
Wow that is really cool, I always disliked how it used the regular chat box. Before they separated the chat boxes into two, it was a real annoyance if there was spamming or people talking. Is this addon functional?
By RadialArcana 2021-09-04 08:57:38
This is not my code or addon at all but I noticed this issue with the addon posted above and modified by Yuki.
What would be causing this issue, with the plugin not properly displaying quotation marks?
LUA code below [code]-- Copyright 2018, Hando
-- Copyright 2021, Yuki
-- All rights reserved.
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are met:
-- * Redistributions of source code must retain the above copyright
-- notice, this list of conditions and the following disclaimer.
-- * Redistributions in binary form must reproduce the above copyright
-- notice, this list of conditions and the following disclaimer in the
-- documentation and/or other materials provided with the distribution.
-- * Neither the name of Balloon nor the
-- names of its contributors may be used to endorse or promote products
-- derived from this software without specific prior written permission.
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- DISCLAIMED. IN NO EVENT SHALL Hando BE LIABLE FOR ANY
-- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--
_addon.author = 'Hando / Modified for English client by Yuki / String code from Kenshi'
_addon.name = 'Balloon'
_addon.version = '0.8'
_addon.commands = {'Balloon','Bl'}
require('chat')
config = require('config')
texts = require('texts')
images = require('images')
windower_settings = windower.get_windower_settings()
center_screen = windower_settings.ui_x_res / 2
ui_scale = { x = windower_settings.x_res / windower_settings.ui_x_res ,
y = windower_settings.y_res / windower_settings.ui_y_res }
BalloonY = windower_settings.ui_y_res - 258
bl_debug = 0
defaults = {}
defaults.blswitch = 2
defaults.pos = {}
defaults.pos.x = center_screen - 280
defaults.pos.y = BalloonY - 4
defaults.text = {}
defaults.text.font = 'Segoe UI'
defaults.text.size = 11
defaults.text.red = 0
defaults.text.green = 0
defaults.text.blue = 0
defaults.text.alpha = 255
defaults.bg = {}
defaults.bg.visible = false
defaults.flags = {}
defaults.flags.draggable = false
defaults.blImage = {}
defaults.blImage.color = {}
defaults.blImage.color.alpha = 255
defaults.blImage.color.red = 255
defaults.blImage.color.green = 255
defaults.blImage.color.blue = 255
defaults.blImage.visible = true
defaults.blImage.pos = {}
defaults.blImage.pos.x = center_screen - 330
defaults.blImage.pos.y = BalloonY
defaults.name = {}
defaults.name.pos = {}
defaults.name.pos.x = center_screen - 280
defaults.name.pos.y = BalloonY - 10
defaults.name.text = {}
defaults.name.text.font = 'Segoe UI'
defaults.name.text.size = 16
defaults.name.text.red = 255
defaults.name.text.green = 255
defaults.name.text.blue = 255
defaults.name.text.alpha = 255
defaults.name.bg = {}
defaults.name.bg.visible = false
defaults.name.text.stroke = {}
defaults.name.text.stroke.width = 2
defaults.name.text.stroke.alpha = 200
defaults.name.text.stroke.red = 0
defaults.name.text.stroke.green = 0
defaults.name.text.stroke.blue = 0
defaults.name.text.visible = true
defaults.name.flags = {}
defaults.name.flags.draggable = false
local settings = config.load(defaults)
settings.blImage.texture = {}
settings.blImage.texture.path = windower.addon_path..'balloon.png'
settings.blImage.texture.fit = true
settings.blImage.size = {}
settings.blImage.size.height = 127
settings.blImage.size.width = 647
settings.blImage.draggable = true
settings.blImage.repeatable = {}
settings.blImage.repeatable.x = 1
settings.blImage.repeatable.y = 1
local Balloon_name = texts.new(settings.name)
local Balloon_txt = texts.new(settings)
local Balloon_Image = images.new(settings.blImage)
--Balloon_Image:pos( center_screen - 330,510)
local moving = false
local old_x = "0"
local old_y = "0"
local balloon_on = false
local keydown = false
local keyup = false
mouseON = 0
-------------------------------------------------------------------------------
windower.register_event('load',function()
--スレッド開始 (Thread start)
thread_id = coroutine.schedule(moving_check,0)
end)
function moving_check()
local p = windower.ffxi.get_player()
local me,x,y
while true do
me = windower.ffxi.get_mob_by_id(p.id)
if me ~= nil then
x = string.format("%6d",me.x)
y = string.format("%6d",me.y)
--if x ~= old_x and y ~= old_y then
if (tonumber(x) < tonumber(old_x) - 1 or tonumber(x) > tonumber(old_x) + 1) or (tonumber(y) < tonumber(old_y) - 1 or tonumber(y) > tonumber(old_y) + 1) then
moving = true
old_y = y
old_x = x
else
moving = false
end
end
--wait
coroutine.sleep(1)
if moving == true then close_balloon() end
end
end
windower.register_event('unload', function()
config.save(settings)
end)
windower.register_event('incoming chunk',function(id,original,modified,injected,blocked)
--会話中かの確認 (Check if you are in a conversation)
if (id == 82) then
if (bl_debug ==2 ) then print("**chunk** id: " .. id,"original: " .. original) end
close_balloon()
elseif id == 0xB then
close_balloon()
end
end)
--閉じる (close)
function close_balloon()
Balloon_Image:hide()
Balloon_name:clear()
Balloon_txt:clear()
balloon_on = false
end
windower.register_event('incoming text',function(original,modified,original_mode,modified_mode,blocked)
if not ( S{150,151,142,190,144}[original_mode] ) then return end
if ( bl_debug == 1 ) then print("** Mode: " .. original_mode , "Text: '" .. original .."'") end
if ( bl_debug == 1 ) then
local teststr = ""
for i = 1, #original do
local c = string.byte(original:sub(i,i),1)
-- do something with c
teststr = teststr .. (original:sub(i,i) .. "(" .. c .. ")")
end
print("codes: " .. teststr)
end
local noenter = true
local endchar1 = string.byte(original:sub(string.len(original)-1,string.len(original)-1),1)
local endchar2 = string.byte(original:sub(string.len(original),string.len(original)),1)
local startchar1 = string.byte(original:sub(1,1),1)
local startchar2 = string.byte(original:sub(2,2),1)
if (endchar1 == 127 and endchar2 == 49 and not S{144}[original_mode]) or (startchar1 == 30 and startchar2 == 1) then
noenter = false
end
local npcname = ""
local result = original
if ( S{150,151,142,190,144}[original_mode] ) and (settings.blswitch >= 1)then
-- 発言者名の抽出 (Speaker name extraction)
s,e = original:find(".- : ")
npcname = ""
if s ~= nil then
if e < 32 and s > 0 then npcname = original:sub(s,e) end
end
Balloon_name:clear()
Balloon_name:append(npcname:sub(0,string.len(npcname)-2))
if npcname =="" then
result = "" .. "\n"
else
result = original:sub(string.len(original)-1,string.len(original))
--original = original:sub(0,string.len(original)-2)
--original = original:strip_format()
if ( bl_debug == 1 ) then print("Pre-shift-jis: " .. original) end
original = SubElements(original)
mes = windower.from_shift_jis(original) --utf8へ変換 (Convert to utf8)
if ( bl_debug == 1 ) then print("Pre-ctrl char cut: " .. mes) end
mes = mes:strip_format() --制御文字カット (Control character cut)
end
--print(result)
if settings.blswitch == 2 then result = modified or original end
--print(result)
-- 発言 (Remark)
original = SubElements(original)
mes = windower.from_shift_jis(original)
if npcname ~= "" then
mes = mes:gsub(npcname:gsub("-","--"),"") --タルタル等対応 (Correspondence such as tartar)
end
mess = split(mes,"")
Balloon_txt:clear()
if ( bl_debug == 1 ) then print("Pre-process: " .. mes) end
--local mes_len = string.len(mes)
--mes = string.gsub(mes, "", " ")
----mes = string.gsub(mes, "", "\\cs(84,155,17)")
----mes = string.gsub(mes, "", "\\cs(97,127,217)")
----mes = string.gsub(mes, "", "\\cs(0,0,0)")
--mes = string.gsub(mes, "1", "")
--mes = string.gsub(mes, "4", "")
--mes = string.gsub(mes, "", "")
--mes = string.gsub(mes, "", "")
--mes = string.gsub(mes, "6", "")
--mes = string.gsub(mes, "^?", "")
--mes = string.gsub(mes, " ", "")
--mes = string.gsub(mes, "", "")
--mes = string.gsub(mes, "", "")
--mes = string.gsub(mes, "", "")
--mes = string.gsub(mes, "5", "")
--mes = string.gsub(mes, string.char(187), "\"")
--mes = string.gsub(mes, string.char(131), "")
--mes = string.gsub(mes, string.char(227), "")
--mes = " " .. mes
--mes = SplitLines(mes, mes_len)
--mes = string.gsub(mes, "", "\\cs(84,155,17)")
--mes = string.gsub(mes, "", "\\cs(97,127,217)")
--mes = string.gsub(mes, "", "\\cs(0,0,0)")
--Balloon_txt:append('\n%s':format(mes))
for k,v in ipairs(mess) do
v = string.gsub(v, "", "ɑ") --colour code 1
v = string.gsub(v, "", "β") --colour code 2
v = string.gsub(v, "", "ɣ") --colour code 3
v = string.gsub(v, "1", "")
v = string.gsub(v, "4", "")
v = string.gsub(v, "", "")
v = string.gsub(v, "", "")
v = string.gsub(v, "6", "")
v = string.gsub(v, "^?", "")
v = string.gsub(v, " ", "")
v = string.gsub(v, "", "")
v = string.gsub(v, "", "")
v = string.gsub(v, "", "")
v = string.gsub(v, "5", "")
v = " " .. v
v = SplitLines(v, string.len(v))
v = string.gsub(v, "ɑ", "\\cs(84,155,17)")
v = string.gsub(v, "β", "\\cs(97,127,217)")
v = string.gsub(v, "ɣ", "\\cs(0,0,0)")
Balloon_txt:append('\n%s':format(v))
end
update()
Balloon_name:show()
Balloon_Image:show()
Balloon_txt:show()
balloon_on = true
--if S{144}[original_mode] then
if noenter == true then
coroutine.sleep(5)
close_balloon()
end
end
return(result)
end)
windower.register_event('keyboard',function(dik,pressed,flags,blocked)
if windower.ffxi.get_info().chat_open or blocked then return end
if balloon_on == true then
--print("dik:", dik, "pressed:", pressed, "flags:", flags, "blocked:", blocked)
if dik == 28 and pressed and not keydown then
keydown = true
close_balloon()
end
end
if dik ==28 and not pressed then keydown = false end
end)
function SubElements(str)
local new_str = str
if bl_debug == 1 then print("Pre-elementsub: " .. new_str) end
new_str = string.gsub(new_str, string.char(239) .. "\"", "Earth ") -- ɑEarth ɣ
new_str = string.gsub(new_str, string.char(239) .. "%$", "Water ")
new_str = string.gsub(new_str, string.char(239) .. "&", "Dark ")
new_str = string.gsub(new_str, string.char(239) .. "", "Fire ")
new_str = string.gsub(new_str, string.char(239) .. " ", "Ice ")
new_str = string.gsub(new_str, string.char(239) .. "!", "Wind ")
new_str = string.gsub(new_str, string.char(239) .. "#", "Lightning ")
new_str = string.gsub(new_str, string.char(239) .. "%%", "Light ")
if bl_debug == 1 then print("Post-elementsub: " .. new_str) end
return new_str
end
function SplitLines(str, length)
local new_str = str
local splits = length/75
local position = 75
while splits > 0 do
local pos = string.find(new_str, ' ', position)
if pos then
new_str = new_str:gsub('()',{[pos]='\n'})
position = pos + 71
end
splits = splits - 1
end
if splits < 1 then
return new_str
end
end
function split(str, delim)
-- Eliminate bad cases...
if string.find(str, delim) == nil then
return { str }
end
local result = {}
local pat = "(.-)" .. delim .. "()"
local lastPos
for part, pos in string.gfind(str, pat) do
table.insert(result, part)
lastPos = pos
end
table.insert(result, string.sub(str, lastPos))
return result
end
windower.register_event("addon command", function(command,arg1)
if command == 'help' then
local t = {}
t[#t+1] = "Balloon(Bl)" .. "Ver." .._addon.version
t[#t+1] = " <コマンド> (<Command>)"
t[#t+1] = " //Balloon 0 :吹き出し非表示&ログ表示 (Hiding balloon & displaying log)"
t[#t+1] = " //Balloon 1 :吹き出し表示&ログ非表示 (Show balloon & hide log)"
t[#t+1] = " //Balloon 2 :吹き出し表示&ログ表示 (Balloon display & log display)"
t[#t+1] = " //Balloon reset :吹き出し位置初期化 (Initialize balloon position)"
t[#t+1] = " "
for tk,tv in pairs(t) do
windower.add_to_chat(207, windower.to_shift_jis(tv))
end
elseif command == '1' then
settings.blswitch = 1
printFF11("モード (mode) 1 :吹き出し表示&ログ非表示 (Show balloon & hide log)")
elseif command == '0' then
settings.blswitch = 0
printFF11("モード (mode) 0 :吹き出し非表示&ログ表示 (Hiding balloon & displaying log)")
elseif command == '2' then
settings.blswitch = 2
printFF11("モード (mode) 2 :吹き出し表示&ログ表示 (Balloon display & log display)")
elseif command == 'reset' then
settings.blImage.pos.x = center_screen - 330
settings.blImage.pos.y = BalloonY
printFF11("Balloon位置リセットしました。 (Balloon position reset.)")
elseif command == 'debug' and arg1 ~= nil then
bl_debug = tonumber(arg1)
print( "Balloon: debug " .. bl_debug )
end
config.save(settings)
end)
windower.register_event("mouse",function(type,x,y,delta,blocked)
if type == 1 then
mouseON = 1
end
if type == 2 then
mouseON = 0
config.save(settings)
end
if mouseON == 1 then
update()
end
end)
function printFF11( text )
windower.add_to_chat(207, windower.to_shift_jis(text))
end
function update()
settings.pos.x = settings.blImage.pos.x + 50
settings.pos.y = settings.blImage.pos.y - 4
Balloon_txt:pos( settings.pos.x, settings.pos.y)
settings.name.pos.x = settings.blImage.pos.x + 50
settings.name.pos.y = settings.blImage.pos.y - 10
Balloon_name:pos( settings.name.pos.x, settings.name.pos.y)
Balloon_Image:pos(settings.blImage.pos.x,settings.blImage.pos.y)
end
By RadialArcana 2021-09-04 09:01:03
Wow that is really cool, I always disliked how it used the regular chat box. Before they separated the chat boxes into two, it was a real annoyance if there was spamming or people talking. Is this addon functional?
Yeah give it a try, it's pretty cool actually. Still some bugs with it, but it works well enough.
Just put the balloon folder in your addon folder and type //lua l balloon
Original video
YouTube Video Placeholder
Bismarck.Xurion
Server: Bismarck
Game: FFXI
Posts: 694
By Bismarck.Xurion 2021-09-04 14:25:58
My guess is the Segoe UI font that the addon uses doesn't have that particular character defined. There are a bunch of different quote characters, such as "these" vs “these”.
[+]
By RadialArcana 2021-09-05 04:52:25
Tried changing the font, also tried removing the font so it changes to default but still does the little squares.
Any idea which font might work?
Shiva.Thorny
Server: Shiva
Game: FFXI
Posts: 2801
By Shiva.Thorny 2021-09-05 05:58:19
Might be better off just replacing weird characters with more standard ones as they come up. You could set up a replacement table in the addon.
[+]
By DaneBlood 2021-09-05 13:52:11
Tried changing the font, also tried removing the font so it changes to default but still does the little squares.
Any idea which font might work?
well ti mgiht not just be the font. the problme can also be related to if its in Ascii (256 characters/1byte per chracter) or UTF16 ( 2 bytes poer character)
if one is only handlgin the font in Ascii mode. character outside the range that it can handle in the font is not supported
By Draylo 2021-09-05 22:09:50
I think this addon is very cool after using it, haven't enjoyed one like this since xicamera. Where are the rest of the secret JP addons
[+]
By RadialArcana 2021-09-06 10:34:36
This balloon addon is amazing, I love it. It changes the whole feel of the game when talking to an NPC, makes it feel like a normal offline rpg and picking up story from npcs instead of mashing it into the chat box. The way FFXI displays story has never felt good to me, this changes that for the better.
I made some changes to the addon for my own use, if anyone wants a link to it send me a PM. Posted it here originally but I cant' contact Yuki to ask if it's ok so removed the link.
[+]
Hello everyone!
With the exposed action packet come a much larger range of potential Lua addons that windower users can create. Because FFXIAH has a up-voting system and this handy subforum, I think making a thread here for people to post their plugin ideas in (and get voted on) would be useful.
For more information on what is possible with Lua, see the wiki:
https://github.com/Windower/Lua/wiki
Lua can use all the information obtained from Input Interface Functions to react at times defined by Events in ways limited to the Output Interface Functions.
For instance, I am currently writing an addition to battlemod that will allow it to display skillchain damage even when the skillchain is blocked by blinking. I do this using "event_action" for the closing weapon skill, which contains the skillchain information that is sometimes blocked. I then output this to the chat log using the output interface function "add_to_chat" and block the original message (if it would have displayed) using the "event_incoming_text".
When making posts in this thread, don't worry too much about going through the wiki and making sure something is possible before you suggest it. Just throw the idea out there and see how many votes it gets. However, be aware that some things are impossible because your client does not receive the required information.
Please limit yourself to one idea per post so that it is possible to vote on your ideas.
|
|