• 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!

Itutorial's Scripting Service TFS 0.3.6-0.4-1.x

Itutorial

Legendary OT User
Joined
Dec 23, 2014
Messages
2,335
Solutions
68
Reaction score
1,014
As the title says.

Format:
-Distro
-explination of code needed as detailed as possible
-Pictures if required of map set up for code

I don't usually mess with C++ but if I know I can do something that you request I will.
 
Is that possible to create script so ppls who have levels can use normal ues in !spells
While reborn ppls can't use normal spells and reborns got another command and ther own spells.
Tfs 0.4
 
Change this in your creaturescript

Lua:
local teleports = {
    [0x00] = {cost = 0, pos = {x = 314, y = 102, z = 7}, text = "Rotworms"},
    [0x01] = {cost = 0, pos = {x = 675, y = 245, z = 7}, text = "Hero Fortress"},
    [0x02] = {cost = 0, pos = {x = 765, y = 451, z = 7}, text = "Asura Palace"},
    [0x03] = {cost = 0, pos = {x = 862, y = 598, z = 7}, text = "Mistrock"},
    [0x04] = {cost = 0, pos = {x = 846, y = 456, z = 6}, text = "Yielothax"},
    [0x05] = {cost = 0, pos = {x = 1387, y = 1798, z = 7}, text = "Roshamuul"},
    [0x06] = {cost = 0, pos = {x = 69, y = 771, z = 7}, text = "Wind Temple"},
    [0x07] = {cost = 0, pos = {x = 54, y = 711, z = 7}, text = "Wind Depot"},
    [0x08] = {cost = 0, pos = {x = 73, y = 733, z = 6}, text = "Magic Shop"},
    [0x09] = {cost = 0, pos = {x = 35, y = 791, z = 7}, text = "Distance Shop"},
    [0x10] = {cost = 0, pos = {x = 86, y = 755, z = 7}, text = "Rashid"},
    [0x11] = {cost = 0, pos = {x = 229, y = 689, z = 7}, text = "Wrrm"},
    [0x12] = {cost = 0, pos = {x = 276, y = 658, z = 7}, text = "Behemoth"},
    [0x13] = {cost = 0, pos = {x = 468, y = 448, z = 7}, text = "Neutral Nation"},
    [0x14] = {cost = 0, pos = {x = 950, y = 1082, z = 12}, text = "Glooth Bandit"},
    [0x15] = {cost = 0, pos = {x = 872, y = 933, z = 6}, text = "Oramond"},
    [0x16] = {cost = 0, pos = {x = 607, y = 603, z = 10}, text = "Fire Temple"},
    [0x17] = {cost = 0, pos = {x = 586, y = 603, z = 10}, text = "Fire Depot"},
    [0x18] = {cost = 0, pos = {x = 611, y = 637, z = 7}, text = "Magic Shop"},
    [0x19] = {cost = 0, pos = {x = 554, y = 653, z = 7}, text = "Distance Shop"},
    [0x20] = {cost = 0, pos = {x = 559, y = 589, z = 7}, text = "Rashid"},
    [0x21] = {cost = 0, pos = {x = 367, y = 198, z = 7}, text = "Rotworms"},
    [0x22] = {cost = 0, pos = {x = 750, y = 451, z = 7}, text = "Asura Palace"},
    [0x23] = {cost = 0, pos = {x = 827, y = 943, z = 4}, text = "Oramond"},
    [0x24] = {cost = 0, pos = {x = 1351, y = 1789, z = 7}, text = "Roshamuul"},
    [0x25] = {cost = 0, pos = {x = 858, y = 599, z = 7}, text = "Mistrock"},
    [0x26] = {cost = 0, pos = {x = 282, y = 419, z = 7}, text = "Dragons"},
    [0x27] = {cost = 0, pos = {x = 488, y = 440, z = 6}, text = "Neutral Nation"},
    [0x28] = {cost = 0, pos = {x = 672, y = 241, z = 7}, text = "Hero Fortress"},
    [0x29] = {cost = 0, pos = {x = 871, y = 965, z = 12}, text = "Glooth Bandits"},
    [0x30] = {cost = 0, pos = {x = 681, y = 487, z = 8}, text = "Earth Temple"},
    [0x31] = {cost = 0, pos = {x = 700, y = 494, z = 7}, text = "Earth Depot"},
    [0x32] = {cost = 0, pos = {x = 660, y = 426, z = 7}, text = "Magic Shop"},
    [0x33] = {cost = 0, pos = {x = 599, y = 402, z = 6}, text = "Distance Shop"},
    [0x34] = {cost = 0, pos = {x = 696, y = 478, z = 6}, text = "Rashid"},
    [0x35] = {cost = 0, pos = {x = 274, y = 194, z = 6}, text = "Rotworms"},
    [0x36] = {cost = 0, pos = {x = 695, y = 360, z = 8}, text = "Medusa Tower"},
    [0x37] = {cost = 0, pos = {x = 827, y = 191, z = 7}, text = "Serpent Spawn"},
    [0x38] = {cost = 0, pos = {x = 774, y = 449, z = 7}, text = "Asura Palace"},
    [0x39] = {cost = 0, pos = {x = 846, y = 941, z = 6}, text = "Oramond"},
    [0x40] = {cost = 0, pos = {x = 1366, y = 1799, z = 7}, text = "Roshamuul"},
    [0x41] = {cost = 0, pos = {x = 856, y = 605, z = 7}, text = "Mistrock"},
    [0x42] = {cost = 0, pos = {x = 586, y = 400, z = 7}, text = "Earth Elemental"},
    [0x43] = {cost = 0, pos = {x = 953, y = 1089, z = 12}, text = "Glooth Bandit"},
    [0x44] = {cost = 0, pos = {x = 472, y = 463, z = 7}, text = "Neutral Nation"},
    [0x45] = {cost = 0, pos = {x = 667, y = 251, z = 7}, text = "Hero Fortress"}


}
function onModalWindow(player, modalWindowId, buttonId, choiceId)
    if modalWindowId ~= 1860 then return true end
    if buttonId == 0x01 then return true end
    local CHOICE = teleports[choiceId]
    if not CHOICE then return true end
    if player:removeMoney(CHOICE.cost) then
        player:teleportTo(CHOICE.pos)
        player:say(CHOICE.text, TALKTYPE_MONSTER_SAY, 0, 1, player:getPosition())
    else
        player:sendCancelMessage("This teleport costs "..CHOICE.cost.." to use.")
    end
return true
end

0x00-0x45 = 0-9 .. 16-25 .. 32-41 .. 48-57 .. 64-69
which means you're missing 10-15, 26-31, 42-47, 58-63

It does have relevance. If you'd replace hex with dec then your code would also work (assuming the person adding the choices did it incrementally and not with the jumps). Also, by simply iterating from 0 to length of the table, you'd do a lot of unnecessary iterations. Right now, if you were to use a traditional lua for loop i.e for i = 1, #teleports do .. - with your current table you'd be doing 24 unnecessary iterations.

But you're right, the key can be anything. By not writing out default keys, you have something like this EVEN if you don't type it out:

local my_table = {
[1] = ...,
[2] = ...,
[3] = ...,
.
.
.
[n] = ...
}

I'm pointing it out since it looks like you're trying something because it looks cool rather than just being practical and going with what's reasonable. If you're gonna use hex, then be aware of the numeral system and don't treat it as if it was decimal. you'll just confuse the reader
 
Last edited:
0x00-0x45 = 0-9 .. 16-25 .. 32-41 .. 48-57 .. 64-69
which means you're missing 10-15, 26-31, 42-47, 58-63

It does have relevance. If you'd replace hex with dec then your code would also work (assuming the person adding the choices did it incrementally and not with the jumps). Also, by simply iterating from 0 to length of the table, you'd do a lot of unnecessary iterations. Right now, if you were to use a traditional lua for loop i.e for i = 1, #teleports do .. - with your current table you'd be doing 24 unnecessary iterations.

But you're right, the key can be anything. By not writing out default keys, you have something like this EVEN if you don't type it out:

local my_table = {
[1] = ...,
[2] = ...,
[3] = ...,
.
.
.
[n] = ...
}

I'm pointing it out since it looks like you're trying something because it looks cool rather than just being practical and going with what's reasonable. If you're gonna use hex, then be aware of the numeral system and don't treat it as if it was decimal. you'll just confuse the reader

If the read the code more you see that he put the tables in un ordered. That doesn't have anything to do with the issue, the answer I gave him was the fix to his issue. His code is working just fine now.


Is that possible to create script so ppls who have levels can use normal ues in !spells
While reborn ppls can't use normal spells and reborns got another command and ther own spells.
Tfs 0.4

Im assuming you have a function to check for a players resets. You need to use that to allow/deny ability to use a spell inside the spells function.


ok sure lol
Needed?


tfs 1.2 or 1.3...

You can use this table and function to create anytype of position retrieving anytype of area you want.

If you don't know how to implement it just ask me and I will make the code for you. add this to a new lib file, or your global.lua, however you want.

Lua:
customCombatAreas = {
    ['3X3'] = {
        {1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 0}, {1, 0}, {-1, -1}, {1, -1}, {-1, 1}, {1, 1},
        {-2, -2}, {-2, -1}, {-2, 0}, {-2, 1}, {-2, 2}, {-1, 2}, {0, 2}, {1, 2}, {2, 2}, {2, 2}, {2, 1}, {2, 0}, {2, -1}, {2, -2}, {1, -2}, {0, -2}, {-1, -2},
        {0, -3}, {1, -3}, {-1, -3}, {-3, 0}, {-3, 1}, {-3, -1}, {3, 0}, {3, -1}, {3, 1}, {0, 3}, {-1, 3}, {1, 3}
    }
}
function createCustomCombatArea(area)
    local pos = self:getPosition()
  
    AREA = customCombatAreas[area]
  
    if not AREA then return false end
  
    local newArea = {}
  
    for i = 1, #AREA do
        local tmp_pos = {x = pos.x + AREA[1], y = pos.y + AREA[2], z = pos.z}
        table.insert(newArea, tmp_pos)
    end
  
return newArea
end
 
@Itutorial you can show me how use it ? I got some weird errors like:
Code:
data/lib/miscellaneous/050-functions.lua:160: attempt to index global 'self' (a nil value)
and if I pass the item as parameter to self
got this:
Code:
data/lib/miscellaneous/050-functions.lua:169: attempt to perform arithmetic on a table value
stack traceback:
        [C]: in function '__add'
        data/lib/miscellaneous/050-functions.lua:169: in function 'createCustomCombatArea'
        data/actions/scripts/other/explosive barrel.lua:3: in function <data/actions/scripts/other/explosive barrel.lua:2>
the line from the second error is:
Code:
tmp_pos = {x = pos.x + AREA[1], y = pos.y + AREA[2], z = pos.z}
edit: I found the error
AREA[1] was wrong since you need to set the index of AREA to work with 1 or 2
so I edit the function to:
Code:
function createCustomCombatArea(self, area)
    local pos = self:getPosition()
   
    local AREA = customCombatAreas[area]
   
    if not AREA then return false end
   
    local newArea= {}
   
    for i = 1, #AREA do
        local arr = AREA[i]
        local tmp_pos = {x = pos.x + arr[1], y = pos.y + arr[2], z = pos.z}
        table.insert(newArea, tmp_pos)
    end
   
    return newArea
end
and it works :) thank you
 
Last edited:
Glad you got it working it seems the [,i,] got removed when putting the code on the forum. Probably because that defines italics. Weird because ive never had that happen before.
 
Glad you got it working it seems the [,i,] got removed when putting the code on the forum. Probably because that defines italics. Weird because ive never had that happen before.
weird :eek: could you explain how you did the table 3x3 ? I need table with 4x4 and 5x5 too
 
So you add all the positions x,y from the center player position. So: if you wanted the left spot of the player 1sqm you would do: {-1, 0} if you wanted to do the area right of the player 1sqm {+1, 0}

with this system you can make anytype of area.
 

I can't spoon feed you man. Right now you are saying you have a system that isn't even in the source code. I have no way of determining what your code is and you are asking me to use your code to create a system for you. Its literally outside of my ability to do that.

How about we start with: How are you saving the players resets?
 
Hmm,
I find that i must fix some codes for reset so i'll do it later
What about lever that i can use to smummon monster with name "Xxx" and cooldown 20 minutes to use the lever again?!
 
HI bro, i have one spell (dash spell), when use a spell your person "rum" 15 sqms, they can`t enter in pzone (ok) cant enter in house (ok), but have one bug,
the player can step on a non-existent tile, such as the photo:

The red square is not walkable tile, and player and the player can step with this spell, How should I solve it?
The red square red getTileInfo == 0
https://imageshack.com/a/img923/4163/Krt1DB.png

SCRIPT:
Code:
local damage = 20 -- dano que toma qnd bate em algum obstáculo
local speed = 910 -- velocidade do player ao usar o dash (vai de 0 a mil)
local pzprotect = true -- nao deixa entrar em pz com a spell
local distance = 15 -- quantos sqms anda

local function isWalkable(pos, creature, proj, pz)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end 

function onWalk(cid)
    if isCreature(cid) then
        local poslook = getCreatureLookPosition(cid)
        poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
        if isWalkable(poslook, false, false, pzprotect) then
            if not isCreature(getThingfromPos(poslook).uid) then
                doMoveCreature(cid, getPlayerLookDirection(cid))
                doSendMagicEffect(getPlayerPosition(cid), 14)
            else
                doCreatureAddHealth(cid, -damage)
                doSendMagicEffect(getPlayerPosition(cid), 31)
                doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
            end
        else     
            doCreatureAddHealth(cid, -damage)
            doSendMagicEffect(getPlayerPosition(cid), 31)
            doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
        end
    end
return true
end

function onCastSpell(cid, var)   
    for i = 0, distance do
        addEvent(onWalk, (1001- math.min(speed, 1000)) *i, cid)
    end
return true
end
 
Last edited:
Lua:
local damage = 20 -- dano que toma qnd bate em algum obstáculo
local speed = 910 -- velocidade do player ao usar o dash (vai de 0 a mil)
local pzprotect = true -- nao deixa entrar em pz com a spell
local distance = 15 -- quantos sqms anda

local function isWalkable(pos, creature, proj, pz)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
            if not isMoveable(tile.uid) then
                return false
            end
        end
    end
    return true
end

function onWalk(cid)
    if isCreature(cid) then
        local poslook = getCreatureLookPosition(cid)
        poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
        if isWalkable(poslook, false, false, pzprotect) then
            if not isCreature(getThingfromPos(poslook).uid) then
                doMoveCreature(cid, getPlayerLookDirection(cid))
                doSendMagicEffect(getPlayerPosition(cid), 14)
            else
                doCreatureAddHealth(cid, -damage)
                doSendMagicEffect(getPlayerPosition(cid), 31)
                doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
            end
        else   
            doCreatureAddHealth(cid, -damage)
            doSendMagicEffect(getPlayerPosition(cid), 31)
            doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
        end
    end
return true
end

function onCastSpell(cid, var) 
    for i = 0, distance do
        addEvent(onWalk, (1001- math.min(speed, 1000)) *i, cid)
    end
return true
end
 
Hmm,
I find that i must fix some codes for reset so i'll do it later
What about lever that i can use to smummon monster with name "Xxx" and cooldown 20 minutes to use the lever again?!

Lua:
exhaust['lever'] = {}
local monster = "Demon"
local pos_spawn = {x = 1000, y = 1000, z = 7}
local leverIds = {1111, 1111}
local minute = 10
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if exhaust['level'][1] ~= nil then
        doPlayerSendCancel(cid, "Nothing happens.")
    else
        doCreateMonster(monster, pos_spawn)
        exhaust['level'][1] = 1
        addEvent(removeExhaust, minute * 60 * 1000)
    end
  
    if leverIds[1] == item.itemid then
        doTransformItem(item, leverIds[2])
    else
        doTransformItem(item, leverIds[1])
    end
return true
end
function removeExhaust()
    exhaust['lever'][1] = nil
return true
end
 
Last edited:
Lua:
local damage = 20 -- dano que toma qnd bate em algum obstáculo
local speed = 910 -- velocidade do player ao usar o dash (vai de 0 a mil)
local pzprotect = true -- nao deixa entrar em pz com a spell
local distance = 15 -- quantos sqms anda

local function isWalkable(pos, creature, proj, pz)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
            if not isMoveable(tile.uid) then
                return false
            end
        end
    end
    return true
end

function onWalk(cid)
    if isCreature(cid) then
        local poslook = getCreatureLookPosition(cid)
        poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
        if isWalkable(poslook, false, false, pzprotect) then
            if not isCreature(getThingfromPos(poslook).uid) then
                doMoveCreature(cid, getPlayerLookDirection(cid))
                doSendMagicEffect(getPlayerPosition(cid), 14)
            else
                doCreatureAddHealth(cid, -damage)
                doSendMagicEffect(getPlayerPosition(cid), 31)
                doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
            end
        else  
            doCreatureAddHealth(cid, -damage)
            doSendMagicEffect(getPlayerPosition(cid), 31)
            doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
        end
    end
return true
end

function onCastSpell(cid, var)
    for i = 0, distance do
        addEvent(onWalk, (1001- math.min(speed, 1000)) *i, cid)
    end
return true
end

Hi, not work, when i use the spell my person dont dash, and loose HP, I think to any place I try to use magic, it runs this part:

doCreatureAddHealth(cid, -damage)
doSendMagicEffect(getPlayerPosition(cid), 31)
doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
 
Whats your distro guy

Lua:
local damage = 20 -- dano que toma qnd bate em algum obstáculo
local speed = 910 -- velocidade do player ao usar o dash (vai de 0 a mil)
local pzprotect = true -- nao deixa entrar em pz com a spell
local distance = 15 -- quantos sqms anda

local function isWalkable(pos, creature, proj, pz)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end

function onWalk(cid)
    if isCreature(cid) then
        local poslook = getCreatureLookPosition(cid)
        poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
        if not isMoveable(getThingByPos(poslook)).uid then
            return false
        end
        if isWalkable(poslook, false, false, pzprotect) then
            if not isCreature(getThingfromPos(poslook).uid) then
                doMoveCreature(cid, getPlayerLookDirection(cid))
                doSendMagicEffect(getPlayerPosition(cid), 14)
            else
                doCreatureAddHealth(cid, -damage)
                doSendMagicEffect(getPlayerPosition(cid), 31)
                doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
            end
        else 
            doCreatureAddHealth(cid, -damage)
            doSendMagicEffect(getPlayerPosition(cid), 31)
            doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
        end
    end
return true
end

function onCastSpell(cid, var)
    for i = 0, distance do
        addEvent(onWalk, (1001- math.min(speed, 1000)) *i, cid)
    end
return true
end
 
Whats your distro guy

Lua:
local damage = 20 -- dano que toma qnd bate em algum obstáculo
local speed = 910 -- velocidade do player ao usar o dash (vai de 0 a mil)
local pzprotect = true -- nao deixa entrar em pz com a spell
local distance = 15 -- quantos sqms anda

local function isWalkable(pos, creature, proj, pz)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end

function onWalk(cid)
    if isCreature(cid) then
        local poslook = getCreatureLookPosition(cid)
        poslook.stackpos = STACKPOS_TOP_MOVEABLE_ITEM_OR_CREATURE
        if not isMoveable(getThingByPos(poslook)).uid then
            return false
        end
        if isWalkable(poslook, false, false, pzprotect) then
            if not isCreature(getThingfromPos(poslook).uid) then
                doMoveCreature(cid, getPlayerLookDirection(cid))
                doSendMagicEffect(getPlayerPosition(cid), 14)
            else
                doCreatureAddHealth(cid, -damage)
                doSendMagicEffect(getPlayerPosition(cid), 31)
                doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
            end
        else
            doCreatureAddHealth(cid, -damage)
            doSendMagicEffect(getPlayerPosition(cid), 31)
            doSendAnimatedText(getPlayerPosition(cid), "-"..damage , 180)
        end
    end
return true
end

function onCastSpell(cid, var)
    for i = 0, distance do
        addEvent(onWalk, (1001- math.min(speed, 1000)) *i, cid)
    end
return true
end

Sorry, I forgot to mention it, it's 0,4
Code:
[26/01/2018 06:39:55] [Error - Spell Interface]
[26/01/2018 06:39:55] In a timer event called from:
[26/01/2018 06:39:55] data/spells/scripts/test.lua:onCastSpell
[26/01/2018 06:39:55] Description:
[26/01/2018 06:39:55] data/spells/scripts/test.lua:27: attempt to call global 'getThingByPos' (a nil value)
[26/01/2018 06:39:55] stack traceback:
[26/01/2018 06:39:55]     data/spells/scripts/test.lua:27: in function <data/spells/scripts/test.lua:23>
 
Last edited:
Back
Top