CreatureEvent KillingInTheNameOF (task system) for OTHIRE 7.72

Discussion in 'GlobalEvents, Spells & CreatureEvents' started by Stellow, Mar 31, 2015.

  1. Stellow

    Stellow C++/C#/PHP/LUA

    Joined:
    Oct 23, 2008
    Messages:
    997
    Likes Received:
    115
    Best Answers:
    0
    Original script: https://otland.net/threads/grizzly-...me-of-quest-all-tasks-more-real-tibia.159150/
    Credits: Darkhous for the scripts

    I just addaped it to OTHIRE

    creaturescripts.xml
    Code (Text):
    1.   <event type="kill" name="KillTask" event="script" script="killtask.lua"/>
    2.   <event type="login" name="TaskLogin" event="script" script="tasklogin.lua"/>
    killtask.lua
    Code (Text):
    1. function onKill(cid, target, lastHit)
    2. local started = getPlayerStartedTasks(cid)
    3.  
    4. if isPlayer(target) then return true end
    5.  
    6. if started and #started > 0 then
    7. for _, id in ipairs(started) do
    8. if isInArray(tasks[id].creatures, getCreatureName(target):lower()) then
    9. if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) < 0 then
    10. setPlayerStorageValue(cid, KILLSSTORAGE_BASE + id, 0)
    11. end
    12. if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) < tasks[id].killsRequired then
    13. setPlayerStorageValue(cid, KILLSSTORAGE_BASE + id, getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) + 1)
    14. doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) .. "/" .. tasks[id].killsRequired .. " " .. tasks[id].raceName .. " already killed.")
    15. end
    16. end
    17. end
    18. end
    19. return true
    20. end
    tasklogin.lua
    Code (Text):
    1. function onLogin(cid)
    2. registerCreatureEvent(cid, "KillTask")
    3. return true
    4. end
    *obs: does not work directly on login.lua

    npc.xml
    Code (Text):
    1. <?xml version="1.0" encoding="utf-8"?>
    2.  
    3. <npc name="Grizzly Adams" script="KillingInTheNameOf.lua" access="3" walkinterval="2000" lookdir="2">
    4.   <mana now="800" max="800"/>
    5.   <health now="200" max="200"/>
    6.   <look type="144" head="97" body="97" legs="94" feet="97" addons="3"/>
    7. </npc>
    KillingInTheNameOf.lua
    Code (Text):
    1. local keywordHandler = KeywordHandler:new()
    2. local npcHandler = NpcHandler:new(keywordHandler)
    3. NpcSystem.parseParameters(npcHandler)
    4. local talkState = {}
    5.  
    6. function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
    7. function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
    8. function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
    9. function onThink() npcHandler:onThink() end
    10.  
    11. local choose = {}
    12. local cancel = {}
    13. local available = {}
    14. function creatureSayCallback(cid, type, msg)
    15.  
    16. if npcHandler.focus ~= cid then
    17. return false
    18. end
    19. local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid
    20.  
    21. if isInArray({"tasks", "task", "mission"}, msg:lower()) then
    22. local can = getTasksByPlayer(cid)
    23. if #can > 0 then
    24. local text = ""
    25. local sep = ", "
    26. table.sort(can, (function(a, b) return (a < b) end))
    27. local t = 0
    28. for _, id in ipairs(can) do
    29. t = t + 1
    30. if t == #can - 1 then
    31. sep = " and "
    32. elseif t == #can then
    33. sep = "."
    34. end
    35. text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
    36. end
    37. selfSay("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text)
    38. talkState[talkUser] = 0
    39. else
    40. selfSay("I don't have any task for you right now.")
    41. end
    42. elseif msg ~= "" and canStartTask(cid, msg) then
    43. if #getPlayerStartedTasks(cid) >= tasksByPlayer then
    44. selfSay("Sorry, but you already started " .. tasksByPlayer .. " tasks.")
    45. return true
    46. end
    47. local task = getTaskByName(msg)
    48. if task and getPlayerStorageValue(cid, QUESTSTORAGE_BASE + task) > 0 then
    49. return false
    50. end
    51. selfSay("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?")
    52. choose[cid] = task
    53. talkState[talkUser] = 1
    54. elseif msg:lower() == "yes" and talkState[talkUser] == 1 then
    55. setPlayerStorageValue(cid, QUESTSTORAGE_BASE + choose[cid], 1)
    56. selfSay("Excellent! You can check the status of your task saying report to me.")
    57. choose[cid] = nil
    58. talkState[talkUser] = 0
    59. elseif msg:lower() == "report" then
    60. local started = getPlayerStartedTasks(cid)
    61. local finishedAtLeastOne = false
    62. local finished = 0
    63. if started and #started > 0 then
    64. for _, id in ipairs(started) do
    65. if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then
    66. for _, reward in ipairs(tasks[id].rewards) do
    67. print("Rewards loaded")
    68. local deny = false
    69. if reward.storage then
    70. if getPlayerStorageValue(cid, reward.storage[1]) >= reward.storage[2] then
    71. deny = true
    72. end
    73. end
    74. if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then
    75. doPlayerAddMoney(cid, reward.value[1])
    76. elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then
    77. doPlayerAddExp(cid, reward.value[1])
    78. doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.")
    79. elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then
    80. if doPlayerAddAchievement then
    81. doPlayerAddAchievement(cid, reward.value[1], true)
    82. end
    83. elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then
    84. setPlayerStorageValue(cid, reward.value[1], reward.value[2])
    85. elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then
    86. setPlayerStorageValue(cid, POINTSSTORAGE, getPlayerStorageValue(cid, POINTSSTORAGE) + reward.value[1])
    87. elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then
    88. doPlayerAddItem(cid, reward.value[1], reward.value[2])
    89. end
    90.  
    91. if reward.storage then
    92. setPlayerStorageValue(cid, reward.storage[1], reward.storage[2])
    93. end
    94. end
    95.  
    96. if tasks[id].norepeatable then
    97. setPlayerStorageValue(cid, QUESTSTORAGE_BASE + id, 2)
    98. else
    99. setPlayerStorageValue(cid, QUESTSTORAGE_BASE + id, 0)
    100. end
    101. setPlayerStorageValue(cid, KILLSSTORAGE_BASE + id, 0)
    102. if getPlayerStorageValue(cid, REPEATSTORAGE_BASE + id) < 1 then
    103. setPlayerStorageValue(cid, REPEATSTORAGE_BASE + id, 0)
    104. end
    105. setPlayerStorageValue(cid, REPEATSTORAGE_BASE + id, getPlayerStorageValue(cid, REPEATSTORAGE_BASE + id) + 1)
    106. finishedAtLeastOne = true
    107. finished = finished + 1
    108. end
    109. end
    110.  
    111. if not finishedAtLeastOne then
    112. selfSay("You haven't finished any task yet.")
    113. else
    114. selfSay("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a task.")
    115. end
    116. else
    117. selfSay("You haven't started any task yet.")
    118. end
    119. elseif msg:lower() == "started" then
    120. local started = getPlayerStartedTasks(cid)
    121. if started and #started > 0 then
    122. local text = ""
    123. local sep = ", "
    124. table.sort(started, (function(a, b) return (a < b) end))
    125. local t = 0
    126. for _, id in ipairs(started) do
    127. t = t + 1
    128. if t == #started - 1 then
    129. sep = " and "
    130. elseif t == #started then
    131. sep = "."
    132. end
    133. text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep
    134. end
    135.  
    136. selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text)
    137. else
    138. selfSay("You haven't started any task yet.")
    139. end
    140. elseif msg:lower() == "cancel" then
    141. local started = getPlayerStartedTasks(cid)
    142. if started and #started > 0 then
    143. selfSay("Cancelling a task will make the count restart. Wich task you want to cancel?")
    144. talkState[talkUser] = 2
    145. else
    146. selfSay("You haven't started any task yet.")
    147. end
    148. elseif getTaskByName(msg) and talkState[talkUser] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then
    149. local task = getTaskByName(msg)
    150. if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + task) > 0 then
    151. selfSay("You currently killed " .. getPlayerStorageValue(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?")
    152. else
    153. selfSay("Are you sure you want to cancel this task?")
    154. end
    155. talkState[talkUser] = 3
    156. cancel[cid] = task
    157. elseif msg:lower() == "yes" and talkState[talkUser] == 3 then
    158. setPlayerStorageValue(cid, QUESTSTORAGE_BASE + cancel[cid], -1)
    159. setPlayerStorageValue(cid, KILLSSTORAGE_BASE + cancel[cid], -1)
    160. selfSay("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".")
    161. talkState[talkUser] = 0
    162. elseif isInArray({"points", "rank"}, msg:lower()) then
    163. selfSay("At this time, you have " .. getPlayerStorageValue(cid, POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 5 and "are an Elite Hunter" or getPlayerRank(cid) == 4 and "are a Trophy Hunter" or getPlayerRank(cid) == 3 and "are a Big Game Hunter" or getPlayerRank(cid) == 2 and "are a Ranger" or getPlayerRank(cid) == 1 and "are a Huntsman" or "haven't been ranked yet") .. ".")
    164. talkState[talkUser] = 0
    165. end
    166. end
    167.  
    168. npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
    169. npcHandler:addModule(FocusModule:new())
     
    Volrath likes this.
  2. Stellow

    Stellow C++/C#/PHP/LUA

    Joined:
    Oct 23, 2008
    Messages:
    997
    Likes Received:
    115
    Best Answers:
    0
    I am trying to post the functions.lua (last partt) but it is to long to post, how can I do it, where is the attachement button.
     
  3. Tatuy1

    Tatuy1 Member

    Joined:
    Mar 24, 2014
    Messages:
    121
    Likes Received:
    6
    Best Answers:
    1
    Thank you very much! but, What is needed in functions.lua?
     
  4. Jompi

    Jompi A hoagie in disguise.

    Joined:
    Oct 22, 2007
    Messages:
    178
    Likes Received:
    6
    Best Answers:
    0
    I also would like to know that :eek:
     
  5. Stellow

    Stellow C++/C#/PHP/LUA

    Joined:
    Oct 23, 2008
    Messages:
    997
    Likes Received:
    115
    Best Answers:
    0
    Some variables are different. I am uploading it for you guys
     
  6. Stellow

    Stellow C++/C#/PHP/LUA

    Joined:
    Oct 23, 2008
    Messages:
    997
    Likes Received:
    115
    Best Answers:
    0
  7. Evil Puncker

    Evil Puncker I'd rather kiss a rattlesnake

    Joined:
    May 30, 2009
    Messages:
    5,366
    Likes Received:
    1,593
    Best Answers:
    1
    use pastebin.com xD
     
  8. Jompi

    Jompi A hoagie in disguise.

    Joined:
    Oct 22, 2007
    Messages:
    178
    Likes Received:
    6
    Best Answers:
    0
    Last edited: Apr 8, 2015
  9. Stellow

    Stellow C++/C#/PHP/LUA

    Joined:
    Oct 23, 2008
    Messages:
    997
    Likes Received:
    115
    Best Answers:
    0
    Good to know.
     
  10. Felipe93

    Felipe93 Ghost Member

    Joined:
    Mar 21, 2015
    Messages:
    777
    Likes Received:
    36
    Best Answers:
    1
    how adapt it to works in OTX 7.72?
     
  11. narko

    narko ;_; hello world ;_;

    Joined:
    Oct 19, 2008
    Messages:
    1,299
    Likes Received:
    119
    Best Answers:
    2
    OTX 7.72 is based on TFS 0.3.7 so the script system is the same, you can use a 0.4 script aswell It shall work.
     
    Felipe93 likes this.
  12. Felipe93

    Felipe93 Ghost Member

    Joined:
    Mar 21, 2015
    Messages:
    777
    Likes Received:
    36
    Best Answers:
    1
    gonna test thanks ffor yourr reply dude :)
     
  13. Darth Vader

    Darth Vader Never give up, never.. never

    Joined:
    Mar 9, 2016
    Messages:
    13
    Likes Received:
    4
    Best Answers:
    0
    Update changes * my opinion.

    Because in original have: if this target has a player, count & not have a summon protection.

    Example: if my other character calls "troll" and my another char kill him, count+1 in task.
    And if I summon a troll, and I kill him, count+1

    Code (Text):
    1. function onKill(cid, target, lastHit)
    2. local started = getPlayerStartedTasks(cid)
    3.  
    4. if isSummon(target) or isPlayer(target) then
    5.     return false
    6. end
    7.  
    8. if started and #started > 0 then
    9. for _, id in ipairs(started) do
    10. if isInArray(tasks[id].creatures, getCreatureName(target):lower()) then
    11. if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) < 0 then
    12. setPlayerStorageValue(cid, KILLSSTORAGE_BASE + id, 0)
    13. end
    14. if getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) < tasks[id].killsRequired then
    15. setPlayerStorageValue(cid, KILLSSTORAGE_BASE + id, getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) + 1)
    16. doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, getPlayerStorageValue(cid, KILLSSTORAGE_BASE + id) .. "/" .. tasks[id].killsRequired .. " " .. tasks[id].raceName .. " already killed.")
    17. end
    18. end
    19. end
    20. end
    21. return true
    22. end
     
  14. JamesIsAwkward

    JamesIsAwkward New Member

    Joined:
    Aug 9, 2013
    Messages:
    20
    Likes Received:
    0
    Best Answers:
    0
  15. Betikoh

    Betikoh New Member

    Joined:
    Jul 23, 2008
    Messages:
    13
    Likes Received:
    0
    Best Answers:
    0
    reupload functions please
     
  16. bertil430

    bertil430 Kebab

    Joined:
    Nov 25, 2015
    Messages:
    190
    Likes Received:
    32
    Best Answers:
    0
    reupload functions plls
     
  17. bertil430

    bertil430 Kebab

    Joined:
    Nov 25, 2015
    Messages:
    190
    Likes Received:
    32
    Best Answers:
    0
  18. bertil430

    bertil430 Kebab

    Joined:
    Nov 25, 2015
    Messages:
    190
    Likes Received:
    32
    Best Answers:
    0
    reupload
     
  19. Stellow

    Stellow C++/C#/PHP/LUA

    Joined:
    Oct 23, 2008
    Messages:
    997
    Likes Received:
    115
    Best Answers:
    0
    Paste that on the bottom of functions.la

    Code (Text):
    1. -- TASK
    2.  
    3.  
    4. RANK_NONE = 0
    5. RANK_HUNTSMAN = 1
    6. RANK_RANGER = 2
    7. RANK_BIGGAMEHUNTER = 3
    8. RANK_TROPHYHUNTER = 4
    9. RANK_ELITEHUNTER = 5
    10.  
    11. REWARD_MONEY = 1
    12. REWARD_EXP = 2
    13. REWARD_ACHIEVEMENT = 3
    14. REWARD_STORAGE = 4
    15. REWARD_POINT = 5
    16. REWARD_ITEM = 6
    17.  
    18. QUESTSTORAGE_BASE = 71500
    19. KILLSSTORAGE_BASE = 72500
    20. REPEATSTORAGE_BASE = 73500
    21. POINTSSTORAGE = 72500
    22. ONTASKSTORAGE = 74500
    23. tasks =
    24. {
    25. [1] = {killsRequired = 50, raceName = "Noob", level = {1, 666}, premium = false, creatures = {"rat", "cave rat", "spider", "poison spider", "bug"}, rewards = {
    26. {type = "exp", value = {8000}},
    27. {type = "money", value = {5000}},
    28. {type = "points", value = {1}},
    29. {type = "storage", value = {81500,1}}
    30. }},
    31. [2] = {killsRequired = 50, raceName = "Orcs", level = {1, 666}, premium = false, creatures = {"orc", "orc warrior", "orc spearman", "orc berserker", "orc leader"}, rewards = {
    32. {type = "exp", value = {10000}},
    33. {type = "money", value = {3500}},
    34. {type = "points", value = {1}}
    35. }},
    36. [3] = {bkillsRequired = 300, raceName = "Crocodiles", level = {1, 666}, premium = false, creatures = {"crocodile"}, rewards = {
    37. {type = "exp", value = {20000}},
    38. {type = "item", value = {2536,1}},
    39. {type = "points", value = {1}},
    40. {type = "storage", value = {81500,3}}
    41. }},
    42. [4] = {killsRequired = 300, raceName = "Tarantulas", level = {1, 666}, premium = false, creatures = {"tarantula"}, rewards = {
    43. {type = "exp", value = {30000}},
    44. {type = "points", value = {1}},
    45. {type = "storage", value = {81500,4}}
    46. }},
    47. [5] = {killsRequired = 150, raceName = "Carniphilas", level = {1, 666}, premium = false, creatures = {"carniphila"}, rewards = {
    48. {type = "exp", value = {30000}},
    49. {type = "item", value = {2477,1}},
    50. {type = "points", value = {1}},
    51. {type = "storage", value = {81500,5}}
    52. }}
    53. }
    54.  
    55. tasksByPlayer = 3
    56. repeatTimes = 3
    57.  
    58. function getPlayerRank(cid)
    59. return (getPlayerStorageValue(cid, POINTSSTORAGE) >= 100 and RANK_ELITEHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 70 and RANK_TROPHYHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 40 and RANK_BIGGAMEHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 20 and RANK_RANGER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 10 and RANK_HUNTSMAN or RANK_NONE)
    60. end
    61.  
    62. function getTaskByName(name, table)
    63. local t = (table and table or tasks)
    64. for k, v in pairs(t) do
    65. if v.name then
    66. if v.name:lower() == name:lower() then
    67. return k
    68. end
    69. else
    70. if v.raceName:lower() == name:lower() then
    71. return k
    72. end
    73. end
    74. end
    75. return false
    76. end
    77.  
    78. function getTasksByPlayer(cid)
    79. local canmake = {}
    80. local able = {}
    81. for k, v in pairs(tasks) do
    82. if getPlayerStorageValue(cid, QUESTSTORAGE_BASE + k) < 1 and getPlayerStorageValue(cid, REPEATSTORAGE_BASE + k) < repeatTimes then
    83. able[k] = true
    84. if getPlayerLevel(cid) < v.level[1] or getPlayerLevel(cid) > v.level[2] then
    85. able[k] = false
    86. end
    87. if v.storage and getPlayerStorageValue(cid, v.storage[1]) < v.storage[2] then
    88. able[k] = false
    89. end
    90.  
    91. if v.rank then
    92. if getPlayerRank(cid) < v.rank then
    93. able[k] = false
    94. end
    95. end
    96.  
    97. if v.premium then
    98. if not isPremium(cid) then
    99. able[k] = false
    100. end
    101. end
    102.  
    103. if able[k] then
    104. table.insert(canmake, k)
    105. end
    106. end
    107. end
    108. return canmake
    109. end
    110.  
    111.  
    112. function canStartTask(cid, name, table)
    113. local v = ""
    114. local id = 0
    115. local t = (table and table or tasks)
    116. for k, i in pairs(t) do
    117. if i.name then
    118. if i.name:lower() == name:lower() then
    119. v = i
    120. id = k
    121. break
    122. end
    123. else
    124. if i.raceName:lower() == name:lower() then
    125. v = i
    126. id = k
    127. break
    128. end
    129. end
    130. end
    131. if v == "" then
    132. return false
    133. end
    134. if getPlayerStorageValue(cid, QUESTSTORAGE_BASE + id) > 0 then
    135. return false
    136. end
    137. if (getPlayerStorageValue(cid, REPEATSTORAGE_BASE + id) >= repeatTimes) or (v.norepeatable and getPlayerStorageValue(cid, REPEATSTORAGE_BASE + id) > 0) then
    138. return false
    139. end
    140. if getPlayerLevel(cid) >= v.level[1] and getPlayerLevel(cid) <= v.level[2] then
    141. if v.premium then
    142. if isPremium(cid) then
    143. if v.rank then
    144. if getPlayerRank(cid) >= v.rank then
    145. if v.storage then
    146. if getPlayerStorageValue(cid, v.storage[1]) >= v.storage[2] then
    147. return true
    148. end
    149. else
    150. return true
    151. end
    152. end
    153. else
    154. return true
    155. end
    156. end
    157. else
    158. return true
    159. end
    160. end
    161. return false
    162. end
    163.  
    164. function getPlayerStartedTasks(cid)
    165.  
    166. local tmp = {}
    167. for k, v in pairs(tasks) do
    168. if getPlayerStorageValue(cid, QUESTSTORAGE_BASE + k) > 0 and getPlayerStorageValue(cid, QUESTSTORAGE_BASE + k) < 2 then
    169. table.insert(tmp, k)
    170. end
    171. end
    172. return tmp
    173. end
    174.  
    175. function isSummon(target)
    176. return (getCreatureMaster(target) ~= target)
    177. end
     
  20. Evilor

    Evilor Member

    Joined:
    Oct 17, 2016
    Messages:
    33
    Likes Received:
    2
    Best Answers:
    0
    Hello, I use this datapack:
    https://github.com/peonso/tibialegacyserver
    I get this error when I write tasks:
    Code (Text):
    1.  
    2. Lua Script Error: [Npc interface]
    3. data/npc/scripts/KillingInTheNameOf.lua:onCreatureSay
    4.  
    5. data/npc/scripts/KillingInTheNameOf.lua:22: attempt to call global 'getTasksByPlayer' (a nil value)
    6. stack traceback:
    7.         data/npc/scripts/KillingInTheNameOf.lua:22: in function 'callback'
    8.         data/npc/scripts/lib/npcsystem/npchandler.lua:301: in function 'onCreatureSay'
    9.         data/npc/scripts/KillingInTheNameOf.lua:8: in function <data/npc/scripts/KillingInTheNameOf.lua:8>
    10.  
    It works when I use normal othire data, can someone please help me?
    @Peonso meaby?
     

Share This Page

Loading...