Farathor 22 Postado Fevereiro 28, 2017 Share Postado Fevereiro 28, 2017 [28/2/2017 16:33:10] [Error - NpcScript Interface] [28/2/2017 16:33:10] data/npc/scripts/arena.lua:onCreatureSay[28/2/2017 16:33:10] Description: [28/2/2017 16:33:10] (LuaInterface::internalGetPlayerInfo) Player not found when requesting player info #3[28/2/2017 16:33:10] [Error - NpcScript Interface] [28/2/2017 16:33:10] data/npc/scripts/arena.lua:onCreatureSay[28/2/2017 16:33:10] Description: [28/2/2017 16:33:10] data/npc/scripts/arena.lua:81: attempt to compare number with boolean[28/2/2017 16:33:10] stack traceback:[28/2/2017 16:33:10] data/npc/scripts/arena.lua:81: in function <data/npc/scripts/arena.lua:55>[28/2/2017 16:33:10] [C]: in function 'selfSay'[28/2/2017 16:33:10] data/npc/scripts/arena.lua:63: in function <data/npc/scripts/arena.lua:55> NPC: domodlib('arenaFunctions')local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endlocal focus = 0 local talk_start = 0 local TS = 0 function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Good bye then.') focus = 0 talk_start = 0 end end local function BYE() focus = 0 talk_start = 0 TS = 0 end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) msg = string.lower(msg) if (msgcontains(msg, 'hi') and (focus == 0)) then selfSay('Hello ' .. getCreatureName(cid) .. ', Do you want to make arena?.') focus = cid talk_start = os.clock() TS = 1 elseif msgcontains(msg, 'hi') and (focus ~= cid) then selfSay('Im Bussy') elseif TS == 1 and msgcontains(msg, 'yes') or msgcontains(msg, 'fight') or msgcontains(msg, 'arena') then if getPlayerStorageValue(cid, myArenaLevel) < 3 then local enterArena = myArenaLevelIs(cid) if getPlayerLevel(cid) >= enterArena.RLV then if getPlayerMoney(cid) >= enterArena.RC then setPlayerStorageValue(cid, talkNPC, 1) doPlayerRemoveMoney(cid, enterArena.RC) selfSay("Now you can go to test... ".. enterArena.LN .."") BYE() else selfSay("You don\'t have "..enterArena.RC.." gp! Come back when you will be ready!") BYE() end else selfSay("You don\'t have "..enterArena.RLV.." level! Come back when you will be ready!") BYE() end else selfSay(Cancel[6]) BYE() end elseif TS == 1 and msgcontains(msg, 'no') then selfSay("Bye!.") BYE() elseif msgcontains(msg, 'bye') then selfSay("Bye!.") BYE() end return true end function onThink() doNpcSetCreatureFocus(focus) if (os.clock() - talk_start) > 60 then if focus > 0 then selfSay('Good bye then.') end focus = 0 end endnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new()) MOD: <?xml version="1.0" encoding="UTF-8"?><mod name="Arena Svargrond" version="1.0" author="Tommy" contact="tommycrusher@gmail.com" enabled="yes"> <config name="arenaFunctions"><![CDATA[KickPosition = {x=1273, y=881, z=6} --if the player leave the arena or time is over, where he go.RewardsRoom = {x=1255, y=831, z=6} --rewards room position.arenaRoomMaxTime = 240 --max time for each room 240 = 4 min.OpenDoorsID = 5127 --if you change doors item ids, change me TimeStor = 42350 --here will be saved the time.myArenaLevel = 45450 --here will be saved the arena level.talkNPC = 45451 --Storage to check if the player have paid to the npc and can enter to the arena.RewardsStor = {42361, 42371, 42381} --Storage for greenshore, scrapper, warlord.isIN = 42352 --to check if the player is in the arena.myRoom = 46000 --here will be saved the current room.MonStor = 47000 --here will be saved the monster uid. DoorsActID = 42357 --Doors near the npc.LeavePortals = 42321 --The action id of the portal to leave the rooms (south portals).GobletTiles = {42360, 42370, 42380} --Action ids of the tiles for Bronze, Silver and Gold Goblets. Cancel = { --message when use door and have not paid to the npc. [1] = "You have not paid NPC yet.", --message when leave arena. [2] = "You have been kicked.!", --message when the player can't get the reward. [3] = "You can\'t get this item", --message when already got any reward. [4] = "It is empty.", --when try to open a reward door and haven't completed the level. [5] = "You have not finished this arena level.", --NPC answer if the player completed all arena levels. [6] = "You already did all the arena levels.", --message when time is over [7] = "The time is over.", --message when you can go to the next room, LoL >_> this is not a cancel btw. [8] = "You can go to the next room.", --when try to go to the next room and not killed the monster yet. [9] = "Kill the monster first", --when try to go to the next room but there is a player yet...this text will be PLAYERNAME + this text [10] = "is in the room yet." } Completed = { [1] = "Congatulations! you have completed the arena in", --HERE WILL BE THE ARENA NAME. [2] = "difficulty!, now go and take your reward."} --then the message will be "Congatulations! you have completed the arena in greenshore/scrapper/warlord difficulty!, now go and take your reward." Arena = { --greenshore [0] = { Cost = 10000, LevelName = 'greenshore', LevelNeeded = 30, Goblet = 5807 }, --scrapper [1] = { Cost = 50000, LevelName = 'scrapper', LevelNeeded = 50, Goblet = 5806 }, --warlord [2] = { Cost = 100000, LevelName = 'warlord', LevelNeeded = 80, Goblet = 5805 } } Rewards = { --greenshore --present with items. [42361] = { Stor = RewardsStor[1], Cont = 1990, items = {7372, 6569, 6574, 2114}, count = {1, 10, 1, 1} }, --blacksteel sword. [42362] = { Stor = RewardsStor[1], Cont = nil, item = 7406 }, --headchopper. [42363] = { Stor = RewardsStor[1], Cont = nil, item = 7380 }, --orcish maul. [42364] = { Stor = RewardsStor[1], Cont = nil, item = 7392 }, --backpack with items. [42365] = { Stor = RewardsStor[1], Cont = 7342, items = {7365, 7364}, count = {100, 100} }, --scrapper --present with items. [42371] = { Stor = RewardsStor[2], Cont = 1990, items = {7372, 6569, 6574, 7183}, count = {1, 10, 1, 1} }, --mystic blade. [42372] = { Stor = RewardsStor[2], Cont = nil, item = 7384 }, --heroic axe. [42373] = { Stor = RewardsStor[2], Cont = nil, item = 7389 }, --cranial basher [42374] = { Stor = RewardsStor[2], Cont = nil, item = 7415 }, --backpack with items. [42375] = { Stor = RewardsStor[2], Cont = 7342, items = {7365, 2547, 2547, 2311, 2304}, count = {100, 100, 100, 50, 50} }, --warlord --present with items. [42381] = { Stor = RewardsStor[3], Cont = 1990, items = {7372, 6569, 6574, 6568}, count = {1, 10, 1, 1} }, --justice seeker [42382] = { Stor = RewardsStor[3], Cont = nil, item = 7390 }, --royal axe. [42383] = { Stor = RewardsStor[3], Cont = nil, item = 7434 }, --blessed sceptre. [42384] = { Stor = RewardsStor[3], Cont = nil, item = 7429 }, --backpack with items. [42385] = { Stor = RewardsStor[3], Cont = 7342, items = {2273, 2268, 7443, 7440, 7529}, count = {50, 50, 1, 1, 100} } } arena_monsters = { --greenshore -scrapper --warlord [45300] = "Frostfur", [45310] = "Avalanche", [45320] = "Webster", [45301] = "Bloodpaw", [45311] = "Kreebosh the Exile", [45321] = "Darakan the Executioner", [45302] = "Bovinus", [45312] = "The Dark Dancer", [45322] = "Norgle Glacierbeard", [45303] = "Achad", [45313] = "The Hag", [45323] = "The Pit Lord", [45304] = "Colerian The Barbarian", [45314] = "Slim", [45324] = "Svoren the Mad", [45305] = "The Hairy One", [45315] = "Grimgor Guteater", [45325] = "The Masked Marauder", [45306] = "Axeitus Headbanger", [45316] = "Drasilla", [45326] = "Gnorre Chyllson", [45307] = "Rocky", [45317] = "Spirit of Earth", [45327] = "Fallen Mooh'tah Master Ghar", [45308] = "Cursed Gladiator", [45318] = "Spirit of Water", [45328] = "Deathbringer", [45309] = "Orcus the Cruel", [45319] = "Spirit of Fire", [45329] = "The Obliverator"} Checking = false RoomsACT = {42301, 42302, 42303, 42304, 42305, 42306, 42307, 42308, 42309} Goblets = { [42360] = {Id=Arena[0].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[0].LevelName.." difficulty."}, [42370] = {Id=Arena[1].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[1].LevelName.." difficulty."}, [42380] = {Id=Arena[2].Goblet, txt="It is given to the courageous victor of the barbarian arena "..Arena[2].LevelName.." difficulty."}} RewardsDoors = {[42366] = 1, [42376] = 2, [42386] = 3} ArenaAdding = {[0] = 3000, [1] = 3010, [2] = 3020} function myArenaLevelIs(cid) Stor = getPlayerStorageValue(cid, myArenaLevel) if Stor == -1 then setPlayerStorageValue(cid, myArenaLevel, 0) Stor = 0 elseif Stor == 3 then Stor = 2 end return { RC = Arena[stor].Cost, LN = Arena[stor].LevelName, RLV = Arena[stor].LevelNeeded, LV = getPlayerStorageValue(cid, myArenaLevel) }end function getDirectionMove(cid, itempos) --function by Nahruto p = getCreaturePosition(cid) i = itempos if p.x > i.x then if p.y > i.y then ret = NORTHWEST elseif p.y < i.y then ret = SOUTHWEST else ret = WEST end elseif p.x < i.x then if p.y > i.y then ret = NORTHEAST elseif p.y < i.y then ret = SOUTHEAST else ret = EAST end else if p.y > i.y then ret = NORTH elseif p.y < i.y then ret = SOUTH else ret = nil end end return retend function LeaveArena(cid) for i = 45300, 45329 do setPlayerStorageValue(cid, i, 0) end if isCreature(getPlayerStorageValue(cid, MonStor)) == TRUE then doRemoveCreature(getPlayerStorageValue(cid, MonStor)) end setGlobalStorageValue(getPlayerStorageValue(cid, myRoom), 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[2]) doTeleportThing(cid, KickPosition, FALSE) setPlayerStorageValue(cid, TimeStor, 0) setPlayerStorageValue(cid, isIN, 0)end function CheckRooms() addEvent(CheckRooms, 1000) for i = 42300, 42309 do local Player = getGlobalStorageValue(i) if isPlayer(Player) == TRUE then local PlayerTime = getPlayerStorageValue(Player, TimeStor) if PlayerTime <= os.time() then doTeleportThing(Player, KickPosition, FALSE) setPlayerStorageValue(Player, TimeStor, 0) setGlobalStorageValue(i, 0) doPlayerSendTextMessage(Player,MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[7]) if isCreature(getPlayerStorageValue(Player, MonStor)) == TRUE then doRemoveCreature(getPlayerStorageValue(Player, MonStor)) end elseif PlayerTime - 10 <= os.time() then doPlayerSendTextMessage(Player, MESSAGE_EVENT_DEFAULT, "you have "..PlayerTime - os.time().." seconds left.!") end else setGlobalStorageValue(i, 0) end endend function getArenaMonsterIdByName(name) for i = 45300, 45329 do if tostring(arena_monsters[i]) == string.lower(tostring(name)) then return i end end return falseend]]></config> <event type="login" name="arenaRegister" event="script"><![CDATA[ domodlib('arenaFunctions') function onLogin(cid) registerCreatureEvent(cid, "PlayerArena") registerCreatureEvent(cid, "ArenaKill") return trueend]]></event> <event type="death" name="PlayerArena" event="script"><![CDATA[ domodlib('arenaFunctions') function onDeath(cid, corpse, deathList) if getPlayerStorageValue(cid, isIN) == 1 then I = 0 for i = 45300, 45329 do if getPlayerStorageValue(cid, i) == 1 then I = i end end GlobalStor = I - ArenaAdding[myArenaLevelIs(cid).LV] setGlobalStorageValue(GlobalStor, 0) setPlayerStorageValue(cid, isIN, 0) if isCreature(getPlayerStorageValue(cid, MonStor)) then doRemoveCreature(getPlayerStorageValue(cid, MonStor)) end end return true end]]></event> <event type="kill" name="ArenaKill" event="script"><![CDATA[ domodlib('arenaFunctions')function onKill(cid, target, lastHit) if getPlayerStorageValue(cid, isIN) == 1 then local Room = getArenaMonsterIdByName(getCreatureName(target)) if Room ~= 0 then setPlayerStorageValue(cid, Room, 1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, Cancel[8]) end end return trueend]]></event> <action fromaid="42357" toaid="42386" event="script"><![CDATA[ domodlib('arenaFunctions')function onUse(cid, item, fromPosition, itemEx, toPosition) local myMove = getDirectionMove(cid, fromPosition) if myMove == nil then return FALSE end local Reward = Rewards[item.actionid] if Reward then if getPlayerStorageValue(cid, Reward.Stor) ~= 1 then local reward = nil if Reward.Cont ~= nil then reward = doCreateItemEx(Reward.Cont, 1) for i = 1, #Reward.items do doAddContainerItem(reward, Reward.items[i], Reward.count[i]) end else reward = doCreateItemEx(Reward.item, 1) end if reward ~= nil then if doPlayerAddItemEx(cid, reward, FALSE) == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,'You have found a '..getItemNameById(getThing(reward).itemid)..'.') setPlayerStorageValue(cid, Reward.Stor, 1) addPlayerRep(cid, 5, TEXTCOLOR_LIGHTBLUE) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[3]) end end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[4]) end elseif RewardsDoors[item.actionid] then if myArenaLevelIs(cid).LV >= RewardsDoors[item.actionid] then doTransformItem(item.uid, OpenDoorsID) doMoveCreature(cid, myMove) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[5]) end elseif item.actionid == DoorsActID and getPlayerStorageValue(cid, talkNPC) == 1 then doTransformItem(item.uid, OpenDoorsID) doMoveCreature(cid, myMove) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, Cancel[1])end return TRUE end]]></action> <movevent type="StepIn" fromaid="42300" toaid="42380" event="script"><![CDATA[ domodlib('arenaFunctions')function onStepIn(cid, item, position, fromPosition) local ArenaRoom = item.actionid if item.actionid == LeavePortals then LeaveArena(cid) elseif isInArray(GobletTiles, item.actionid) == TRUE then local gobletPos = getThingPos(item.uid) if getPlayerStorageValue(cid, item.actionid) ~= 1 then setPlayerStorageValue(cid, item.actionid, 1) local Goblet = doCreateItemEx(Goblets[item.actionid].Id, 1) doItemSetAttribute(Goblet, "description", ""..Goblets[item.actionid].txt.."\nAwarded to "..getCreatureName(cid)..".") gobletPos.y = gobletPos.y - 1 doTileAddItemEx(gobletPos, Goblet) end doTransformItem(item.uid, item.itemid - 1) elseif isInArray(RoomsACT, ArenaRoom) == TRUE or ArenaRoom == 42300 then if Checking == FALSE then Checking = TRUE CheckRooms() end local myLevelArena = myArenaLevelIs(cid).LV if ArenaAdding[myLevelArena] then Mons = ArenaRoom + ArenaAdding[myLevelArena] end if getGlobalStorageValue(ArenaRoom) == 0 then if isCreature(getPlayerStorageValue(cid, MonStor)) == FALSE then if ArenaRoom == 42300 and getPlayerStorageValue(cid, talkNPC) == 1 then setPlayerStorageValue(cid, talkNPC, 0) setPlayerStorageValue(cid, isIN, 1) P = 1 elseif ArenaRoom ~= 42300 and getPlayerStorageValue(cid, isIN) == 1 then P = 1 else P = nil end if P ~= nil then local SpawnPos = getThingPos(ArenaRoom) doTeleportThing(cid, SpawnPos, FALSE) SpawnPos.x = SpawnPos.x - 1 SpawnPos.y = SpawnPos.y - 1 local Monster = doSummonCreature(arena_monsters[Mons], SpawnPos) setGlobalStorageValue(ArenaRoom, cid) setGlobalStorageValue(ArenaRoom - 1, 0) setPlayerStorageValue(cid, TimeStor, os.time()+arenaRoomMaxTime) setPlayerStorageValue(cid, MonStor, Monster) setPlayerStorageValue(cid, myRoom, ArenaRoom) else LeaveArena(cid) end else doTeleportThing(cid, fromPosition, TRUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, Cancel[9]) end else doTeleportThing(cid, fromPosition, TRUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, ""..getCreatureName(getGlobalStorageValue(cid, ArenaRoom)).." "..Cancel[10].."") end elseif ArenaRoom == 42310 then if isCreature(getPlayerStorageValue(cid, MonStor)) == FALSE then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,""..Completed[1].." "..myArenaLevelIs(cid).LN.." "..Completed[2].."") setPlayerStorageValue(cid, myArenaLevel, getPlayerStorageValue(cid, myArenaLevel) + 1) setGlobalStorageValue(ArenaRoom - 1, 0) setPlayerStorageValue(cid, TimeStor, 0) setPlayerStorageValue(cid, isIN, 0) doTeleportThing(cid, RewardsRoom, TRUE) else doTeleportThing(cid, fromPosition, TRUE) doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_ORANGE,'Najpierw zabij potwora!') end end return TRUE end]]></movevent> <movevent type="StepOut" fromaid="42357" toaid="42387" event="script"><![CDATA[ domodlib('arenaFunctions')function onStepOut(cid, item, position, fromPosition) if item.actionid == DoorsActID or RewardsDoors[item.actionid] then doTransformItem(item.uid, item.itemid - 2) elseif isInArray(GobletTiles, item.actionid) == TRUE then doTransformItem(item.uid, item.itemid + 1) end return TRUE end]]></movevent> </mod> Link para o comentário Compartilhar em outros sites More sharing options...
Stigal 584 Postado Novembro 29, 2017 Share Postado Novembro 29, 2017 A questão neste tópico de suporte foi encerrada por falta de resposta. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados