Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 08/02/15 em %

  1. Bem bem bem bem.. venho trazer aqui um sistema/script seja la como quiser chamar que me chamou bema a tenção por ser bem interessante.. Feito pelo Karain (qual pedi autorização para repostar).. inicialmente havia sido feito para 0.4, inspirado num mini game para mc mas com a tendência de mudança e pedidos da comunidade o mesmo foi atualizado.. Não me peçam 0.4 pois ele não disponibilizou.. e bem.. atualizem-se né... eu não suporto 0.4 (para quem não entende, não suporto de não apóio) .~> Sobre o sistema - Como funciona <~. Primeiramente, se o jogador decidir se juntar a lista de espera do evento ele irá utilizar o comando !join hunger games e pronto.. estará na lista de espera. Depois de um tempo e quantidade de players para o evento (ambos configuráveis), assim que o evento começar eles serão teleportados para um local; terão todos seus items removidos de forma segura para um depot (configurável) Em cada mapa haverá chests que tem uma chance (random) de conter alguns items, o player precisa encontrar e coletar com intenção de sobreviver e ser o último player vivo. Premio configurável .~> Mapa<~. o mapa não foi feito pelo Karain, caso você seja dono do mapa e tenha como provar, por favor informe para que seu nome seja colocado nos créditos Download Do Mapa Aqui P.s.: não sei colocar scan nem como faz, se for preciso scan alguém faz por favor que eu edito o post Bug conhecido (mas acho que para server que não fique reiniciando isso não venha a ser um problema..) não testei essa parte para ver o que realmente ocorre.. // [edit]Código para correção do bug (não oficial) após o hunger.lua do global events[/edit] - alguns items podem não retornar ao player após o evento, mesmo que tenha sido carregado no mapa e nos scripts, no entanto, irá funcionar se o player tiver visitado o depot ao menos uma vez, em que o server ficou online Changelog 1.0.0 23 de julho 2015 : Liberado 1.0.1 29 de julho 2015 : Arrumado a atualziaçãod e items no chest após um player o abrir. 1.0.2 30 de julho 2015 : -Corrigido um erro fatal que acontecia quando um player morria ou dava logout enquanto no evento. -Adicionado o comando !ragequit que faz o jogador se matar enquanto no evento. 1.0.3 8 de agosto 2015: Corrigido bug que fazia o evento death ser executado em qualquer situação pvp, arquivos alterados: - creaturescripts/scripts/hunger.lua 1.0.4 9 de agosto 2015: Corrigido um debug no client por conta de broadcasts, obrigado ao silveralol, arquivos alterados: -globalevents/scripts/hunger.lua -creaturescripts/scripts/hunger.lua -creaturescripts/scripts/eventlogout.lua 1.0.5 30 de agosto 2015 (não oficial): Adicionado uma alteração para o problema de recuperação de items -globalevents/scripts/hunger.lua .~> Códigos <~. Em globalevents/globalevents.xml <globalevent type="startup" name="hunger" script="hunger.lua"/> Crie um arquivo chamado hunger.lua em globalevents/scripts e cole isso Em 30/08 o usuário Mokerhamer apareceu com uma solução para o problema que fazia com que alguns players não conseguissem recuperar os items após o evento, adicionando uma função clone, então funciona abrindo ou não o dp antes do evento.. estou sem pc novamente então não pude testar e o Karain até o momento não se pronunciou, de qualquer maneira parece promissor então vou colocar aparte. alterem por conta e risco. Altere a função player:getbackitems do código acima por este Em creaturescripts/creaturescripts.xml <event type="logout" name="eventlogout" script="eventlogout.lua"/> <event type="death" name="hunger" script="hunger.lua"/> Em creaturescripts/scripts/login.lua antes do return true player:registerEvent("hunger") Em creaturescripts/scripts/eventlogout.lua Em creaturescripts/scripts/hunger.lua Em talkactions/talkactions.xml <talkaction words="!join" separator=" " script="join.lua"/> <talkaction words="!ragequit" separator=" " script="leave.lua"/> Em talkactions/scripts/join.lua Em talkactions/scripts/leave.lua Em actions/actions.xml <!-- Hunger Games Chests --> <action fromaid="60101" toaid="60499" script="games/hunger.lua"/> <action fromaid="61101" toaid="61499" script="games/hunger.lua"/> <action fromaid="62101" toaid="62499" script="games/hunger.lua"/> Em actions/scripts/hunger.lua Curtiu da um rep ae né.. não arranca pedaço da mão e incentiva a trazer mais.. se você for sovina e n gostar de dar rep, ao menos um obrigado ja ta bom.. pelo menos mostra que esta valendo a pena ficar procurando sistemas maneiros para trazer, pedir autorização e traduzir as informações... [edit] para evitar problemas façam testes antes, fui informado por pm que as vezes mesmo indo ao dp antes alguns items ainda não retornam.. eu fiz um teste básico no sistema e não tive esse problema.. mas é melhor prevenir, por isso antes de colocar o sistema on no seu server façam stress test .Certamente o Karain esta tentando resolver mas mesmo assim eu fiz um post no seu tópico perguntando sobre informações mais detalhadas sobre e se esta sendo feito algo [edit 08/08] Alteração no script - vide Changelog [edit 09/08] Alteração no script - vide Changelog [edit 30/08] Alteração para o script - vide Changelog
    3 pontos
  2. SkyLigh

    BVB Assinatura

    Uma simples edição que fiz em um bg do BVB, Espero que gostem. Antes Depois Espero que gostem;
    3 pontos
  3. Lordbaxx

    [TFS 0.3.6] Player::canWalkthrough

    Bom muita gente procura esse código, e ao olhar na internet só vi disponível em um fórum porém incompleto então decidi pegar o código e postá-lo com oque faltava. Esse código é utilizado para que um player passe por outro player evitando tantas reclamações por "trapar" caminho ou algo parecido, vamos lá! Ah mais uma coisa, para funcionar é preciso que o servidor esteja em NON-PVP. OBS: Testado em tfs 0.3.6 somente! Player.cpp procure por: bool Player::canWalkthrough(const Creature* creature) const Substitua todo o código por: bool Player::canWalkthrough(const Creature* creature) const { if(creature == this || hasCustomFlag(PlayerCustomFlag_CanWalkthrough) || creature->isWalkable() || (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster()))) return true; const Player* player = creature->getPlayer(); if(!player) return false; if((((g_game.getWorldType() == WORLD_TYPE_NO_PVP && player->getVocation()->isAttackable()) || player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) || (player->getVocation()->isAttackable() && player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL))) && player->getTile()->ground) && (!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges) || player->getAccess() <= getAccess())) return true; return (player->isGhost() && getGhostAccess() < player->getGhostAccess()) || (isGhost() && getGhostAccess() > player->getGhostAccess()); } Depois vá em const.h e procure por: PlayerCustomFlag_CanWearAllAddons, //2^23 = 8388608 E em baixo coloque: PlayerCustomFlag_IsWalkable, //2^24 = 16777216 PlayerCustomFlag_CanWalkthrough, //2^25 = 33554433 Provavelmente em muitas sources do tfs 0.3.6, dê não exatamente um erro mais um aviso no player.cpp na função: void Player::updateInventoryWeight() Se o aviso ocorrer substitua a função citada acima por essa: void Player::updateInventoryWeight() { inventoryWeight = 0.00; if(!hasFlag(PlayerFlag_HasInfiniteCapacity)){ for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){ Item* item = getInventoryItem((slots_t)i); if(item){ inventoryWeight += item->getWeight(); } } } } Só utilize o código acima se ocorrer o "warning/aviso" sobre a função. Abraço. Os créditos ficam até o momento só ao Bruno Minervino e a fireelement. Qualquer outro envolvido será creditado.
    1 ponto
  4. Vodkart

    BattleField TFS 1.1+

    Informações: Repassei esse sistema: http://www.xtibia.com/forum/topic/192920-battlefield-event/page-1 para a nova versão Versão: TFS 1.1 ou SUPERIOR(NÃO FUNCIONA NO TFS 1.0) OBS: Favor ter noções básicas de como instalar o sistema no seu server. Instalando o Sistema: data\creaturescripts\scripts battlefield.lua function onLogin(player) player:registerEvent("battledeath") if Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage) == -1 then Game.setStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) Game.setStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0) Game.setStorageValue(_Lib_Battle_Info.storage_count, 0) end if player:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or player:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then player:setStorageValue(_Lib_Battle_Info.TeamOne.storage, -1) player:setStorageValue(_Lib_Battle_Info.TeamTwo.storage, -1) player:teleportTo(player:getTown():getTemplePosition()) end return true end function onPrepareDeath(creature, lastHitKiller, mostDamageKiller) if creature:isPlayer() and creature:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or creature:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then local MyTeam = creature:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and _Lib_Battle_Info.TeamOne.storage or _Lib_Battle_Info.TeamTwo.storage local EnemyTeam = creature:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and _Lib_Battle_Info.TeamTwo.storage or _Lib_Battle_Info.TeamOne.storage Game.setStorageValue(MyTeam, (Game.getStorageValue(MyTeam)-1)) creature:sendTextMessage(MESSAGE_INFO_DESCR, "[Battle Field] You Are Dead!") creature:setStorageValue(MyTeam, -1) creature:removeCondition(CONDITION_OUTFIT) if Game.getStorageValue(MyTeam) == 0 then getWinnersBattle(EnemyTeam) else doBroadCastBattle(23,"[BattleField Information] ".._Lib_Battle_Info.TeamOne.name.." "..Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage).." VS "..Game.getStorageValue(_Lib_Battle_Info.TeamTwo.storage).." " .._Lib_Battle_Info.TeamTwo.name) end end return true end creaturescript.xml <event type="login" name="battleflogin" script="battlefield.lua"/> <event type="preparedeath" name="battledeath" script="battlefield.lua"/> -------------------------------------------//------------------------------------------------- data\events\scripts abra o arquivo creature.lua e troque: function Creature:onTargetCombat(target) return true end por function Creature:onTargetCombat(target) if not self then return true end if self:isPlayer() and target:isPlayer() then if self:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or self:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end return true end events.xml Troque: <event class="Creature" method="onTargetCombat" enabled="0" /> por <event class="Creature" method="onTargetCombat" enabled="1" /> -------------------------------------------//------------------------------------------------- data\globalevents\scripts battlefieldstart.lua function onStartup() Game.setStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) Game.setStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0) Game.setStorageValue(_Lib_Battle_Info.storage_count, 0) return true end battlefieldthink.lua _Lib_Battle_Days = { ["Tuesday"] = { ["16:00"] = {players = 30}, ["15:32"] = {players = 2} }, ["Wednesday"] = { ["23:06"] = {players = 2} }, ["Thursday"] = { ["11:26"] = {players = 4}, ["20:30"] = {players = 10} } } function onThink(interval) if _Lib_Battle_Days[os.date("%A")] then hours = tostring(os.date("%X")):sub(1, 5) tb = _Lib_Battle_Days[os.date("%A")][hours] if tb and (tb.players % 2 == 0) then local tp = Game.createItem(1387, 1, _Lib_Battle_Info.tpPos) tp:setActionId(45000) CheckEvent(_Lib_Battle_Info.limit_Time) Game.setStorageValue(_Lib_Battle_Info.storage_count, tb.players) broadcastMessage("The event BattleField was opened and We are waiting "..tb.players.." Players! Team divided into "..((tb.players)/2).." VS "..((tb.players)/2)) end end return true end globalevents.xml <globalevent type="startup" name="NoBugBattle" script="battlefieldstart.lua"/> <globalevent interval="60000" name="BattleField" script="battlefieldthink.lua"/> -------------------------------------------//------------------------------------------------- data\lib\core battlefield.lua _Lib_Battle_Info = { Reward = { exp = {true, 100}, items = {true, 2160, 10}, premium_days = {false, 1} }, TeamOne = {name = "Black Assassins", storage = 140120, pos = {x=95,y=113,z=7}}, TeamTwo = {name = "Red Barbarians",storage = 140121,pos = {x=100,y=116,z=7}}, storage_count = 180400, tpPos = {x=92, y=116, z=7}, limit_Time = 2 -- em minutos } function resetBattle() Game.setStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) Game.setStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0) end function doBroadCastBattle(type, msg) for _, cid in pairs(Game.getPlayers()) do if Player(cid):getStorageValue(_Lib_Battle_Info.TeamOne.storage) == 1 or Player(cid):getStorageValue(_Lib_Battle_Info.TeamTwo.storage) == 1 then Player(cid):sendTextMessage(type, msg) end end end function getWinnersBattle(storage) local str, c = "" , 0 for _, cid in pairs(Game.getPlayers()) do local player = Player(cid) if player:getStorageValue(storage) >= 1 then if _Lib_Battle_Info.Reward.exp[1] == true then player:addExperience(_Lib_Battle_Info.Reward.exp[2]) end if _Lib_Battle_Info.Reward.items[1] == true then player:addItem(_Lib_Battle_Info.Reward.items[2], _Lib_Battle_Info.Reward.items[3]) end if _Lib_Battle_Info.Reward.premium_days[1] == true then player:addPremiumDays(_Lib_Battle_Info.Reward.premium_days[2]) end player:teleportTo(player:getTown():getTemplePosition()) player:setStorageValue(storage, -1) player:removeCondition(CONDITION_OUTFIT) c = c+1 end end str = str .. ""..c.." Player"..(c > 1 and "s" or "").." from team "..(Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage) == 0 and _Lib_Battle_Info.TeamTwo.name or _Lib_Battle_Info.TeamOne.name).." won the event battlefield!" resetBattle() OpenWallBattle() return broadcastMessage(str) end function OpenWallBattle() local B = { {1543,{x=96, y=124, z=7, stackpos = 1}}, {1543,{x=95, y=124, z=7, stackpos = 1}} } for i = 1, #B do if getTileItemById(B[i][2], B[i][1]).uid == 0 then doCreateItem(B[i][1], 1, B[i][2]) else doRemoveItem(getThingfromPos(B[i][2]).uid,1) end end end function removeBattleTp() local t = getTileItemById(_Lib_Battle_Info.tpPos, 1387).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(_Lib_Battle_Info.tpPos, CONST_ME_POFF) end function CheckEvent(delay) if delay > 0 and Game.getStorageValue(_Lib_Battle_Info.storage_count) > 0 then broadcastMessage("[BattleField Event] We are waiting "..Game.getStorageValue(_Lib_Battle_Info.storage_count).." players to Battlefield starts") elseif delay == 0 and Game.getStorageValue(_Lib_Battle_Info.storage_count) > 0 then for _, cid in pairs(Game.getPlayers()) do local player = Player(cid) if player:getStorageValue(_Lib_Battle_Info.TeamOne.storage) == 1 or player:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) == 1 then player:teleportTo(player:getTown():getTemplePosition()) player:setStorageValue(_Lib_Battle_Info.TeamOne.storage, -1) player:setStorageValue(_Lib_Battle_Info.TeamTwo.storage, -1) player:removeCondition(CONDITION_OUTFIT) end end broadcastMessage("The event cannot be started because not had enough players.") Game.setStorageValue(_Lib_Battle_Info.storage_count, 0) resetBattle() removeBattleTp() end addEvent(CheckEvent, 60000, delay-1) end Na mesma pasta procure por data\lib\core.lua e adc essa linha: dofile('data/lib/core/battlefield.lua') -------------------------------------------//------------------------------------------------- data\movements\scripts battlefield.lua local conditionRed = Condition(CONDITION_OUTFIT) conditionRed:setTicks(120 * 60 * 1000) conditionRed:setOutfit({lookType = 143, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94}) local conditionBlack = Condition(CONDITION_OUTFIT) conditionBlack:setTicks(120 * 60 * 1000) conditionBlack:setOutfit({lookType = 134, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114}) function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if player == nil then return false end if player:getGroup():getId() >= 3 then return player:teleportTo(_Lib_Battle_Info.TeamOne.pos) end if Game.getStorageValue(_Lib_Battle_Info.storage_count) > 0 then local getMyTeam = Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage) < Game.getStorageValue(_Lib_Battle_Info.TeamTwo.storage) and {_Lib_Battle_Info.TeamOne.storage,_Lib_Battle_Info.TeamOne.pos,_Lib_Battle_Info.TeamOne.name,conditionBlack} or {_Lib_Battle_Info.TeamTwo.storage,_Lib_Battle_Info.TeamTwo.pos, _Lib_Battle_Info.TeamTwo.name, conditionRed} player:addCondition(getMyTeam[4]) player:setStorageValue(getMyTeam[1], 1) Game.setStorageValue(getMyTeam[1], Game.getStorageValue(getMyTeam[1])+1) player:teleportTo(getMyTeam[2]) player:sendTextMessage(MESSAGE_INFO_DESCR, "You will join the team " .. getMyTeam[3] .. "!") Game.setStorageValue(_Lib_Battle_Info.storage_count, Game.getStorageValue(_Lib_Battle_Info.storage_count)-1) end if Game.getStorageValue(_Lib_Battle_Info.storage_count) == 0 then removeBattleTp() broadcastMessage("Battlefield will start in 2 minutes, please create your strategy!") addEvent(broadcastMessage, 2*60*1000-500, "BattleField will begin now!") addEvent(OpenWallBattle, 2*60*1000) end return true end movements.xml <movevent event="StepIn" actionid="45000" script="battlefield.lua"/> -------------------------------------------//------------------------------------------------- Configurações do TIME: em data\lib\core\battlefield.lua tem essas linhas: _Lib_Battle_Info = { Reward = { exp = {true, 100}, items = {true, 2160, 10}, premium_days = {false, 1} }, TeamOne = {name = "Black Assassins", storage = 140120, pos = {x=95,y=113,z=7}}, TeamTwo = {name = "Red Barbarians",storage = 140121,pos = {x=100,y=116,z=7}}, storage_count = 180400, tpPos = {x=92, y=116, z=7}, limit_Time = 10 -- em minutos } exp = {true,100} -- se vai receber exp ao ganhar evento? true ou false e quantidade items = {true, 2160, 10} -- se vai receber items ao ganhar o evento, true ou false e id, quantidade do item premium_days = {false, 1} -- se vai receber premium days ao ganhar o evento, true ou false e quantidade TeamOne = {name = "Black Assassins", storage = 140120, pos = {x=95,y=113,z=7}}, TeamTwo = {name = "Red Barbarians",storage = 140121,pos = {x=100,y=116,z=7}}, Name = nome do time Storage = Não mexa Pos = Onde cada time vai nascer storage_count = 180400 -- NÃO MEXAR tpPos = {x=92, y=116, z=7} -- Onde o teleporte irá aparecer ao iniciar o evento limit_Time = 10 -- É o tempo limite para os jogadores entrarem no teleport.(em minutos) Configurar Datas dos Eventos: Em data\globalevents\scripts\battlefieldthink.lua vai ter essa tabela: _Lib_Battle_Days = { ["Tuesday"] = { ["16:00"] = {players = 30}, ["15:32"] = {players = 2} }, ["Wednesday"] = { ["23:06"] = {players = 2} }, ["Thursday"] = { ["11:26"] = {players = 4}, ["20:30"] = {players = 10} } } ["DIA DA SEMANA"] = { ["HORARIO"] = {players = QUANTOS JOGADORES IRÃO PARTICIPAR} Regra: Sempre coloque números pares para os jogadores, do contrário o evento não irá iniciar.
    1 ponto
  5. Esse sistema/script/sei lá o que foi desenvolvido por Karain que quis trazer um 'ar' mais moderno ao tibia.. Com esse script conversar com o npc será mais uma experiência mais amigável, continua sendo customizável mas de uma forma mais fácil! Como instalar Em data/creaturescripts/creaturescrips.xml adicione <event type="modalWindow" name="Dialogue" script="dialogue.lua"/> Em data/creaturescripts/scripts/login.lua adicione isso antes do "return true" player:registerEvent("Dialogue") Crie em data/creaturescripts o arquivo dialogue.lua e adicione player_choices = {} defaultButtons = {{id = 0x00, text = "Select", enter = true, escape = false}, {id = 0x01, text = "End", enter = false, escape = true}} function Player:getChoiceText(choice_id) if player_choices and player_choices[self:getId()] then return player_choices[self:getId()][choice_id].text else return false end end function Player:createDialogueWindowWithButtons(modalWindowId, headerText, bodyText, buttonTable, choiceTable, sendToPlayer, priority) local var = ModalWindow(modalWindowId, headerText, bodyText) for i = 1, #buttonTable do var:addButton(buttonTable[i].id, buttonTable[i].text) if buttonTable[i].enter then var:setDefaultEnterButton(buttonTable[i].id) end if buttonTable[i].escape then var:setDefaultEscapeButton(buttonTable[i].id) end end player_choices[self:getId()] = choiceTable for i = 0, #choiceTable do if choiceTable[i] ~= nil and (choiceTable[i].storage == false or self:getStorageValue(choiceTable[i].storage[1]) == choiceTable[i].storage[2]) then var:addChoice(i, choiceTable[i].text) end end if not priority then var:setPriority(false) end if sendToPlayer then var:sendToPlayer(self) end end function onModalWindow(player, modalWindowId, buttonId, choiceId) -- be careful here if you have other modalwindow scripts if buttonId == 0x00 then player:say(player:getChoiceText(choiceId),TALKTYPE_SAY) elseif buttonId == 0x01 then player:say("Good Bye.",TALKTYPE_SAY) end return true end Crie em data/npc/scripts o arquivo dialogue.lua e adicione local npc_dialogue = { [1] = { message="This is the message that shows up before the choices, make sure it's long enough if you are having long choices.", choices= { [1]={text="Choice 1", storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="script1"}, [3]={text="Choice 3",storage={1234,1}, dialogue=3, script="trade"}, [4]={text="Choice 4",storage=false, dialogue=3, script="quest"}, [5]={text="Choice 5",storage=false, dialogue=false, script="quest2"}}}, [2] = { message="Bla bla bla bla bla bla bla.", choices= { [1]={text="Choice 1",storage=false, dialogue=1, script="end"}, [2]={text="Choice 2",storage=false, dialogue=2, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=false, script="end"}, [5]={text="Choice 5",storage=false, dialogue=3, script="end"}}}, [3] = { message="Brought to you by Matt Shadowwing.", choices= { [1]={text="Choice 1",storage={1245,2}, dialogue=false, script="end"}, [2]={text="Choice 2",storage=false, dialogue=false, script="end"}, [3]={text="Choice 3",storage={1234,1}, dialogue=false, script="end"}, [4]={text="Choice 4",storage=false, dialogue=1, script="end"}, [5]={text="Choice 5",storage=false, dialogue=2, script="end"}}} } local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local talkstate = {} local function greetCallback(cid) local player = Player(cid) local npc = Npc(getNpcCid()) npcHandler:setMessage(MESSAGE_GREET, npc_dialogue[1].message) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[1].message, defaultButtons, npc_dialogue[1].choices, true, false) talkstate[player:getId()] = 1 return true end local function creatureSayCallback(cid, type, msg) local player = Player(cid) local npc = Npc(getNpcCid()) if not npcHandler:isFocused(cid) then return false elseif talkstate[player:getId()] then for _, v in pairs(npc_dialogue[talkstate[player:getId()]].choices) do if msgcontains(msg, v.text) and (v.storage == false or player:getStorageValue(v.storage[1]) == v.storage[2]) then if v.script == "end" then talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "trade" then -- trading script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) elseif v.script == "quest" then -- quest script here talkstate[player:getId()] = v.dialogue npcHandler:say(npc_dialogue[v.dialogue].message, cid) player:createDialogueWindowWithButtons(1, npc:getName(), npc_dialogue[v.dialogue].message, defaultButtons, npc_dialogue[v.dialogue].choices, true, false) end end end end return true end npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Em data/npc/lib/npcsystem/npchandler.lua altere todos os TALKTYPE_PRIVATE_PN para TALKTYPE_SAY Depois é só criar seu npc.xml referenciar o lua e seja feliz.. Qualquer problema eu terei que repassar para o criador pois não sou apto a dar suporte.. Estou somente trazendo para cá!
    1 ponto
  6. zipter98

    Shiny Stone mais "simples"

    Olá, Esse script não é nada complexo, mas, como a maioria dos que vejo sobre Shiny Stone é necessário fazer tabelas para definir os pokémons que irão evoluir e talz, achei melhor fazer este aqui, que é mais simples. As configurações já estão indicadas no script. Ah, pra quem não sabe, Shiny Stone transforma o pokémon na sua versão shiny. Vá em data/actions/scripts, crie um arquivo com extensão .lua, nomeie-o shinystone, e adicione o seguinte conteúdo: Agora, em data/actions, abra actions.xml, e adicione a tag: <action itemid="id da shiny stone" event="script" value="shinystone.lua" allowfaruse="1"/> Só isso, qualquer erro, só postar. Testei aqui, e está funcionando perfeitamente. Testado em PDA by Slicer sem level, v1.9. Ah, só mais uma complementação: só está evoluindo pokémons que sua versão shiny tenha "Shiny " antes do nome. Por exemplo, "Shiny Electabuzz". Se em seu server os shinies não tiverem o prefixo "Shiny", obviamente, o pokémon não irá evoluir.
    1 ponto
  7. Salve Tibianos de todo o Brasil e partes do mundo! Por meio deste tópico venho lhes apresentar o projeto UntraxBR! Começando por algo que todos nós jogadores gostamos. Eventos. Correto? Nosso servidor contará com diversos eventos, dentre eles: Bomberman; Caça ao monstro; Battlefield; O Último Sobrevivente; Dice Kill. São todos eventos automáticos que acontecem durante os dias da semana, com exceção do Caça ao Monstro que pode ocorrer a qualquer dia/hora. Resumo dos eventos: Bomberman Neste evento, seu principal objetivo é explodir seus adversários e evitar ser eliminado do jogo. Através de um comando, você coloca uma bomba no local em que seu personagem está e aguarda até que ela exploda, mas esteja atento, se ela explodir em você, você perderá o evento! Somente um jogador será o vencedor e levará a premiação. Caça ao monstro Em algum momento do jogo este evento será iniciado. Ao ser iniciado é feito um sorteio de alguma criatura do jogo para que seja caçada. O prazo de duração é aleatório porém dentro de 15min - 1hr. Qualquer tempo dentro deste intervalo é válido. O evento é parado automaticamente no fim do tempo, e o jogador que tiver matado mais do monstro escolhido será o vencedor. O monstro escolhido é o mesmo para todos os jogadores online. Battlefield Um evento bastante conhecido que consiste em: ao iniciar o evento, são pré-selecionadas duas equipes(preta e vermelha) as equipes são dividias aleatoriamente e por igual. Se em um time tiver 20 pretos, no vermelho também terá 20. O evento consiste em matar, quem matar o último jogador do time adversário, o time inteiro sairá vencedor. Ao contrário do Último Sobrevivente, este evento é em equipe e toda a ajuda e estratégia é fundamental. O último Sobrevivente Este evento o principal objetivo é sobreviver. Evite morrer. Todos tentarão te matar, e você tentará matar todos. Somente 1 será o vencedor, não mais que isso. Planeje sua estratégia, chame seus amigos e o melhor vencerá. Neste evento, não existe aliados, todos são inimigos de todos, o principal objetivo é matar! Dicekill Um evento para que gosta de testar a sorte! Neste evento o que manda é sua sorte, quanto menor o número, maior a força do monstro. Quanto maior o número, menor será a força dele! Torça para tirar o número 6 porque se tirar o 1, será morte na certa! Mapa: Nosso mapa contará com diversas hun'ts; Novas cidades; Novas ilhas. Quests: Poi - remake próprio; Inqui - remake próprio; Anihi - remake próprio; Paradox(modificada); Helmet of the ancients(modificada); Diversas quests espalhadas pelo mapa; Quests próprias com suas dificuldades e mistérios. Monstros: Monstros do tibia global e monstros novos. Imagens Missões com RPG. Nova quest Nova quest 2. Novas caves/monstros. Nova ilha Templo com NPC para ajuda. Novos monstros. Explore as montanhas. Novas hunts. Divisão evento Battlefield. Diferencial Teremos em nosso servidor 1 nova vocação, com seus prós e contras, totalmente balanceada. Nosso servidor será um servidor custom voltado ao global. Mas como assim ? Simples: Um mapa totalmente custom, com danos, vocações e outros parecidos com o global. Teremos itens próprios(não teremos frescuras de set's vip). Roupas serão adquiridas através da coleta dos itens, e cada uma dará seu bônus. Ex.: mage full dará +1 ml. Cada montaria terá sua vantagem e desvantagem, seja onde estiver. Equipe Uma boa parte do servidor já está pronta, porém para que tudo seja concluído com êxito necessitamos de uma equipe! Se você se interessou por tudo que foi dito acima não perca tempo, envie este formulário para o nosso e-mail e aguarde uma resposta de nossa equipe! Nosso e-mail: contato @ untraxbr.com.br (sem espaços, o Xt está bugando.) Há vagas em nossa equipe para: Mapper, scripter, rpg makker, tutor, webdesigner e moderador(site e fórum). Nome completo: Idade: Data de nascimento: Localização: Meus trabalhos: Skype/whatsapp: Vaga pretendida: Por que devo ser o escolhido para participar desta equipe: Aproveite e passe na nossa página do Facebook e dê uma curtidazinha para nos ajudar!
    1 ponto
  8. Administrador

    [005]

    Este é um tópico informativo. Aqui ficará registrado a promoção igualitária, positiva ou negativa; no que se diz respeito a congelamento ou avanço de sub-cargos e cargos. 02/08/2015 - 21:30. Situação: Removido por inatividade. @moskitinho Situação: Removido por inatividade @Lucasmml Situação: Apto para exercer o sub-cargo Tutor I. @Mudrock -> -> Situação: Apto para exercer o sub-cargo Estagiário III. -> Situação: Apto para exercer o sub-cargo Estagiário I. @RigBy -> Situação: Apto para exercer o sub-cargo Moderador I. -> Situação: Apto para exercer o sub-cargo Coordenador III. -> Situação: Apto para exercer o sub-cargo Coordenador III. @Avuenja ->
    1 ponto
  9. Mudrock

    BVB Assinatura

    Zikão Mermão
    1 ponto
  10. Benny

    Galeria • Beeny

    •• Asuna •• •• Ace •• •• Yamato •• •• Random •• •• Halo •• •• Predator ••
    1 ponto
  11. Benny

    Galeria • Beeny

    Uma logo simples =)
    1 ponto
  12. Benny

    BVB Assinatura

    Ah, foi uma edição bem simples mesmo. Mas ficou bonito, parabéns. Abraços, Benny
    1 ponto
  13. O primeiro, que eu também particularmente escolheria por ter um processo menos cansativo de configuração.
    1 ponto
  14. data/lib/pokemon moves.lua: elseif spell == "Iron Body" then local ironBody = { outfit = xxx, --Outfit. duration = 5, --Duração. } doSetCreatureOutfit(cid, {lookType = ironBody.outfit}, ironBody.duration * 1000) setPlayerStorageValue(cid, 9658783, 1) addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, 9658783, -1) end end, ironBody.duration * 1000)
    1 ponto
  15. Muito Obrigado iai fera, faz assim, abre um mapa novo e ir em file>import>import map
    1 ponto
  16. CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.
    1 ponto
  17. To meio sem tempo porque eu to consertando meu computador mas vou tentar fazer. Vou fazer um npc. * So vai ter essa redução se ele for para rook, então para outras cidades ele fica com a skill normal?
    1 ponto
  18. E.e man, eu estou assistindo a série atualmente do Avatar, ai deu uma pequena vontade de criar um server de Avatar rsrsrs
    1 ponto
  19. SkyLigh

    Level do fishing

    local fishing = { ["Magikarp"] = {skill = 0, level = -2}, --["Qwilfish"] = {skill = 18, level = 3}, --["Remoraid"] = {skill = 16, level = 2}, ["Staryu"] = {skill = 22, level = 6}, ["Tentacool"] = {skill = 20, level = 7}, ["Goldeen"] = {skill = 17, level = 5}, ["Krabby"] = {skill = 14, level = 2}, ["Horsea"] = {skill = 16, level = 3}, ["Poliwag"] = {skill = 15, level = 2}, --["Marill"] = {skill = 21, level = 3}, --["Azumarill"] = {skill = 37, level = 16}, ["Kingler"] = {skill = 35, level = 14}, ["Seaking"] = {skill = 28, level = 11}, ["Starmie"] = {skill = 49, level = 20}, --["Chinchou"] = {skill = 23, level = 6}, ["Poliwhirl"] = {skill = 27, level = 9}, ["Seadra"] = {skill = 41, level = 15}, --["Lanturn"] = {skill = 38, level = 14}, --["Octillery"] = {skill = 30, level = 9}, --["Corsola"] = {skill = 46, level = 16}, } local storage = 15458 local bonus = 1 local function doFish(cid, pos, ppos, chance, interval, number) if not isCreature(cid) then return false end if getThingPos(cid).x ~= ppos.x or getThingPos(cid).y ~= ppos.y then return false end if getPlayerStorageValue(cid, storage) ~= number then return false end doSendMagicEffect(pos, CONST_ME_LOSEENERGY) local peixe = 0 local playerpos = getClosestFreeTile(cid, getThingPos(cid)) local level = 1 local fishes = {} local randomfish = "" if getPlayerSkillLevel(cid, 6) < limite then doPlayerAddSkillTry(cid, 6, bonus) end for a, b in pairs (fishing) do if getPlayerSkillLevel(cid, 6) >= b.skill then table.insert(fishes, a) end end if math.random(1, 100) <= chance then if getPlayerSkillLevel(cid, 6) < limite and math.random(1, 100) <= 30 then --30 = 30% chance de add fishing doPlayerAddSkillTry(cid, 6, bonus) end randomfish = fishes[math.random(#fishes)] level = getPlayerSkillLevel(cid, 6) / 3 level = level + getPlayerLevel(cid) / 5 level = math.random(level * 0.6, level) level = level + fishing[randomfish].level peixe = doSummonCreature(randomfish, playerpos) if level <= 0 then level = math.random(getPlayerLevel(cid)) end if not isCreature(peixe) then addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) return true end setWildPokemonLevel(peixe, level) doSetMonsterPassive(peixe) doWildAttackPlayer(peixe, cid) if #getCreatureSummons(cid) >= 1 then doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) doChallengeCreature(getCreatureSummons(cid)[1], peixe) else doSendMagicEffect(getThingPos(cid), 173) doChallengeCreature(cid, peixe) end return true end addEvent(doFish, interval, cid, pos, ppos, chance, interval, number) return true end local waters = {4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825} function onUse(cid, item, fromPos, itemEx, toPos) if getPlayerGroupId(cid) == 11 then return true end local checkPos = toPos checkPos.stackpos = 0 if getTileThingByPos(checkPos).itemid <= 0 then doPlayerSendCancel(cid, '!') return true end if not isInArray(waters, getTileInfo(toPos).itemid) then return true end if (getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 63215) >= 1) and not canFishWhileSurfingOrFlying then doPlayerSendCancel(cid, "Você não pode pescar enquanto está surfando ou voando.") return true end if isInArray(waters, getTileInfo(getThingPos(cid)).itemid) then doPlayerSendCancel(cid, "Você não pode pescar enquanto estiver surfando ou voando acima da água.") return true end if getTileInfo(getThingPos(getCreatureSummons(cid)[1] or cid)).protection then doPlayerSendCancel(cid, "Você não pode pescar pokémons se você ou seu pokémon está em zona de protecção.") return true end if not tonumber(getPlayerStorageValue(cid, storage)) then local test = io.open("data/sendtobrun123.txt", "a+") local read = "" if test then read = test:read("*all") test:close() end read = read.."\n[fishing.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, storage).."" local reopen = io.open("data/sendtobrun123.txt", "w") reopen:write(read) reopen:close() setPlayerStorageValue(cid, storage, 1) end setPlayerStorageValue(cid, storage, getPlayerStorageValue(cid, storage) + 1) if getPlayerStorageValue(cid, storage) >= 800 then setPlayerStorageValue(cid, storage, 1) end local delay = 3500 - getPlayerSkillLevel(cid, 6) * 25 local chance = 10 + getPlayerSkillLevel(cid, 6) / 2.5 doFish(cid, toPos, getThingPos(cid), chance, delay, getPlayerStorageValue(cid, storage)) return true end
    1 ponto
  20. function onKill(cid, target, lasthit) local questcreatures = { ["dwarf"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15000, killsrequired = 100, raceName = "dwarfs"}, ["dwarf soldier"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15001, killsrequired = 100, raceName = "dwarfs"}, ["dwarf guard"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15002, killsrequired = 100, raceName = "dwarfs"}, ["dwarf geomancer"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15003, killsrequired = 100, raceName = "dwarfs"}, ["dwarf emperor"] = {questStarted = 1510, questStorage = 65000, creatureStorage = 15004, killsrequired = 100, raceName = "dwarfs"}, ["goblin"] = {questStarted = 1511, questStorage = 65001, creatureStorage = 15007, killsrequired = 150, raceName = "goblins"}, ["goblin assassin"] = {questStarted = 1511, questStorage = 65001, creatureStorage = 15008, killsrequired = 150, raceName = "goblins"}, ["goblin leader"] = {questStarted = 1511, questStorage = 65001, creatureStorage = 15009, killsrequired = 150, raceName = "goblins"}, ["goblin scavenger"] = {questStarted = 1511, questStorage = 65001, creatureStorage = 15010, killsrequired = 150, raceName = "goblins"}, ["rotworm"] = {questStarted = 1512, questStorage = 65002, creatureStorage = 15011, killsrequired = 300, raceName = "rotworms"}, ["carrion worm"] = {questStarted = 1512, questStorage = 65002, creatureStorage = 15012, killsrequired = 300, raceName = "rotworms"}, ["rotworm queen"] = {questStarted = 1512, questStorage = 65002, creatureStorage = 15067, killsrequired = 300, raceName = "rotworms"}, ["cyclops"] = {questStarted = 1513, questStorage = 65003, creatureStorage = 15013, killsrequired = 500, raceName = "cyclops"}, ["cyclops Smith"] = {questStarted = 1513, questStorage = 65003, creatureStorage = 15014, killsrequired = 500, raceName = "cyclops"}, ["cyclops drone"] = {questStarted = 1513, questStorage = 65003, creatureStorage = 15015, killsrequired = 500, raceName = "cyclops"}, ["crocodile"] = {questStarted = 1514, questStorage = 65004, creatureStorage = 15016, killsrequired = 300, raceName = "crocodiles"}, ["tarantula"] = {questStarted = 1515, questStorage = 65005, creatureStorage = 15017, killsrequired = 300, raceName = "tarantulas"}, ["amazon"] = {questStarted = 1516, questStorage = 65006, creatureStorage = 15018, killsrequired = 150, raceName = "amazons or valkirias"}, ["valkyrie"] = {questStarted = 1516, questStorage = 65006, creatureStorage = 15005, killsrequired = 150, raceName = "amazons or valkirias"}, ["stone golem"] = {questStarted = 1517, questStorage = 65007, creatureStorage = 15019, killsrequired = 200, raceName = "Stone golems"}, ["vampire"] = {questStarted = 1518, questStorage = 65008, creatureStorage = 15020, killsrequired = 300, raceName = "vampires"}, ["Infernalist"] = {questStarted = 1519, questStorage = 65009, creatureStorage = 15021, killsrequired = 1000, raceName = "Infernalists"}, ["Infernalist vip"] = {questStarted = 1519, questStorage = 65009, creatureStorage = 15043, killsrequired = 1000, raceName = "Infernalists"}, ["quara predator scout"] = {questStarted = 1520, questStorage = 65010, creatureStorage = 15022, killsrequired = 300, raceName = "quaras Scout"}, ["quara constrictor scout"] = {questStarted = 1520, questStorage = 65010, creatureStorage = 15023, killsrequired = 300, raceName = "quaras Scout"}, ["quara hydromancer scout"] = {questStarted = 1520, questStorage = 65010, creatureStorage = 15024, killsrequired = 300, raceName = "quaras Scout"}, ["quara mantassin scout"] = {questStarted = 1520, questStorage = 65010, creatureStorage = 15025, killsrequired = 300, raceName = "quaras Scout"}, ["quara pincher scout"] = {questStarted = 1520, questStorage = 65010, creatureStorage = 15026, killsrequired = 300, raceName = "quaras Scout"}, ["quara predator"] = {questStarted = 1521, questStorage = 65011, creatureStorage = 15027, killsrequired = 300, raceName = "quaras"}, ["quara constrictor"] = {questStarted = 1521, questStorage = 65011, creatureStorage = 15028, killsrequired = 300, raceName = "quaras"}, ["quara hydromancer"] = {questStarted = 1521, questStorage = 65011, creatureStorage = 15029, killsrequired = 300, raceName = "quaras"}, ["quara mantassin"] = {questStarted = 1521, questStorage = 65011, creatureStorage = 15030, killsrequired = 300, raceName = "quaras"}, ["quara pincher"] = {questStarted = 1521, questStorage = 65011, creatureStorage = 15031, killsrequired = 300, raceName = "quaras"}, ["water elemental"] = {questStarted = 1522, questStorage = 65012, creatureStorage = 15032, killsrequired = 70, raceName = "water elementals"}, ["roaring water elemental"] = {questStarted = 1522, questStorage = 65012, creatureStorage = 15033, killsrequired = 70, raceName = "water elementals"}, ["Slick water elemental"] = {questStarted = 1522, questStorage = 65012, creatureStorage = 15034, killsrequired = 70, raceName = "water elementals"}, ["massive water elemental"] = {questStarted = 1522, questStorage = 65012, creatureStorage = 15035, killsrequired = 70, raceName = "water elementals"}, ["hellspawn"] = {questStarted = 1523, questStorage = 65013, creatureStorage = 15036, killsrequired = 750, raceName = "hellspawns"}, ["hellspawn vip"] = {questStarted = 1523, questStorage = 65013, creatureStorage = 15082, killsrequired = 750, raceName = "hellspawns"}, ["frost dragon"] = {questStarted = 1524, questStorage = 65014, creatureStorage = 15040, killsrequired = 3000, raceName = "frost dragons"}, ["castle frost dragon"] = {questStarted = 1524, questStorage = 65014, creatureStorage = 15081, killsrequired = 3000, raceName = "frost dragons"}, ["frost dragon vip"] = {questStarted = 1524, questStorage = 65014, creatureStorage = 15041, killsrequired = 3000, raceName = "frost dragons"}, ["hellfire fighter"] = {questStarted = 1525, questStorage = 65015, creatureStorage = 15044, killsrequired = 1000, raceName = "hellfire/massive fire elemetals"}, ["blazing fire elemental"] = {questStarted = 1525, questStorage = 65015, creatureStorage = 15045, killsrequired = 1000, raceName = "hellfire/massive fire elemetals"}, ["blistering fire elemental"] = {questStarted = 1525, questStorage = 65015, creatureStorage = 15046, killsrequired = 1000, raceName = "hellfire/massive fire elemetals"}, ["massive fire elemental"] = {questStarted = 1525, questStorage = 65015, creatureStorage = 15047, killsrequired = 1000, raceName = "hellfire/massive fire elemetals"}, ["mutated rat"] = {questStarted = 1526, questStorage = 65016, creatureStorage = 15048, killsrequired = 200, raceName = "mutated rats"}, ["giant spider"] = {questStarted = 1527, questStorage = 65017, creatureStorage = 15049, killsrequired = 500, raceName = "giant Spiders"}, ["hydra"] = {questStarted = 1528, questStorage = 65018, creatureStorage = 15050, killsrequired = 2000, raceName = "hydras"}, ["hydra vip"] = {questStarted = 1528, questStorage = 65018, creatureStorage = 15065, killsrequired = 2000, raceName = "hydras"}, ["fury"] = {questStarted = 1529, questStorage = 65019, creatureStorage = 15051, killsrequired = 2000, raceName = "furys"}, ["fury vip"] = {questStarted = 1529, questStorage = 65019, creatureStorage = 15042, killsrequired = 2000, raceName = "furys"}, ["behemoth"] = {questStarted = 1530, questStorage = 65020, creatureStorage = 15052, killsrequired = 2000, raceName = "behemoths"}, ["behemoth vip"] = {questStarted = 1530, questStorage = 65020, creatureStorage = 15077, killsrequired = 2000, raceName = "behemoths"}, ["serpent spawn"] = {questStarted = 1531, questStorage = 65021, creatureStorage = 15053, killsrequired = 1500, raceName = "Serpents Spawn"}, ["green djinn"] = {questStarted = 1532, questStorage = 65022, creatureStorage = 15054, killsrequired = 500, raceName = "green djinns"}, ["efreet"] = {questStarted = 1532, questStorage = 65022, creatureStorage = 15055, killsrequired = 500, raceName = "green djinns"}, ["blue djinn"] = {questStarted = 1533, questStorage = 65023, creatureStorage = 15056, killsrequired = 500, raceName = "blue djinns"}, ["marid"] = {questStarted = 1533, questStorage = 65023, creatureStorage = 15057, killsrequired = 500, raceName = "blue djinns"}, ["pirate buccaneer"] = {questStarted = 1534, questStorage = 65024, creatureStorage = 15058, killsrequired = 3000, raceName = "pirates"}, ["pirate corsair"] = {questStarted = 1534, questStorage = 65024, creatureStorage = 15059, killsrequired = 3000, raceName = "pirates"}, ["pirate cutthroat"] = {questStarted = 1534, questStorage = 65024, creatureStorage = 15060, killsrequired = 3000, raceName = "pirates"}, ["pirate ghost"] = {questStarted = 1534, questStorage = 65024, creatureStorage = 15061, killsrequired = 3000, raceName = "pirates"}, ["pirate marauder"] = {questStarted = 1534, questStorage = 65024, creatureStorage = 15062, killsrequired = 3000, raceName = "pirates"}, ["pirate Skeleton"] = {questStarted = 1534, questStorage = 65024, creatureStorage = 15063, killsrequired = 3000, raceName = "pirates"}, ["son of verminor"] = {questStarted = 1535, questStorage = 65025, creatureStorage = 15064, killsrequired = 3000, raceName = "Son of verminor"}, ["castle son of verminor"] = {questStarted = 1535, questStorage = 65025, creatureStorage = 15080, killsrequired = 3000, raceName = "Son of verminor"}, ["son of verminor vip"] = {questStarted = 1535, questStorage = 65025, creatureStorage = 15066, killsrequired = 3000, raceName = "Son of verminor"}, ["defiler"] = {questStarted = 1536, questStorage = 65026, creatureStorage = 15070, killsrequired = 5000, raceName = "defilers"}, ["defiler vip"] = {questStarted = 1536, questStorage = 65026, creatureStorage = 15083, killsrequired = 5000, raceName = "defilers"}, ["grim reaper"] = {questStarted = 1537, questStorage = 65027, creatureStorage = 15071, killsrequired = 10000, raceName = "grim reapers"}, ["grim reaper vip"] = {questStarted = 1537, questStorage = 65027, creatureStorage = 15072, killsrequired = 10000, raceName = "grim reapers"}, ["castle grim reaper"] = {questStarted = 1537, questStorage = 65027, creatureStorage = 15078, killsrequired = 10000, raceName = "grim reapers"}, ["undead dragon"] = {questStarted = 1538, questStorage = 65028, creatureStorage = 15073, killsrequired = 3000, raceName = "undead dragons"}, ["undead dragon vip"] = {questStarted = 1538, questStorage = 65028, creatureStorage = 15074, killsrequired = 3000, raceName = "undead dragons"}, ["demon"] = {questStarted = 1539, questStorage = 65029, creatureStorage = 15075, killsrequired = 6666, raceName = "demons"}, ["castle demon"] = {questStarted = 1539, questStorage = 65029, creatureStorage = 15079, killsrequired = 6666, raceName = "demons"}, ["demon vip"] = {questStarted = 1539, questStorage = 65029, creatureStorage = 15076, killsrequired = 6666, raceName = "demons"} } if creature then if(isplayer(target) == true) then return true end if getplayerStoragevalue(cid, creature.questStarted) > 0 then if getplayerStoragevalue(cid, creature.questStorage) < creature.killsrequired then if getplayerStoragevalue(cid, creature.questStorage) < 0 then doplayerSetStoragevalue(cid, creature.questStorage, 0) end if getplayerStoragevalue(cid, creature.creatureStorage) < 0 then doplayerSetStoragevalue(cid, creature.creatureStorage, 0) end doplayerSetStoragevalue(cid, creature.questStorage, getplayerStoragevalue(cid, creature.questStorage) + 1) doplayerSetStoragevalue(cid, creature.creatureStorage, getplayerStoragevalue(cid, creature.creatureStorage) + 1) doplayerSendtextmessage(cid, meSSage_StatuS_cONSOLe_bLue, "" .. getplayerStoragevalue(cid, creature.creatureStorage) .. " " .. getcreatureName(target) .. " defeated. total [" .. getplayerStoragevalue(cid, creature.questStorage) .. "/" .. creature.killsrequired .. "] " .. creature.raceName .. ".") end end end return true end tente assim
    1 ponto
  21. SkyLigh

    Problemas com espaços no final

    tente assim --[[ PERFECT UPGRADE SYSTEM 2.0 Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- UpgradeHandler = { levels = { [1] = {90, false, false}, [2] = {80, false, false}, [3] = {70, false, false}, [4] = {60, true, false}, [5] = {40, true, true} }, broadcast = 8, attributes = { ["attack"] = 1, ["defense"] = 1, ["armor"] = 1 }, message = { console = "Trying to refine %s to level +%s with %s%% success rate.", success = "You have upgraded %s to level +%s", fail = "You have failed in upgrade of %s to level +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "The targeted %s is already on max upgrade level.", notupgradeable = "This item is not upgradeable.", broadcast = "The player %s was successful in upgrading %s to level +%s.\nCongratulations!!", invalidtool = "This is not a valid upgrade tool.", toolrange = "This upgrade tool can only be used in items with level between +%s and +%s" }, tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, [8300] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, isEquipment = function(self) local weaponType = self:getItemWeaponType() return ((weaponType > 0 and weaponType < 7) or self.item.armor ~= 0) end, setItemName = function(self, name) return doItemSetAttribute(self.item.uid, "name", name) end, chance = function(self) local chances = {} chances.upgrade = (self.levels[self.item.level + 1][1] or 100) chances.downgrade = (self.item.level * 5) chances.erase = (self.item.level * 3) return chances end } function UpgradeHandler:new(item) local obj, ret = {} obj.item = {} obj.item.level = 0 obj.item.uid = item.uid for key, value in pairs(getItemInfo(item.itemid)) do obj.item[key] = value end ret = setmetatable(obj, {__index = function(self, index) if _G[index] then return (setmetatable({callback = _G[index]}, {__call = function(self, ...) return self.callback(item.uid, ...) end})) else return UpgradeHandler[index] end end}) if ret:isEquipment() then ret:update() return ret end return false end function UpgradeHandler:update() self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0) end function UpgradeHandler:refine(uid, item) if not self.item then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.notupgradeable) return "miss" end local tool = self.tools[item.itemid] if(tool == nil) then doPlayerSendTextMessage(uid, MESSAGE_EVENT_DEFAULT, self.message.invalidtool) return "miss" end if(self.item.level > #self.levels) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.maxlevel:format(self.item.name)) return "miss" end if(self.item.level < tool.range[1] or self.item.level >= tool.range[2]) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.toolrange:format(unpack(tool.range))) return "miss" end local chance = (self:chance().upgrade + tool.info.chance) doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.console:format(self.item.name, (self.item.level + 1), math.min(100, chance))) if(tool.info.removeable == true) then doRemoveItem(item.uid, 1) end if chance * 100 > math.random(1, 10000) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_ORANGE, self.message.success:format(self.item.name, (self.item.level + 1))) if (self.item.level + 1) >= self.broadcast then doBroadcastMessage(self.message.broadcast:format(getCreatureName(uid), self.item.name, (self.item.level + 1))) end self:setItemName((self.item.level > 0 and self:getItemName():gsub("%+(%d+)", "+".. (self.item.level + 1)) or (self:getItemName() .." +1"))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item.level > 0 and getItemAttribute(self.item.uid, key) or self.item[key]) + value) end end return "success" else if item.itemid == 8300 then if self.item.level < 0 then self:setItemName(self:getItemName():gsub("%+(%d+)", "")) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, getItemAttribute(self.item.uid, key) - self.item.level * value) end end end else doRemoveItem(self.item.uid, 1) end doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, item.itemid == 8300 and "Your item level has been reseted." or "You have broken your item while trying to upgrade it.") end end
    1 ponto
  22. L3K0T

    !desbugar para poketibia

    CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.
    1 ponto
  23. function onStatsChange(cid, attacker, type, combat, value) if isMonster(attacker) and isMonster(cid) then return false end return true end Entretanto, você terá que registrar o evento no arquivo .XML de todos os monstros. Ou, caso não queira realizar a cansativa tarefa acima, você pode tentar: Nas sources do servidor, monster.cpp: Abaixo de: if(isSummon()) isMasterInRange = canSee(getMaster()->getPosition()); coloque: std::string event = "NOME_DO_EVENT0"; //Nome do evento configurado em creaturescripts.xml. creature->registerCreatureEvent(event);
    1 ponto
  24. Ansioso, tenho certeza que vai se um ot ótimo. Boa sorte \o/.
    1 ponto
  25. zipter98

    magia mega scizor

    Não testei a spell. data/lib, areas.lua: spell_area = { --Área de posições que o pokémon pode teleportar. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 3, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } data/lib, pokemon moves.lua: elseif spell == "NOME_DA_SPELL" then local config = { times = 4, --Vezes que o pokémon irá se teleportar. appearEffect = xxx, --Efeito que vai aparecer no pokémon ao aparecer. effect = xxx, --Efeito de corte de garras. combat = STEELDAMAGE, --Elemento. disappearInterval = 200, --Tempo para, depois de reaparecer, o pokémon desaparecer novamente. (em milésimos de segundo) teleportInterval = 400 --Intervalo de tempo entre cada teleporte do pokémon. (em milésimos de segundo) } local pos = getPosfromArea(cid, spell_area) local randomPosis = {} for i = 1, config.times do randomPosis[i] = pos[math.random(#pos)] if not isWalkable(randomPosis[i]) or getTileInfo(randomPosis[i]).protection then while not isWalkable(randomPosis[i]) do randomPosis[i] = pos[math.random(#pos)] end end end local function doTeleport(cid, time) if not isCreature(cid) then return true end if not isCreature(target) or time <= 0 then doAppear(cid) doCreatureSetNoMove(cid, false) doRegainSpeed(cid) end local index = math.random(#randomPosis) doTeleportThing(cid, randomPosis[index]) for i = index, #randomPosis do randomPosis[i] = randomPosis[i + 1] or nil end doAppear(cid) doSendMagicEffect(getThingPos(cid), config.appearEffect) doDanoWithProtect(cid, config.combat, getThingPos(target), 0, -min, -max, config.effect) addEvent(doDisapear, config.disappearInterval, cid) addEvent(doTeleport, config.teleportInterval, cid, time - 1) end doDisapear(cid) doCreatureSetNoMove(cid, true) doChangeSpeed(cid, -getCreatureSpeed(cid)) addEvent(doTeleport, config.teleportInterval, cid, config.times)
    1 ponto
  26. Tentei Perfil : Capa :
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...