• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

Lua creaturescripts + talkaction

beliar34

Member
Joined
Feb 28, 2012
Messages
307
Solutions
7
Reaction score
11
Hello
Im looking for that commands (TFS 0.3.5):
- !bestbloodhit - shows the best recorded hit from melee (regular attack)
- !bestspellhit - shows the best recorded hit from spell

Btw i want this command for players to check their best damages i mean every player can check his best dmg's by typing these commands

Anyone can write it if its possible ?
Thanks.

@Xikini read this post again if you can :)
 
Last edited:
Solution
Okay, so everytime we see a 2, it means it got to the line 13 at minimum.
So that tells me that the creature causing bloodloss is a monster and not a player.

Have a player attack a monster or another player and cause a bloodhit.
If a player is not causing the damage, the script stops.

if not isPlayer(attacker) then
if attacker is not a player then

- edit
This is a bit rediculous for this easy of a script though.
PM teamviewer details or your discord add. lol
b3liar#4457

LUA:
-- player, date, value
-- 13 + 13 + 13 = 39 global storages.
-- 00 > 13 > 26
local storage = 45000 -- 45000 to 45039 used.
                   -- 1, 2, 3, 4, 5,  6,  7,  8,   9,  10,  11,   12,   13
local damage_types = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256...
You could do something similar with 'onStatsChange'.. but there's no way to determine the source of the damage without a source edit.

You could find the type of damage, the damage amount, the character's name whom dealt the damage, and the time/date of when it happened.

Note that onStatsChange finds the Actual damage dealt to the target prior to damaging the target.
So if your attack could of hit 1,000,000 damage, but the target's maximum life is 1,000 - onStatsChanges value would only show 1,000.
 
"So if your attack could of hit 1,000,000 damage, but the target's maximum life is 1,000 - onStatsChanges value would only show 1,000." < this is no problem my friend :)
any tips to make scripts like that?

And i can edit sources :D
 
"So if your attack could of hit 1,000,000 damage, but the target's maximum life is 1,000 - onStatsChanges value would only show 1,000." < this is no problem my friend :)
any tips to make scripts like that?

And i can edit sources :D
mmm.. try this? (untested)
If you want the 'best hit' to work when players hit monsters as well, you'll have to register this script in every monster.. lol
Without doing that, this will only show best hits player vs player.

LUA:
-- player, date, value
-- 13 + 13 + 13 = 39 global storages.
-- 00 > 13 > 26

local storage = 45000 -- 45000 to 45039 used.
                   -- 1, 2, 3, 4, 5,  6,  7,  8,   9,  10,  11,   12,   13
local damage_types = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 2014, 2048}
local damage_type_names = {"none", "physical", "energy", "earth", "fire", "undefined", "life drain", "mana drain", "healing", "drown", "ice", "holy", "death"}

function onStatsChange(cid, attacker, type, combat, value)
   if type == STATSCHANGE_HEALTHLOSS then
      
       -- make sure we are only counting player hits
       if not isPlayer(attacker) then
           return true
       end      
      
       -- find damage type
       local temp_storage = storage - 1 -- so we start from the storage specified.
       for i = 1, #damage_types do
           if type == damage_types[i] then
               temp_storage = temp_storage + i
               break
           end
       end
      
       -- verify if value is higher then maximum recorded for that damage type
       if value <= getGlobalStorageValue(temp_storage + 26) then
           return true
       end
      
       -- value is higher, set storages.      
       setGlobalStorageValue(temp_storage, getPlayerGUID(attacker)) -- player
       setGlobalStorageValue(temp_storage + 13, os.time()) -- date
       setGlobalStorageValue(temp_storage + 26, value) -- damage_value
      
       -- test prints, when new record is set. (disable these after testing. xD)
       print("New Record Set!")
       temp_storage = storage - 1
       for i = 1, 13 do
           local text = ""
           if getGlobalStorageValue(temp_storage + i) <= 0 then
               text = text .. "Nobody"
           else
               text = text .. getPlayerNameByGUID(getGlobalStorageValue(temp_storage + i))
           end
           text = text .. " holds the record for " .. damage_type_names[i] .. " damage with " .. getGlobalStorageValue(temp_storage + i + 26) .. " damage!\n"
           text = text .. "Record created on " .. os.date("%x", getGlobalStorageValue(temp_storage + i + 13))
           print(text)          
       end          
   end
   return true
end
 
Last edited by a moderator:
Code:
    <event type="statschange" name="tester" event="script" value="tester.lua"/>
in creaturescripts
Code:
-- player, date, value
-- 13 + 13 + 13 = 39 global storages.
-- 00 > 13 > 26
local storage = 45000 -- 45000 to 45039 used.
                   -- 1, 2, 3, 4, 5,  6,  7,  8,   9,  10,  11,   12,   13
local damage_types = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 2014, 2048}
local damage_type_names = {"none", "physical", "energy", "earth", "fire", "undefined", "life drain", "mana drain", "healing", "drown", "ice", "holy", "death"}
function onStatsChange(cid, attacker, type, combat, value)
   if type == STATSCHANGE_HEALTHLOSS then
   
       -- make sure we are only counting player hits
       if not isPlayer(attacker) then
           return true
       end    
   
       -- find damage type
       local temp_storage = storage - 1 -- so we start from the storage specified.
       for i = 1, #damage_types do
           if type == damage_types[i] then
               temp_storage = temp_storage + i
               break
           end
       end
   
       -- verify if value is higher then maximum recorded for that damage type
       if value <= getGlobalStorageValue(temp_storage + 26) then
           return true
       end
   
       -- value is higher, set storages.    
       setGlobalStorageValue(temp_storage, getPlayerGUID(attacker)) -- player
       setGlobalStorageValue(temp_storage + 13, os.time()) -- date
       setGlobalStorageValue(temp_storage + 26, value) -- damage_value
   
       -- test prints, when new record is set. (disable these after testing. xD)
       print("New Record Set!")
       temp_storage = storage - 1
       for i = 1, 13 do
           local text = ""
           if getGlobalStorageValue(temp_storage + i) <= 0 then
               text = text .. "Nobody"
           else
               text = text .. getPlayerNameByGUID(getGlobalStorageValue(temp_storage + i))
           end
           text = text .. " holds the record for " .. damage_type_names[i] .. " damage with " .. getGlobalStorageValue(temp_storage + i + 26) .. " damage!\n"
           text = text .. "Record created on " .. os.date("%x", getGlobalStorageValue(temp_storage + i + 13))
           print(text)        
       end        
   end
   return true
end
your code in creaturescripts/scripts/tester.lua
and in login lua i added
Code:
    registerCreatureEvent(cid, "tester")


Nothing happend, no errors, people tried pvp and PVM still no records
 
Code:
    <event type="statschange" name="tester" event="script" value="tester.lua"/>
in creaturescripts
Code:
-- player, date, value
-- 13 + 13 + 13 = 39 global storages.
-- 00 > 13 > 26
local storage = 45000 -- 45000 to 45039 used.
                   -- 1, 2, 3, 4, 5,  6,  7,  8,   9,  10,  11,   12,   13
local damage_types = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 2014, 2048}
local damage_type_names = {"none", "physical", "energy", "earth", "fire", "undefined", "life drain", "mana drain", "healing", "drown", "ice", "holy", "death"}
function onStatsChange(cid, attacker, type, combat, value)
   if type == STATSCHANGE_HEALTHLOSS then
  
       -- make sure we are only counting player hits
       if not isPlayer(attacker) then
           return true
       end   
  
       -- find damage type
       local temp_storage = storage - 1 -- so we start from the storage specified.
       for i = 1, #damage_types do
           if type == damage_types[i] then
               temp_storage = temp_storage + i
               break
           end
       end
  
       -- verify if value is higher then maximum recorded for that damage type
       if value <= getGlobalStorageValue(temp_storage + 26) then
           return true
       end
  
       -- value is higher, set storages.   
       setGlobalStorageValue(temp_storage, getPlayerGUID(attacker)) -- player
       setGlobalStorageValue(temp_storage + 13, os.time()) -- date
       setGlobalStorageValue(temp_storage + 26, value) -- damage_value
  
       -- test prints, when new record is set. (disable these after testing. xD)
       print("New Record Set!")
       temp_storage = storage - 1
       for i = 1, 13 do
           local text = ""
           if getGlobalStorageValue(temp_storage + i) <= 0 then
               text = text .. "Nobody"
           else
               text = text .. getPlayerNameByGUID(getGlobalStorageValue(temp_storage + i))
           end
           text = text .. " holds the record for " .. damage_type_names[i] .. " damage with " .. getGlobalStorageValue(temp_storage + i + 26) .. " damage!\n"
           text = text .. "Record created on " .. os.date("%x", getGlobalStorageValue(temp_storage + i + 13))
           print(text)       
       end       
   end
   return true
end
your code in creaturescripts/scripts/tester.lua
and in login lua i added
Code:
    registerCreatureEvent(cid, "tester")


Nothing happend, no errors, people tried pvp and PVM still no records
Nothing printed in console?
No errors?
Nothing?
 
Put a print(1) underneath the main function?

Oh derp..
type -> combat

type is health/mana loss/gain

change type to combat..
Or wait for me to get home in 4 hours. lol
 
I will wait :)
Send screenshots of the server console if this doesn't work.

LUA:
-- player, date, value
-- 13 + 13 + 13 = 39 global storages.
-- 00 > 13 > 26

local storage = 45000 -- 45000 to 45039 used.
                   -- 1, 2, 3, 4, 5,  6,  7,  8,   9,  10,  11,   12,   13
local damage_types = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 2014, 2048}
local damage_type_names = {"none", "physical", "energy", "earth", "fire", "undefined", "life drain", "mana drain", "healing", "drown", "ice", "holy", "death"}

function onStatsChange(cid, attacker, type, combat, value)
   print(1)
   if type == STATSCHANGE_HEALTHLOSS then
       print(2)
       -- make sure we are only counting player hits
       if not isPlayer(attacker) then
           return true
       end    
       print(3)
       -- find damage type
       local temp_storage = storage - 1 -- so we start from the storage specified.
       for i = 1, #damage_types do
           if combat == damage_types[i] then
               temp_storage = temp_storage + i
               break
           end
       end
       print(4)
       -- verify if value is higher then maximum recorded for that damage type
       if value <= getGlobalStorageValue(temp_storage + 26) then
           return true
       end
       print(5)
       -- value is higher, set storages.    
       setGlobalStorageValue(temp_storage, getPlayerGUID(attacker)) -- player
       setGlobalStorageValue(temp_storage + 13, os.time()) -- date
       setGlobalStorageValue(temp_storage + 26, value) -- damage_value
       print(6)
       -- test prints, when new record is set. (disable these after testing. xD)
       print("New Record Set!")
       temp_storage = storage - 1
       for i = 1, 13 do
           local text = ""
           if getGlobalStorageValue(temp_storage + i) <= 0 then
               text = text .. "Nobody"
           else
               text = text .. getPlayerNameByGUID(getGlobalStorageValue(temp_storage + i))
           end
           text = text .. " holds the record for " .. damage_type_names[i] .. " damage with " .. getGlobalStorageValue(temp_storage + i + 26) .. " damage!\n"
           text = text .. "Record created on " .. os.date("%x", getGlobalStorageValue(temp_storage + i + 13))
           print(text)        
       end        
   end
   return true
end
 
Send screenshots of the server console if this doesn't work.

LUA:
-- player, date, value
-- 13 + 13 + 13 = 39 global storages.
-- 00 > 13 > 26

local storage = 45000 -- 45000 to 45039 used.
                   -- 1, 2, 3, 4, 5,  6,  7,  8,   9,  10,  11,   12,   13
local damage_types = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 2014, 2048}
local damage_type_names = {"none", "physical", "energy", "earth", "fire", "undefined", "life drain", "mana drain", "healing", "drown", "ice", "holy", "death"}

function onStatsChange(cid, attacker, type, combat, value)
   print(1)
   if type == STATSCHANGE_HEALTHLOSS then
       print(2)
       -- make sure we are only counting player hits
       if not isPlayer(attacker) then
           return true
       end 
       print(3)
       -- find damage type
       local temp_storage = storage - 1 -- so we start from the storage specified.
       for i = 1, #damage_types do
           if combat == damage_types[i] then
               temp_storage = temp_storage + i
               break
           end
       end
       print(4)
       -- verify if value is higher then maximum recorded for that damage type
       if value <= getGlobalStorageValue(temp_storage + 26) then
           return true
       end
       print(5)
       -- value is higher, set storages. 
       setGlobalStorageValue(temp_storage, getPlayerGUID(attacker)) -- player
       setGlobalStorageValue(temp_storage + 13, os.time()) -- date
       setGlobalStorageValue(temp_storage + 26, value) -- damage_value
       print(6)
       -- test prints, when new record is set. (disable these after testing. xD)
       print("New Record Set!")
       temp_storage = storage - 1
       for i = 1, 13 do
           local text = ""
           if getGlobalStorageValue(temp_storage + i) <= 0 then
               text = text .. "Nobody"
           else
               text = text .. getPlayerNameByGUID(getGlobalStorageValue(temp_storage + i))
           end
           text = text .. " holds the record for " .. damage_type_names[i] .. " damage with " .. getGlobalStorageValue(temp_storage + i + 26) .. " damage!\n"
           text = text .. "Record created on " .. os.date("%x", getGlobalStorageValue(temp_storage + i + 13))
           print(text)     
       end     
   end
   return true
end

Wouldn't he have to register this event to every single monster as well?
EDIT: Nvm I'm retarded, I see that you mentioned this in one of your posts.

OP, you have to add this to every monster's XML script. Try with just 1 monster at first to see if it works:
LUA:
    <script>
    <event name="nameOfThisEvent"/>
    </script>
 
Code:
    <event type="combat" name="tester" event="script" value="tester.lua"/>
IN LOGIN.LUA
Code:
registerCreatureEvent(cid, "tester")
in monster
Code:
    <script>
    <event name="tester"/>
    </script>
Only one error : SHUt your play!

[Warning - Event::loadScript] Event onCombat not found (data/creaturescripts/scripts/tester.lua)

Errors when loading, i had to turn on Logging to check it :)

No errors when <event type="statschange" name="tester" event="script" value="tester.lua"/>
@Xikini
 
Last edited:
Code:
    <event type="combat" name="tester" event="script" value="tester.lua"/>
IN LOGIN.LUA
Code:
registerCreatureEvent(cid, "tester")
in monster
Code:
    <script>
    <event name="tester"/>
    </script>
Only one error : SHUt your play!

[Warning - Event::loadScript] Event onCombat not found (data/creaturescripts/scripts/tester.lua)

Errors when loading, i had to turn on Logging to check it :)

No errors when <event type="statschange" name="tester" event="script" value="tester.lua"/>
@Xikini
If your using 'statschange' the script is either erroring or printing to console something
It can't just not do anything. That's impossible.

If your using 'statschange' the script is either erroring or printing to console something
It can't just not do anything. That's impossible.

use statschange again.. and ahow console to us from server start-up until server loads fully.
 
Last edited by a moderator:
If your using 'statschange' the script is either erroring or printing to console something
It can't just not do anything. That's impossible.
No errors when stats change my friend


But console log as you wish (dont comment my errors mess )
Code:
The Forgotten Server, version 0.3.5 (Crying Damson)
Compiled with GNU C++ version 4.8.4 at Dec  5 2017, 20:59:32.
A server developed by Elf, slawkens, Talaturen, KaczooH, Lithium, Kiper, Kornholijo.
Visit our forum for updates, support and resources: http://otland.net.

>> Loading config (config.lua)
> Using plaintext passwords
error : No such file or directory
I/O warning : failed to load external entity "http://forgottenserver.otland.net/version.xml"
>> Checking software version... failed - could not parse remote file (are you connected to the internet?)
>> Fetching blacklist
error : No such file or directory
I/O warning : failed to load external entity "http://forgottenserver.otland.net/blacklist.xml"
>> Loading RSA key
>> Starting SQL connection
>> Running Database Manager
> Optimizing table: accounts... [success]
> Optimizing table: bans... [success]
> Optimizing table: environment_killers... [success]
> Optimizing table: global_storage... [success]
> Optimizing table: guild_invites... [success]
> Optimizing table: guild_kills... [success]
> Optimizing table: guild_ranks... [success]
> Optimizing table: guild_wars... [success]
> Optimizing table: guilds... [success]
> Optimizing table: house_auctions... [success]
> Optimizing table: house_data... [success]
> Optimizing table: house_lists... [success]
> Optimizing table: houses... [success]
> Optimizing table: killers... [success]
> Optimizing table: player_deaths... [success]
> Optimizing table: player_depotitems... [success]
> Optimizing table: player_items... [success]
> Optimizing table: player_killers... [success]
> Optimizing table: player_namelocks... [success]
> Optimizing table: player_skills... [success]
> Optimizing table: player_spells... [success]
> Optimizing table: player_storage... [success]
> Optimizing table: player_viplist... [success]
> Optimizing table: players... [success]
> Optimizing table: server_config... [success]
> Optimizing table: server_motd... [success]
> Optimizing table: server_record... [success]
> Optimizing table: server_reports... [success]
> Optimizing table: tile_items... [success]
> Optimizing table: tiles... [success]
> Optimizing table: z_spells... [success]
>> Loading items
>> Loading groups
>> Loading vocations
>> Loading script systems
>> Loading chat channels
>> Loading outfits
>> Loading experience stages
>> Loading monsters


[Warning - Monsters::deserializeSpell] Hollow Shinigami - Unknown shootEffect: Mortarea
[Warning - Monsters::deserializeSpell] Vasto Lorde - Unknown shootEffect: mortarea
I/O warning : failed to load external entity "data/monster/Hyaena.xml"
[Warning - Monsters::loadMonster] Cannot load monster (Hyaena) file (data/monster/Hyaena.xml).
Info: failed to load external entity "data/monster/Hyaena.xml"


>> Loading mods...
Loading cleanhouse.xml...[Warning - GlobalEvents::configureEvent] Duplicate registered globalevent with name: cleanhouses
done.
Loading guildWarSystem.xml... done.
Loading Autoloot.xml... done.
> 3 mods were loaded.
>> Loading map and spawns...
> Map size: 2048x2048.
> Map descriptions:
Saved with Remere's Map Editor 2.2
SimOne MapEditor 0.5.5
> Map loading time: 1.117 seconds.



I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hollow Arcanist"
[Warning - Spawns::loadFromXml] Spider Hollow ( 01001 / 00963 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Spider Hollow ( 01001 / 00963 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Spider Hollow ( 00987 / 00973 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Bandit ( 01145 / 01000 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Bandit ( 01145 / 01000 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Bandit ( 01145 / 01000 / 008 ) spawntime cannot be less than 1 seconds.
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Warning - Spawns::loadFromXml] Samurai ( 00981 / 01053 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 00981 / 01053 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 00981 / 01053 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 00959 / 01063 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 01002 / 01069 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 01002 / 01069 / 008 ) spawntime cannot be less than 1 seconds.
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Houses::loadFromXml] House entry not set for: Forgotten headquarter (Flat 1, Area 42) (377)
> Data parsing time: 0.13 seconds.
> Houses synchronization time: 0.031 seconds.
[Warning - IOMapSerialize::loadItem] Unserialization error [1] for item type 2591
[Error - IOMapSerialize::loadMapBinary] Unserialization of invalid tile at position ( 00000 / 00000 / 000 )
[Warning - IOMapSerialize::loadItem] Unserialization error [1] for item type 2591
[Error - IOMapSerialize::loadMapBinary] Unserialization of invalid tile at position ( 00000 / 00000 / 000 )
> Content unserialization time: 0.003 seconds.
>> Checking world type... PvP
>> Initializing game state modules and registering services...
[Warning - Raids::parseRaidNode] margin tag missing for raid zaraki, using default: 0
[Notice - AnnounceEvent::configureRaidEvent] Unknown type tag for announce event, using default: 22
[Notice - AnnounceEvent::configureRaidEvent] Unknown type tag for announce event, using default: 22
[Notice - AnnounceEvent::configureRaidEvent] Unknown type tag for announce event, using default: 22
> Global address: bleachwo.zapto.org
> Local ports: 7171[5C7172[4C
>> All modules were loaded, server is starting up...
>> Bleach Warriors Online server Online!

> Saving server...
> SAVE: Complete in 0.054 seconds using binary house storage.
Wielikk has logged in.
1
1
2
1
1
2
1
1
1
2
1
1
2
1
1
2
1
Lecimygrubo has logged in.
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Beliar has logged in.
1
1
1
1
1
1
1
1
1
1
1
> Broadcasted message: "Server is going down in 1 minute, please log out now!".
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
2
1
1
2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
Wielikk has logged out.
Lecimygrubo has logged out.
Beliar has logged out.
> Saving server...
> SAVE: Complete in 0.02 seconds using binary house storage.
Preparing to shutdown server..
.
Exiting
^ Test prints print 1 and 2, at first i thought its becouse i turned on logging on putty
When combat
Code:
>> Loading groups
>> Loading vocations
>> Loading script systems
[Warning - Event::loadScript] Event onCombat not found (data/creaturescripts/scripts/tester.lua)
>> Loading chat channels
>> Loading outfits
>> Loading experience stages
>> Loading monsters
 
Last edited:
No errors when stats change my friend


But console log as you wish (dont comment my errors mess )
Code:
The Forgotten Server, version 0.3.5 (Crying Damson)
Compiled with GNU C++ version 4.8.4 at Dec  5 2017, 20:59:32.
A server developed by Elf, slawkens, Talaturen, KaczooH, Lithium, Kiper, Kornholijo.
Visit our forum for updates, support and resources: http://otland.net.

>> Loading config (config.lua)
> Using plaintext passwords
error : No such file or directory
I/O warning : failed to load external entity "http://forgottenserver.otland.net/version.xml"
>> Checking software version... failed - could not parse remote file (are you connected to the internet?)
>> Fetching blacklist
error : No such file or directory
I/O warning : failed to load external entity "http://forgottenserver.otland.net/blacklist.xml"
>> Loading RSA key
>> Starting SQL connection
>> Running Database Manager
> Optimizing table: accounts... [success]
> Optimizing table: bans... [success]
> Optimizing table: environment_killers... [success]
> Optimizing table: global_storage... [success]
> Optimizing table: guild_invites... [success]
> Optimizing table: guild_kills... [success]
> Optimizing table: guild_ranks... [success]
> Optimizing table: guild_wars... [success]
> Optimizing table: guilds... [success]
> Optimizing table: house_auctions... [success]
> Optimizing table: house_data... [success]
> Optimizing table: house_lists... [success]
> Optimizing table: houses... [success]
> Optimizing table: killers... [success]
> Optimizing table: player_deaths... [success]
> Optimizing table: player_depotitems... [success]
> Optimizing table: player_items... [success]
> Optimizing table: player_killers... [success]
> Optimizing table: player_namelocks... [success]
> Optimizing table: player_skills... [success]
> Optimizing table: player_spells... [success]
> Optimizing table: player_storage... [success]
> Optimizing table: player_viplist... [success]
> Optimizing table: players... [success]
> Optimizing table: server_config... [success]
> Optimizing table: server_motd... [success]
> Optimizing table: server_record... [success]
> Optimizing table: server_reports... [success]
> Optimizing table: tile_items... [success]
> Optimizing table: tiles... [success]
> Optimizing table: z_spells... [success]
>> Loading items
>> Loading groups
>> Loading vocations
>> Loading script systems
>> Loading chat channels
>> Loading outfits
>> Loading experience stages
>> Loading monsters


[Warning - Monsters::deserializeSpell] Hollow Shinigami - Unknown shootEffect: Mortarea
[Warning - Monsters::deserializeSpell] Vasto Lorde - Unknown shootEffect: mortarea
I/O warning : failed to load external entity "data/monster/Hyaena.xml"
[Warning - Monsters::loadMonster] Cannot load monster (Hyaena) file (data/monster/Hyaena.xml).
Info: failed to load external entity "data/monster/Hyaena.xml"


>> Loading mods...
Loading cleanhouse.xml...[Warning - GlobalEvents::configureEvent] Duplicate registered globalevent with name: cleanhouses
done.
Loading guildWarSystem.xml... done.
Loading Autoloot.xml... done.
> 3 mods were loaded.
>> Loading map and spawns...
> Map size: 2048x2048.
> Map descriptions:
Saved with Remere's Map Editor 2.2
SimOne MapEditor 0.5.5
> Map loading time: 1.117 seconds.



I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


I/O warning : failed to load external entity "data/npc/Protection Shinigami.xml"
[Warning - Npc::loadFromXml] Cannot load npc file (data/npc/Protection Shinigami.xml).
Info: failed to load external entity "data/npc/Protection Shinigami.xml"


[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Hyaena"
[Spawn::addMonster] Cannot find "Hollow Arcanist"
[Warning - Spawns::loadFromXml] Spider Hollow ( 01001 / 00963 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Spider Hollow ( 01001 / 00963 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Spider Hollow ( 00987 / 00973 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Bandit ( 01145 / 01000 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Bandit ( 01145 / 01000 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Bandit ( 01145 / 01000 / 008 ) spawntime cannot be less than 1 seconds.
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Warning - Spawns::loadFromXml] Samurai ( 00981 / 01053 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 00981 / 01053 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 00981 / 01053 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 00959 / 01063 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 01002 / 01069 / 008 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Samurai ( 01002 / 01069 / 008 ) spawntime cannot be less than 1 seconds.
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Spawn::addMonster] Cannot find "Snaiper"
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Spawns::loadFromXml] Vasto Lorde ( 01299 / 01228 / 010 ) spawntime cannot be less than 1 seconds.
[Warning - Houses::loadFromXml] House entry not set for: Forgotten headquarter (Flat 1, Area 42) (377)
> Data parsing time: 0.13 seconds.
> Houses synchronization time: 0.031 seconds.
[Warning - IOMapSerialize::loadItem] Unserialization error [1] for item type 2591
[Error - IOMapSerialize::loadMapBinary] Unserialization of invalid tile at position ( 00000 / 00000 / 000 )
[Warning - IOMapSerialize::loadItem] Unserialization error [1] for item type 2591
[Error - IOMapSerialize::loadMapBinary] Unserialization of invalid tile at position ( 00000 / 00000 / 000 )
> Content unserialization time: 0.003 seconds.
>> Checking world type... PvP
>> Initializing game state modules and registering services...
[Warning - Raids::parseRaidNode] margin tag missing for raid zaraki, using default: 0
[Notice - AnnounceEvent::configureRaidEvent] Unknown type tag for announce event, using default: 22
[Notice - AnnounceEvent::configureRaidEvent] Unknown type tag for announce event, using default: 22
[Notice - AnnounceEvent::configureRaidEvent] Unknown type tag for announce event, using default: 22
> Global address: bleachwo.zapto.org
> Local ports: 7171[5C7172[4C
>> All modules were loaded, server is starting up...
>> Bleach Warriors Online server Online!

> Saving server...
> SAVE: Complete in 0.054 seconds using binary house storage.
Wielikk has logged in.
1
1
2
1
1
2
1
1
1
2
1
1
2
1
1
2
1
Lecimygrubo has logged in.
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Beliar has logged in.
1
1
1
1
1
1
1
1
1
1
1
> Broadcasted message: "Server is going down in 1 minute, please log out now!".
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
2
1
1
2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
1
1
Wielikk has logged out.
Lecimygrubo has logged out.
Beliar has logged out.
> Saving server...
> SAVE: Complete in 0.02 seconds using binary house storage.
Preparing to shutdown server..
.
Exiting
^ Test prints print 1 and 2, at first i thought its becouse i turned on logging on putty
When combat
Code:
>> Loading groups
>> Loading vocations
>> Loading script systems
[Warning - Event::loadScript] Event onCombat not found (data/creaturescripts/scripts/tester.lua)
>> Loading chat channels
>> Loading outfits
>> Loading experience stages
>> Loading monsters
Okay, so everytime we see a 2, it means it got to the line 13 at minimum.
So that tells me that the creature causing bloodloss is a monster and not a player.

Have a player attack a monster or another player and cause a bloodhit.
If a player is not causing the damage, the script stops.

if not isPlayer(attacker) then
if attacker is not a player then

- edit
This is a bit rediculous for this easy of a script though.
PM teamviewer details or your discord add. lol
 
Okay, so everytime we see a 2, it means it got to the line 13 at minimum.
So that tells me that the creature causing bloodloss is a monster and not a player.

Have a player attack a monster or another player and cause a bloodhit.
If a player is not causing the damage, the script stops.

if not isPlayer(attacker) then
if attacker is not a player then

- edit
This is a bit rediculous for this easy of a script though.
PM teamviewer details or your discord add. lol
b3liar#4457

LUA:
-- player, date, value
-- 13 + 13 + 13 = 39 global storages.
-- 00 > 13 > 26
local storage = 45000 -- 45000 to 45039 used.
                   -- 1, 2, 3, 4, 5,  6,  7,  8,   9,  10,  11,   12,   13
local damage_types = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 2014, 2048}
local damage_type_names = {"none", "physical", "energy", "earth", "fire", "undefined", "life drain", "mana drain", "healing", "drown", "ice", "holy", "death"}
function onStatsChange(cid, attacker, type, combat, value)
   print(1)
   if type ~= COMBAT_HEALING then
       print(2)
       -- make sure we are only counting player hits
       if not isPlayer(attacker) then
           return true
       end  
       print(3)
       -- find damage type
       local temp_storage = storage - 1 -- so we start from the storage specified.
       for i = 1, #damage_types do
           if combat == damage_types[i] then
               temp_storage = temp_storage + i
               break
           end
       end
       print(4)
       -- verify if value is higher then maximum recorded for that damage type
       if value <= getPlayerStorageValue(cid, temp_storage + 26) then
           return true
       end
       print(5)
       -- value is higher, set storages.  
       setPlayerStorageValue(cid, temp_storage, getPlayerGUID(attacker)) -- player
       setPlayerStorageValue(cid, temp_storage + 13, os.time()) -- date
       setPlayerStorageValue(cid, temp_storage + 26, value) -- damage_value
       print(6)
       -- test prints, when new record is set. (disable these after testing. xD)
       print("New Record Set!")
       temp_storage = storage - 1
       for i = 1, 13 do
           local text = ""
           if getPlayerStorageValue(cid, temp_storage + i) <= 0 then
               text = text .. "Nobody"
           else
               text = text .. getPlayerNameByGUID(getPlayerStorageValue(cid, temp_storage + i))
           end
           text = text .. " holds the record for " .. damage_type_names[i] .. " damage with " .. getPlayerStorageValue(cid, temp_storage + i + 26) .. " damage!\n"
           text = text .. "Record created on " .. os.date("%x", getPlayerStorageValue(cid, temp_storage + i + 13))
           print(text)      
       end      
   end
   return true
end

Fixed, thread to close, i just need now TalkAction :)
 
Last edited by a moderator:
Solution
Back
Top