• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Simple Guild Title Module [OTCV8] [TFS 1.4.2]

I wonder since im using 7.72 could use like the emblems from later version instead of the guild name?

like this local emblemPath = "/images/game/emblems/emblem_member.png" and if from an other guild "/images/game/emblems/emblem_other.png"

1717335616347.png
 
I helped some guys who have a base on TFS 1.5, Nekiro 8.6, and 7.7.2 as well.

It's a very simple process... just download the json.lua file, move it to data/lib/core, and you're done.

It depends on the TFS version that works... for example, I use TFS 1.4.3, and this directory path works perfectly for me. However, for Nekiro 1.5 and some other bases, it won't work. You need to change it to global.lua and add this... You don't need to add 'data\lib\core.lua' anymore, just global.lua and restart... Test it to see if it works well, 100%.
View attachment 84965
global.lua.
LUA:
dofile('data/lib/core/json.lua')
core.lua
LUA:
dofile('data/lib/core/vocation.lua')
dofile('data/lib/core/json.lua')
dofile('data/lib/core/string.lua')
json.lua
JSON:
--
-- json.lua
--
-- Copyright (c) 2018 rxi
--
-- Permission is hereby granted, free of charge, to any person obtaining a copy of
-- this software and associated documentation files (the "Software"), to deal in
-- the Software without restriction, including without limitation the rights to
-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-- of the Software, and to permit persons to whom the Software is furnished to do
-- so, subject to the following conditions:
--
-- The above copyright notice and this permission notice shall be included in all
-- copies or substantial portions of the Software.
--
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-- SOFTWARE.
--

json = { _version = "0.1.1" }

-------------------------------------------------------------------------------
-- Encode
-------------------------------------------------------------------------------

local encode

local escape_char_map = {
  [ "\\" ] = "\\\\",
  [ "\"" ] = "\\\"",
  [ "\b" ] = "\\b",
  [ "\f" ] = "\\f",
  [ "\n" ] = "\\n",
  [ "\r" ] = "\\r",
  [ "\t" ] = "\\t",
}

local escape_char_map_inv = { [ "\\/" ] = "/" }
for k, v in pairs(escape_char_map) do
  escape_char_map_inv[v] = k
end


local function escape_char(c)
  return escape_char_map[c] or string.format("\\u%04x", c:byte())
end


local function encode_nil(val)
  return "null"
end


local function encode_table(val, stack)
  local res = {}
  stack = stack or {}

  -- Circular reference?
  if stack[val] then error("circular reference") end

  stack[val] = true

  if val[1] ~= nil or next(val) == nil then
    -- Treat as array -- check keys are valid and it is not sparse
    local n = 0
    for k in pairs(val) do
      if type(k) ~= "number" then
        error("invalid table: mixed or invalid key types")
      end
      n = n + 1
    end
    if n ~= #val then
      error("invalid table: sparse array")
    end
    -- Encode
    for i, v in ipairs(val) do
      table.insert(res, encode(v, stack))
    end
    stack[val] = nil
    return "[" .. table.concat(res, ",") .. "]"

  else
    -- Treat as an object
    for k, v in pairs(val) do
      if type(k) ~= "string" then
        error("invalid table: mixed or invalid key types")
      end
      table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
    end
    stack[val] = nil
    return "{" .. table.concat(res, ",") .. "}"
  end
end


local function encode_string(val)
  return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
end


local function encode_number(val)
  -- Check for NaN, -inf and inf
  if val ~= val or val <= -math.huge or val >= math.huge then
    error("unexpected number value '" .. tostring(val) .. "'")
  end
  return string.format("%.14g", val)
end


local type_func_map = {
  [ "nil"     ] = encode_nil,
  [ "table"   ] = encode_table,
  [ "string"  ] = encode_string,
  [ "number"  ] = encode_number,
  [ "boolean" ] = tostring,
}


encode = function(val, stack)
  local t = type(val)
  local f = type_func_map[t]
  if f then
    return f(val, stack)
  end
  error("unexpected type '" .. t .. "'")
end


function json.encode(val)
  return ( encode(val) )
end


-------------------------------------------------------------------------------
-- Decode
-------------------------------------------------------------------------------

local parse

local function create_set(...)
  local res = {}
  for i = 1, select("#", ...) do
    res[ select(i, ...) ] = true
  end
  return res
end

local space_chars   = create_set(" ", "\t", "\r", "\n")
local delim_chars   = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
local escape_chars  = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
local literals      = create_set("true", "false", "null")

local literal_map = {
  [ "true"  ] = true,
  [ "false" ] = false,
  [ "null"  ] = nil,
}


local function next_char(str, idx, set, negate)
  for i = idx, #str do
    if set[str:sub(i, i)] ~= negate then
      return i
    end
  end
  return #str + 1
end


local function decode_error(str, idx, msg)
  local line_count = 1
  local col_count = 1
  for i = 1, idx - 1 do
    col_count = col_count + 1
    if str:sub(i, i) == "\n" then
      line_count = line_count + 1
      col_count = 1
    end
  end
  error( string.format("%s at line %d col %d", msg, line_count, col_count) )
end


local function codepoint_to_utf8(n)
  -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
  local f = math.floor
  if n <= 0x7f then
    return string.char(n)
  elseif n <= 0x7ff then
    return string.char(f(n / 64) + 192, n % 64 + 128)
  elseif n <= 0xffff then
    return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
  elseif n <= 0x10ffff then
    return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
                       f(n % 4096 / 64) + 128, n % 64 + 128)
  end
  error( string.format("invalid unicode codepoint '%x'", n) )
end


local function parse_unicode_escape(s)
  local n1 = tonumber( s:sub(3, 6),  16 )
  local n2 = tonumber( s:sub(9, 12), 16 )
  -- Surrogate pair?
  if n2 then
    return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
  else
    return codepoint_to_utf8(n1)
  end
end


local function parse_string(str, i)
  local has_unicode_escape = false
  local has_surrogate_escape = false
  local has_escape = false
  local last
  for j = i + 1, #str do
    local x = str:byte(j)

    if x < 32 then
      decode_error(str, j, "control character in string")
    end

    if last == 92 then -- "\\" (escape char)
      if x == 117 then -- "u" (unicode escape sequence)
        local hex = str:sub(j + 1, j + 5)
        if not hex:find("%x%x%x%x") then
          decode_error(str, j, "invalid unicode escape in string")
        end
        if hex:find("^[dD][89aAbB]") then
          has_surrogate_escape = true
        else
          has_unicode_escape = true
        end
      else
        local c = string.char(x)
        if not escape_chars[c] then
          decode_error(str, j, "invalid escape char '" .. c .. "' in string")
        end
        has_escape = true
      end
      last = nil

    elseif x == 34 then -- '"' (end of string)
      local s = str:sub(i + 1, j - 1)
      if has_surrogate_escape then
        s = s:gsub("\\u[dD][89aAbB]..\\u....", parse_unicode_escape)
      end
      if has_unicode_escape then
        s = s:gsub("\\u....", parse_unicode_escape)
      end
      if has_escape then
        s = s:gsub("\\.", escape_char_map_inv)
      end
      return s, j + 1

    else
      last = x
    end
  end
  decode_error(str, i, "expected closing quote for string")
end


local function parse_number(str, i)
  local x = next_char(str, i, delim_chars)
  local s = str:sub(i, x - 1)
  local n = tonumber(s)
  if not n then
    decode_error(str, i, "invalid number '" .. s .. "'")
  end
  return n, x
end


local function parse_literal(str, i)
  local x = next_char(str, i, delim_chars)
  local word = str:sub(i, x - 1)
  if not literals[word] then
    decode_error(str, i, "invalid literal '" .. word .. "'")
  end
  return literal_map[word], x
end


local function parse_array(str, i)
  local res = {}
  local n = 1
  i = i + 1
  while 1 do
    local x
    i = next_char(str, i, space_chars, true)
    -- Empty / end of array?
    if str:sub(i, i) == "]" then
      i = i + 1
      break
    end
    -- Read token
    x, i = parse(str, i)
    res[n] = x
    n = n + 1
    -- Next token
    i = next_char(str, i, space_chars, true)
    local chr = str:sub(i, i)
    i = i + 1
    if chr == "]" then break end
    if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
  end
  return res, i
end


local function parse_object(str, i)
  local res = {}
  i = i + 1
  while 1 do
    local key, val
    i = next_char(str, i, space_chars, true)
    -- Empty / end of object?
    if str:sub(i, i) == "}" then
      i = i + 1
      break
    end
    -- Read key
    if str:sub(i, i) ~= '"' then
      decode_error(str, i, "expected string for key")
    end
    key, i = parse(str, i)
    -- Read ':' delimiter
    i = next_char(str, i, space_chars, true)
    if str:sub(i, i) ~= ":" then
      decode_error(str, i, "expected ':' after key")
    end
    i = next_char(str, i + 1, space_chars, true)
    -- Read value
    val, i = parse(str, i)
    -- Set
    res[key] = val
    -- Next token
    i = next_char(str, i, space_chars, true)
    local chr = str:sub(i, i)
    i = i + 1
    if chr == "}" then break end
    if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
  end
  return res, i
end


local char_func_map = {
  [ '"' ] = parse_string,
  [ "0" ] = parse_number,
  [ "1" ] = parse_number,
  [ "2" ] = parse_number,
  [ "3" ] = parse_number,
  [ "4" ] = parse_number,
  [ "5" ] = parse_number,
  [ "6" ] = parse_number,
  [ "7" ] = parse_number,
  [ "8" ] = parse_number,
  [ "9" ] = parse_number,
  [ "-" ] = parse_number,
  [ "t" ] = parse_literal,
  [ "f" ] = parse_literal,
  [ "n" ] = parse_literal,
  [ "[" ] = parse_array,
  [ "{" ] = parse_object,
}


parse = function(str, idx)
  local chr = str:sub(idx, idx)
  local f = char_func_map[chr]
  if f then
    return f(str, idx)
  end
  decode_error(str, idx, "unexpected character '" .. chr .. "'")
end


function json.decode(str)
  if type(str) ~= "string" then
    error("expected argument of type string, got " .. type(str))
  end
  local res, idx = parse(str, next_char(str, 1, space_chars, true))
  idx = next_char(str, idx, space_chars, true)
  if idx <= #str then
    decode_error(str, idx, "trailing garbage")
  end
  return res
end

global.lua
Code:
math.randomseed(os.time())
dofile('data/lib/lib.lua')
dofile('data/lib/core/json.lua')

guild title response
Code:
response = "setGuildNick",
get no title
 
core.lua
LUA:
dofile('data/lib/core/vocation.lua')
dofile('data/lib/core/json.lua')
dofile('data/lib/core/string.lua')
json.lua
JSON:
--
-- json.lua
--
-- Copyright (c) 2018 rxi
--
-- Permission is hereby granted, free of charge, to any person obtaining a copy of
-- this software and associated documentation files (the "Software"), to deal in
-- the Software without restriction, including without limitation the rights to
-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-- of the Software, and to permit persons to whom the Software is furnished to do
-- so, subject to the following conditions:
--
-- The above copyright notice and this permission notice shall be included in all
-- copies or substantial portions of the Software.
--
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-- SOFTWARE.
--

json = { _version = "0.1.1" }

-------------------------------------------------------------------------------
-- Encode
-------------------------------------------------------------------------------

local encode

local escape_char_map = {
  [ "\\" ] = "\\\\",
  [ "\"" ] = "\\\"",
  [ "\b" ] = "\\b",
  [ "\f" ] = "\\f",
  [ "\n" ] = "\\n",
  [ "\r" ] = "\\r",
  [ "\t" ] = "\\t",
}

local escape_char_map_inv = { [ "\\/" ] = "/" }
for k, v in pairs(escape_char_map) do
  escape_char_map_inv[v] = k
end


local function escape_char(c)
  return escape_char_map[c] or string.format("\\u%04x", c:byte())
end


local function encode_nil(val)
  return "null"
end


local function encode_table(val, stack)
  local res = {}
  stack = stack or {}

  -- Circular reference?
  if stack[val] then error("circular reference") end

  stack[val] = true

  if val[1] ~= nil or next(val) == nil then
    -- Treat as array -- check keys are valid and it is not sparse
    local n = 0
    for k in pairs(val) do
      if type(k) ~= "number" then
        error("invalid table: mixed or invalid key types")
      end
      n = n + 1
    end
    if n ~= #val then
      error("invalid table: sparse array")
    end
    -- Encode
    for i, v in ipairs(val) do
      table.insert(res, encode(v, stack))
    end
    stack[val] = nil
    return "[" .. table.concat(res, ",") .. "]"

  else
    -- Treat as an object
    for k, v in pairs(val) do
      if type(k) ~= "string" then
        error("invalid table: mixed or invalid key types")
      end
      table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
    end
    stack[val] = nil
    return "{" .. table.concat(res, ",") .. "}"
  end
end


local function encode_string(val)
  return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
end


local function encode_number(val)
  -- Check for NaN, -inf and inf
  if val ~= val or val <= -math.huge or val >= math.huge then
    error("unexpected number value '" .. tostring(val) .. "'")
  end
  return string.format("%.14g", val)
end


local type_func_map = {
  [ "nil"     ] = encode_nil,
  [ "table"   ] = encode_table,
  [ "string"  ] = encode_string,
  [ "number"  ] = encode_number,
  [ "boolean" ] = tostring,
}


encode = function(val, stack)
  local t = type(val)
  local f = type_func_map[t]
  if f then
    return f(val, stack)
  end
  error("unexpected type '" .. t .. "'")
end


function json.encode(val)
  return ( encode(val) )
end


-------------------------------------------------------------------------------
-- Decode
-------------------------------------------------------------------------------

local parse

local function create_set(...)
  local res = {}
  for i = 1, select("#", ...) do
    res[ select(i, ...) ] = true
  end
  return res
end

local space_chars   = create_set(" ", "\t", "\r", "\n")
local delim_chars   = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
local escape_chars  = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
local literals      = create_set("true", "false", "null")

local literal_map = {
  [ "true"  ] = true,
  [ "false" ] = false,
  [ "null"  ] = nil,
}


local function next_char(str, idx, set, negate)
  for i = idx, #str do
    if set[str:sub(i, i)] ~= negate then
      return i
    end
  end
  return #str + 1
end


local function decode_error(str, idx, msg)
  local line_count = 1
  local col_count = 1
  for i = 1, idx - 1 do
    col_count = col_count + 1
    if str:sub(i, i) == "\n" then
      line_count = line_count + 1
      col_count = 1
    end
  end
  error( string.format("%s at line %d col %d", msg, line_count, col_count) )
end


local function codepoint_to_utf8(n)
  -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
  local f = math.floor
  if n <= 0x7f then
    return string.char(n)
  elseif n <= 0x7ff then
    return string.char(f(n / 64) + 192, n % 64 + 128)
  elseif n <= 0xffff then
    return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
  elseif n <= 0x10ffff then
    return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
                       f(n % 4096 / 64) + 128, n % 64 + 128)
  end
  error( string.format("invalid unicode codepoint '%x'", n) )
end


local function parse_unicode_escape(s)
  local n1 = tonumber( s:sub(3, 6),  16 )
  local n2 = tonumber( s:sub(9, 12), 16 )
  -- Surrogate pair?
  if n2 then
    return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
  else
    return codepoint_to_utf8(n1)
  end
end


local function parse_string(str, i)
  local has_unicode_escape = false
  local has_surrogate_escape = false
  local has_escape = false
  local last
  for j = i + 1, #str do
    local x = str:byte(j)

    if x < 32 then
      decode_error(str, j, "control character in string")
    end

    if last == 92 then -- "\\" (escape char)
      if x == 117 then -- "u" (unicode escape sequence)
        local hex = str:sub(j + 1, j + 5)
        if not hex:find("%x%x%x%x") then
          decode_error(str, j, "invalid unicode escape in string")
        end
        if hex:find("^[dD][89aAbB]") then
          has_surrogate_escape = true
        else
          has_unicode_escape = true
        end
      else
        local c = string.char(x)
        if not escape_chars[c] then
          decode_error(str, j, "invalid escape char '" .. c .. "' in string")
        end
        has_escape = true
      end
      last = nil

    elseif x == 34 then -- '"' (end of string)
      local s = str:sub(i + 1, j - 1)
      if has_surrogate_escape then
        s = s:gsub("\\u[dD][89aAbB]..\\u....", parse_unicode_escape)
      end
      if has_unicode_escape then
        s = s:gsub("\\u....", parse_unicode_escape)
      end
      if has_escape then
        s = s:gsub("\\.", escape_char_map_inv)
      end
      return s, j + 1

    else
      last = x
    end
  end
  decode_error(str, i, "expected closing quote for string")
end


local function parse_number(str, i)
  local x = next_char(str, i, delim_chars)
  local s = str:sub(i, x - 1)
  local n = tonumber(s)
  if not n then
    decode_error(str, i, "invalid number '" .. s .. "'")
  end
  return n, x
end


local function parse_literal(str, i)
  local x = next_char(str, i, delim_chars)
  local word = str:sub(i, x - 1)
  if not literals[word] then
    decode_error(str, i, "invalid literal '" .. word .. "'")
  end
  return literal_map[word], x
end


local function parse_array(str, i)
  local res = {}
  local n = 1
  i = i + 1
  while 1 do
    local x
    i = next_char(str, i, space_chars, true)
    -- Empty / end of array?
    if str:sub(i, i) == "]" then
      i = i + 1
      break
    end
    -- Read token
    x, i = parse(str, i)
    res[n] = x
    n = n + 1
    -- Next token
    i = next_char(str, i, space_chars, true)
    local chr = str:sub(i, i)
    i = i + 1
    if chr == "]" then break end
    if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
  end
  return res, i
end


local function parse_object(str, i)
  local res = {}
  i = i + 1
  while 1 do
    local key, val
    i = next_char(str, i, space_chars, true)
    -- Empty / end of object?
    if str:sub(i, i) == "}" then
      i = i + 1
      break
    end
    -- Read key
    if str:sub(i, i) ~= '"' then
      decode_error(str, i, "expected string for key")
    end
    key, i = parse(str, i)
    -- Read ':' delimiter
    i = next_char(str, i, space_chars, true)
    if str:sub(i, i) ~= ":" then
      decode_error(str, i, "expected ':' after key")
    end
    i = next_char(str, i + 1, space_chars, true)
    -- Read value
    val, i = parse(str, i)
    -- Set
    res[key] = val
    -- Next token
    i = next_char(str, i, space_chars, true)
    local chr = str:sub(i, i)
    i = i + 1
    if chr == "}" then break end
    if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
  end
  return res, i
end


local char_func_map = {
  [ '"' ] = parse_string,
  [ "0" ] = parse_number,
  [ "1" ] = parse_number,
  [ "2" ] = parse_number,
  [ "3" ] = parse_number,
  [ "4" ] = parse_number,
  [ "5" ] = parse_number,
  [ "6" ] = parse_number,
  [ "7" ] = parse_number,
  [ "8" ] = parse_number,
  [ "9" ] = parse_number,
  [ "-" ] = parse_number,
  [ "t" ] = parse_literal,
  [ "f" ] = parse_literal,
  [ "n" ] = parse_literal,
  [ "[" ] = parse_array,
  [ "{" ] = parse_object,
}


parse = function(str, idx)
  local chr = str:sub(idx, idx)
  local f = char_func_map[chr]
  if f then
    return f(str, idx)
  end
  decode_error(str, idx, "unexpected character '" .. chr .. "'")
end


function json.decode(str)
  if type(str) ~= "string" then
    error("expected argument of type string, got " .. type(str))
  end
  local res, idx = parse(str, next_char(str, 1, space_chars, true))
  idx = next_char(str, idx, space_chars, true)
  if idx <= #str then
    decode_error(str, idx, "trailing garbage")
  end
  return res
end

global.lua
Code:
math.randomseed(os.time())
dofile('data/lib/lib.lua')
dofile('data/lib/core/json.lua')

guild title response
Code:
response = "setGuildNick",
get no title
Did u enable extended opcode in client??
 
Did u enable extended opcode in client??
yes
LUA:
-- you can add custom features here, list of them is in the modules\gamelib\const.lua
    g_game.enableFeature(GameWingsAndAura)
    g_game.enableFeature(GameBot)
    g_game.enableFeature(GameBlueNpcNameColor)
    g_game.enableFeature(GameExtendedOpcode)
server side
i got shop and even loot generator from your too shop working
have this in terminal ERROR: Unable to send extended opcode 201, extended opcodes are not enabled on this server. but i have many features working
1718469428337.png
 
Last edited:
can't et this to works seems so simple yet cant enable it somebody is willing to help me via anydesk or similar to review what's wrong?
Post automatically merged:

Greetings,

A small Guild Title module, that someone might want. Modified module made by @dewral / @Avaji, here.

It can be configured from server to set Guild Name or Guild Nick, so you don’t need to update the client to change it.
Might be a easier way of doing this, but this is how i did it.

View attachment 84447View attachment 84448


How to install:

1. Copy paste module in /modules

2. Copy paste servercode “guildTitle” into your scripts folder.

3. Modify response to either “setGuildName” or “setGuildNick”:
LUA:
local data = {
   response = "SetGuildName", -- EDIT RESPONSE HERE
   creatureId = creatureID,
   name = creature:getName(),
   guildNick = creature:getGuildNick(),
   guildName = guild:getName(),
}

4. Gucci.
tried clean otcv8 and added someprints
GM Ratx has logged in.
LoginEvent.onLogin called for player: GM Ratx
guildTitle.onExtendedOpcode called for player: GM Ratx
Creature found with ID: 268435456
Player is in a guild: Paster
Extended opcode sent for player: GM Ratx
still can not see the guild text
questData() called for creature: GM Ratx
Sending extended opcode for creature: GM Ratx
handleData() called
Updating title for creature with SetGuildNick response

LUA:
local LoginEvent = CreatureEvent("guildTitle_Login")
function LoginEvent.onLogin(player)
    print("LoginEvent.onLogin called for player:", player:getName())
    player:registerEvent("guildTitle")
    return true
end
LoginEvent:register()
local OPCODE_GUILDTITLE = 134

local guildTitle = CreatureEvent("guildTitle")
guildTitle:type("extendedopcode")
function guildTitle.onExtendedOpcode(player, opcode, buffer)
    print("guildTitle.onExtendedOpcode called for player:", player:getName())
    if opcode and opcode == OPCODE_GUILDTITLE then
        local json_status, json_data =
        pcall(
            function()
                return json.decode(buffer)
            end
        )
        if json_status then
            local creatureID = json_data.creature
            local creature = Creature(creatureID)
            if creature and creature:isPlayer() then
                print("Creature found with ID:", creatureID)
                local guild = creature:getGuild()
                if guild ~= nil then
                    print("Player is in a guild:", guild:getName())
                    local data = {
                        response = "setGuildNick",
                        creatureId = creatureID,
                        name = creature:getName(),
                        guildNick = creature:getGuildNick(),
                        guildName = guild:getName(),
                    }
                    player:sendExtendedOpcode(OPCODE_GUILDTITLE,json.encode(data))
                    print("Extended opcode sent for player:", player:getName())
                else
                    print("Player is not in a guild.")
                end
            else
                print("Creature not found or not a player.")
            end
        else
            print("Error decoding JSON data:", json_data)
        end
    end
end
guildTitle:register()
 
Last edited:
can't et this to works seems so simple yet cant enable it somebody is willing to help me via anydesk or similar to review what's wrong?
Post automatically merged:


tried clean otcv8 and added someprints
GM Ratx has logged in.
LoginEvent.onLogin called for player: GM Ratx
guildTitle.onExtendedOpcode called for player: GM Ratx
Creature found with ID: 268435456
Player is in a guild: Paster
Extended opcode sent for player: GM Ratx
still can not see the guild text
questData() called for creature: GM Ratx
Sending extended opcode for creature: GM Ratx
handleData() called
Updating title for creature with SetGuildNick response

LUA:
local LoginEvent = CreatureEvent("guildTitle_Login")
function LoginEvent.onLogin(player)
    print("LoginEvent.onLogin called for player:", player:getName())
    player:registerEvent("guildTitle")
    return true
end
LoginEvent:register()
local OPCODE_GUILDTITLE = 134

local guildTitle = CreatureEvent("guildTitle")
guildTitle:type("extendedopcode")
function guildTitle.onExtendedOpcode(player, opcode, buffer)
    print("guildTitle.onExtendedOpcode called for player:", player:getName())
    if opcode and opcode == OPCODE_GUILDTITLE then
        local json_status, json_data =
        pcall(
            function()
                return json.decode(buffer)
            end
        )
        if json_status then
            local creatureID = json_data.creature
            local creature = Creature(creatureID)
            if creature and creature:isPlayer() then
                print("Creature found with ID:", creatureID)
                local guild = creature:getGuild()
                if guild ~= nil then
                    print("Player is in a guild:", guild:getName())
                    local data = {
                        response = "setGuildNick",
                        creatureId = creatureID,
                        name = creature:getName(),
                        guildNick = creature:getGuildNick(),
                        guildName = guild:getName(),
                    }
                    player:sendExtendedOpcode(OPCODE_GUILDTITLE,json.encode(data))
                    print("Extended opcode sent for player:", player:getName())
                else
                    print("Player is not in a guild.")
                end
            else
                print("Creature not found or not a player.")
            end
        else
            print("Error decoding JSON data:", json_data)
        end
    end
end
guildTitle:register()

If u did it on clean otcv8 and still dont work, make sure your guild has defined a guild nick, print both and see that u recieve guild name and nick
 
If u did it on clean otcv8 and still dont work, make sure your guild has defined a guild nick, print both and see that u recieve guild name and nick
in server side
LUA:
GM Ratx has logged in.
LoginEvent.onLogin called for player:   GM Ratx
Player's guild on login:        Paster
guildTitle.onExtendedOpcode called for player:  GM Ratx
Creature found with ID: 268435457
Player is in a guild:   Paster
Extended opcode sent for player:        GM Ratx
Code:
local LoginEvent = CreatureEvent("guildTitle_Login")

function LoginEvent.onLogin(player)
    print("LoginEvent.onLogin called for player:", player:getName())
    player:registerEvent("guildTitle")
 
    local guild = player:getGuild()
    if guild then
        print("Player's guild on login:", guild:getName())
    else
        print("Player is not in a guild on login.")
    end

    return true
end

LoginEvent:register()

local OPCODE_GUILDTITLE = 134

local guildTitle = CreatureEvent("guildTitle")
guildTitle:type("extendedopcode")

function guildTitle.onExtendedOpcode(player, opcode, buffer)
    print("guildTitle.onExtendedOpcode called for player:", player:getName())
 
    if opcode and opcode == OPCODE_GUILDTITLE then
        local json_status, json_data = pcall(function() return json.decode(buffer) end)
    
        if json_status then
            local creatureID = json_data.creature
            local creature = Creature(creatureID)
        
            if creature and creature:isPlayer() then
                print("Creature found with ID:", creatureID)
                local guild = creature:getGuild()
            
                if guild ~= nil then
                    print("Player is in a guild:", guild:getName())
                    local data = {
                        response = "setGuildNick",
                        creatureId = creatureID,
                        name = creature:getName(),
                        guildNick = creature:getGuildNick(),
                        guildName = guild:getName(),
                    }
                    player:sendExtendedOpcode(OPCODE_GUILDTITLE, json.encode(data))
                    print("Extended opcode sent for player:", player:getName())
                else
                    print("Player is not in a guild.")
                end
            else
                print("Creature not found or not a player.")
            end
        else
            print("Error decoding JSON data:", json_data)
        end
    end
end

guildTitle:register()
 and client side
[CODE]local titleFont = "verdana-13px-rounded"
local OPCODE = 134

function init()
  print("init() called")
  connect(Creature, {
    onAppear = requestData,
  })
  ProtocolGame.registerExtendedOpcode(OPCODE, handleData)
end

function terminate()
  print("terminate() called")
  disconnect(Creature, {
    onAppear = requestData,
  })
  ProtocolGame.unregisterExtendedOpcode(OPCODE, handleData)
end

function requestData(creature)
  print("requestData() called for creature:", creature:getName())
  if creature:isPlayer() then
    local tbl = {
      creature = creature:getId()
    }
    local protocolGame = g_game.getProtocolGame()
    if protocolGame then
      print("Sending extended opcode for creature:", creature:getName())
      protocolGame.sendExtendedOpcode(protocolGame, OPCODE, json.encode(tbl))
    end
  end
end

function handleData(protocol, code, buffer)
  print("handleData() called")
  local json_status, json_data = pcall(function()
    return json.decode(buffer)
  end)

  if not json_status then
    g_logger.error("JSON error: " .. json_data)
    return false
  end

  local data = json_data
  local response = json_data.response
  print("Received response:", response) -- Debugging line to check the response

  if data ~= nil then
    if response == "setGuildNick" then
      print("Updating title for creature with setGuildNick response")
      print("Guild Nick:", data.guildNick)
      print("Player is in a guild:", data.guildName) -- Adding this line to print the guild name
      updateTitle(data.creatureId, data.guildNick)
    elseif response == "setGuildName" then
      print("Updating title for creature with setGuildName response")
      print("Guild Name:", data.guildName)
      print("Player is in a guild:", data.guildName) -- Adding this line to print the guild name
      updateTitle(data.creatureId, data.guildName)
    else
      print("Unknown response:", response)
    end
  else
    print("No data received.")
  end

  return
end

function updateTitle(creatureId, title)
  print("updateTitle() called for creature ID:", creatureId, "and title:", title)
  local target = g_map.getCreatureById(creatureId)
  if target then
    target:setTitle(title, titleFont, "#00e378")
  end
  return
end
client side
LUA:
requestData() called for creature:    GM Ratx
Sending extended opcode for creature:    GM Ratx
handleData() called
Received response:    setGuildNick
Updating title for creature with setGuildNick response
Guild Nick:   
Player is in a guild:    Paster
updateTitle() called for creature ID:    268435457    and title:
Code:
local titleFont = "verdana-11px-rounded"
local OPCODE = 134

function init()
  print("init() called")
  connect(Creature, {
    onAppear = requestData,
  }) 
  ProtocolGame.registerExtendedOpcode(OPCODE, handleData)
end

function terminate()
  print("terminate() called")
  disconnect(Creature, {
    onAppear = requestData,
  }) 
  ProtocolGame.unregisterExtendedOpcode(OPCODE, handleData)
end

function requestData(creature)
  print("requestData() called for creature:", creature:getName())
  if creature:isPlayer() then
    local tbl = {
      creature = creature:getId()
    }
    local protocolGame = g_game.getProtocolGame()
    if protocolGame then
      print("Sending extended opcode for creature:", creature:getName())
      protocolGame.sendExtendedOpcode(protocolGame, OPCODE, json.encode(tbl))
    end
  end
end

function handleData(protocol, code, buffer)
  print("handleData() called")
  local json_status, json_data = pcall(function()
    return json.decode(buffer)
  end)

  if not json_status then
    g_logger.error("JSON error: " .. json_data)
    return false
  end

  local data = json_data
  local response = json_data.response
  print("Received response:", response) -- Debugging line to check the response

  if data ~= nil then
    if response == "setGuildNick" then
      print("Updating title for creature with setGuildNick response")
      print("Guild Nick:", data.guildNick)
      print("Player is in a guild:", data.guildName) -- Adding this line to print the guild name
      updateTitle(data.creatureId, data.guildNick)
    elseif response == "setGuildName" then
      print("Updating title for creature with setGuildName response")
      print("Guild Name:", data.guildName)
      print("Player is in a guild:", data.guildName) -- Adding this line to print the guild name
      updateTitle(data.creatureId, data.guildName)
    else
      print("Unknown response:", response)
    end
  else
    print("No data received.")
  end

  return
end

function updateTitle(creatureId, title)
  print("updateTitle() called for creature ID:", creatureId, "and title:", title)
  local target = g_map.getCreatureById(creatureId)
  if target then
    target:setTitle(title, titleFont, "#00e378")
  end
  return
end
Post automatically merged:

edit lolololol i changed guildnick to guildname and it worked lmfao
 
Last edited:
yes
LUA:
-- you can add custom features here, list of them is in the modules\gamelib\const.lua
    g_game.enableFeature(GameWingsAndAura)
    g_game.enableFeature(GameBot)
    g_game.enableFeature(GameBlueNpcNameColor)
    g_game.enableFeature(GameExtendedOpcode)
server side
i got shop and even loot generator from your too shop working
have this in terminal ERROR: Unable to send extended opcode 201, extended opcodes are not enabled on this server. but i have many features working
View attachment 85488
Bro, share me your data/images/ui from your client or where i can find then i like the black
 
Yes, it's possible, just on the OTClient side and sustaining all of this here.

View attachment 85011

side otc
LUA:
local titleFont = "verdana-11px-rounded"
local OPCODE = 134
function init()
  connect(Creature, {
    onAppear = requestData,
  })
  ProtocolGame.registerExtendedOpcode(OPCODE, handleData)
end

function terminate()
  disconnect(Creature, {
    onAppear = requestData,
  })
  ProtocolGame.unregisterExtendedOpcode(OPCODE, handleData)
end

function requestData(creature)
  if creature:isPlayer() then
    local tbl = {
      creature = creature:getId()
    }
    local protocolGame = g_game.getProtocolGame()
    if protocolGame then
      protocolGame.sendExtendedOpcode(protocolGame, OPCODE, json.encode(tbl))
    end
  end
end

function handleData(protocol, code, buffer)
  local json_status, json_data = pcall(function ()
    return json.decode(buffer)
  end)
 
  if not json_status then
    g_logger.error("JSON error: " .. json_data)
    return false
  end

  local data = json_data
  local response = json_data.response
  if data ~= nil then
    if response == "SetGuildNick" then
      updateTitle(data.creatureId, data.guildNick)
    elseif response == "SetGuildName" then
      updateTitle(data.creatureId, data.guildName)
    end
  end

  return
end

local guildColors = {}

function updateTitle(creatureId, guildName)
  local target = g_map.getCreatureById(creatureId)
  if target then
    local color
    if guildColors[guildName] then
      color = guildColors[guildName]
    else
      local red = math.random(0, 255)
      local green = math.random(0, 255)
      local blue = math.random(0, 255)
      color = string.format("#%02X%02X%02X", red, green, blue)
      guildColors[guildName] = color
    end
    local newName = string.format("[%s] %s", guildName, target:getName())
    target:setName(newName)
    target:setTitle("", titleFont, color)
  end
end
Every time we enter in a portarl this happens, when we relog it fixes
 

Attachments

  • Captura de pantalla 2024-06-30 213037.png
    Captura de pantalla 2024-06-30 213037.png
    41.3 KB · Views: 8 · VirusTotal
Back
Top