Search the Community
Showing results for tags 'creatureevent'.
-
creatureevent [Urgente] bug vocaçoes virando outras vocaçoes dbo
frankmizere007 posted a question in Scripts
No meu dbo q eu baixei tem um bug muito escroto os players do nada viram outras vocações alguém poderia me ajudar eu ja vi kaio virando bardork shenron viriando buu reborn ,buu virando goku black reborn oq poderia esta acontecendo? -
Olá, este é um script que adiciona todas as bless em jogadores que tiverem o level menor que o configurado em creaturescripts/scripts crie um arquivo chamado autoBless.lua e cole isso: local blessings = {1, 2, 3, 4, 5}local level = 150function onLogin(cid) if getPlayerLevel(cid) <= level then for cont = 1, table.maxn(blessings) do doPlayerAddBlessing(cid, blessings[cont]) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você recebeu todas as blessings por causa que é nivel menor que "..level.."!") endend em creaturescripts.xml adicione a seguinte tag: <event type="death" name="autoBless" event="script" value="autoBless.lua"/> em creaturescripts/scripts no arquivo login.lua adicione a seguinte tag: registerCreatureEvent(cid, "autoBless")
-
Bom, eu tava vendo uns links sobre o os.date e lembrei que no login você recebe a mensagem de ultimo login, Eu fui ver como funciona e coloquei uma forma de mandar a mensagem totalmente em português, É um script bem inútil kk Mas para quem quiser usar ta aí Primeiramente vá em creaturescripts/scripts/login.lua Abra o arquivo e procure por: str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "." E substitua por: str = "Seu último login foi em "..os.date("%d", getPlayerLastLoginSaved(cid)).."/"..os.date("%m", getPlayerLastLoginSaved(cid)).."/".. os.date("%Y", getPlayerLastLoginSaved(cid)).." ás "..os.date("%H", getPlayerLastLoginSaved(cid))..":"..os.date("%M", getPlayerLastLoginSaved(cid)).."." Não esqueça de mudar o login.lua de UTF-8 para ANSI. Se não vai aparecer várias letras embaralhadas onde tiver acento! Para quem não sabe converter para ANSI e usa o Notepad++ faça assim: Caso não use Notepad++, Você terá que ir no bloco de notas Como ficará:
-
Fala Galera BLZ Vim Trazer Uma Script Feita Port Min De Msg QUando Vc Logar Na Sua Conta Vai Em Creaturescipt e crie Uma Arquivo Chama Admlg Ficnado Admlg.lua e ADD Dps Vai em creaturescript.xml e add SE Gosta Deixe seu REP+ Creditos A Minha pela Script
-
Bom, uma amigo pedi o para mim fazer esse script porque o serve dele tem xp muito alta e depois de muitos leveis o hp e mana volta e nao da pra saber exato quanto de mana e life tem então resolvi isso para ele com esse script. *E bem simples mais não tinha aqui no forum. Oque faz ?: Assim que loga ele pucha os dados de mana e life do player e mostra para ele. creatures add esse código em uma arquivo lua, info.lua Toda vez que ele logar vai da a info do life e mana. * Uma Print de como ficou.* local config = {life = MESSAGE_STATUS_CONSOLE_BLUE,mana = MESSAGE_STATUS_CONSOLE_RED,vipstatus = MESSAGE_STATUS_CONSOLE_RED};function onLogin(cid)doPlayerSendTextMessage(cid, (config.life), "Your health is: " .. getCreatureHealth(cid) .. "/".. getCreatureMaxHealth(cid) .." hp.")doPlayerSendTextMessage(cid, (config.mana), "Your mana is: " .. getCreatureMaxMana(cid) .. "/" .. getCreatureMaxMana(cid) .." mana.")if getPlayerPremiumDays(cid) > 0 thendoPlayerSendTextMessage(cid, (config.vipstatus), "You are premium and you have: " .. getPlayerPremiumDays(cid) .. " days left.")elsedoPlayerSendTextMessage(cid, (config.vipstatus), "You are no premium.")endreturn trueend lembrar de registrar o evento: no login.lua registerCreatureEvent(cid, "info") -- NEWWW agora vai em creaturescripts.xml e add essa tag: <event type="login" name="info" event="script" value="info.lua"/> Se ajudei + rep. bjs =*
-
Ola galera. tenho com script de amuleto para red skull. Mas olhe bem, quando o cara morre ele volta pra lvl 1, sera que alguém pode modificar pra que quando o cara morra não aconteça isso ? AGRADEÇO DESDE JA ! id = 10718 --id do aol function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isPlayer(cid) == true then if (getPlayerSlotItem(cid, 2).itemid == id) then pos = getCreaturePos(cid) doCreatureSetDropLoot(cid, false) doPlayerSetLossPercent(cid, experience, 0) doSendMagicEffect(pos, 49) end return TRUE end end
-
Olá xTibianos, hoje trago à vocês um sistema meio simples, e que talvez muitos queiram... Bom, o sistema é Held Machine ! Sim, é aquela máquina que funde os Tokens e transforma em Helds. Irei deixar as informações sobre O sistema de Held Machine, Tokens e Helds abaixo ! http://spoilerspxg.blogspot.com.br/p/held-items.html Bom, vamos logo ao que interessa ! Em data/XML/channels.xml, você deverá criar canais relativos a cada opção de troca, seguindo o modelo: <channel id="ID_do_canal" name="Nome_do_canal"> <vocation id="10"/> </channel> Exemplos: <channel id="22" name="20 Devoted Token (Tier 1-2)"> <vocation id="10"/> </channel> <channel id="23" name="70 Mighty Token (Tier 1-3)"> <vocation id="10"/> </channel> Depois, na mesma pasta, vocations.xml: <vocation id="10" name="Held Machine" description="a pokemon trainer" needpremium="0" gaincap="0" gainhp="15" gainmana="0" gainhpticks="2" gainhpamount="3" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="-1" soulmax="251" gainsoulticks="-1" fromvoc="1"> <formula meleeDamage="0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.0" club="1.0" sword="1.0" axe="1.0" distance="1.0" shielding="1.0" fishing="3.0" experience="1.0"/> </vocation> data/actions/scripts, código da máquina de troca: function onUse(cid) doPlayerSetVocation(cid, 10) openChannelDialog(cid) return true end data/creaturescripts/scripts: local trade_options = { --[channel_id] = {token = {token_itemid, amount}, results = {held_itemid, held_itemid, held_itemid, ...}}, } function onJoinChannel(cid, channelId, users, isTv) local option = trade_options[channelId] if not option then return false end doPlayerSetVocation(cid, 1) if doPlayerRemoveItem(cid, option.token[1], option.token[2]) then local result = option.results[math.random(#option.results)] doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "In trade of "..option.token[2].."x "..getItemNameById(option.token[1])..", you received: "..getItemNameById(result)..".") doPlayerAddItem(cid, result, 1) else doPlayerSendTextMessage(cid, 27, "You do not have "..option.token[2].."x "..getItemNameById(option.token[1])..".") end return false end Configure na tabela trade_options as opções de troca, seguindo o modelo: [iD_do_canal] = {token = {ID_do_token, quantidade}, results = {IDs_dos_helds}}, Tag: <event type="joinchannel" name="Held_Machine" event="script" value="nome_do_arquivo.lua"/> Em login.lua: registerCreatureEvent(cid, "Held_Machine") Créditos: Zipter98 ( pelo sistema ); Eu ( por trazer ).
- 9 replies
-
- held machine
- tokens
-
(and 2 more)
Tagged with:
-
Eae galera do xtibia beleza? hoje venho trazer o Death System um sisteminha que um amigo meu fez, é bem utilizado atualmente. Antes de tudo gostaria de deixar bem claro que não fui eu que fiz. Créditos no final do tópico. Testado em OTX Server 8.60 e TheForgottenServer 0.4 8.60... Como funciona? O Death System em alguns servidores possui um channel chamado "Mortes" ou "Death Channel", mas há alguns servidores que preferem que seja anunciado no default mesmo e a função é informar quem matou quem, ou quem foi morto por certo monstro. O que há de novo? Bom, agora quem matar x jogadores(configurável) e essa quantia for uma consecutiva, será anunciado isso : E se algum jogador derrotá-lo dentro a consecutiva, será anunciado isso : Vamos ao sistema : em data/XML/channels.xml, adicione isso : <channel id="15" name="Death Channel"/> em data/creaturescripts/creaturescripts.xml : <event type="death" name="deathchannel" event="script" value="deathchannel.lua"/> em data/creaturescripts/login.lua, adicione isso antes do último return true : registerCreatureEvent(cid, "deathchannel") em data/creaturescripts/scripts, crie um arquivo deathchannel.lua e cole isso dentro : TFS: OTX: Há uma única configuração, que é as consecutivas : local frags = {10, 15, 20, 25, 30, 35, 40, 45, 50} completou 10 frags? anuncia! e assim sucessivamente.. Créditos: Zoom
- 18 replies
-
- death system
- 2016
-
(and 2 more)
Tagged with:
-
Boa noite galera Como levantei no tópico: http://www.xtibia.com/forum/topic/238784-monstros-se-matando/monstros selvagens são todos tratados como amigos e, portanto, não é possível setar target neles com funções de target normal. Além disso, o callBack onTarget() não funciona para monstros. Desde então estou em busca de uma forma de fazer monstros lutarem entre si sem mexer na source e, com algumas sugestões do Lobo @Night Wolf eu consegui chegar a algo bem satisfatório para o que eu precisava. Portanto, compartilho com você a base do sistema (fiz outras coisas para o meu objetivo que acho bobeira postar aqui, mas a base do sistema de luta está aqui). Então vamos lá. Primeiramente, esse sistema é baseado em dois eventos: onThink (que repete de x em x segundos) e onAttack(para evitar que o monstro ataque players quando estiver atacando monstros. Vá em creaturescripts e crie as seguintes tags em creaturescripts.xml: <event type="think" name="monsters" event="script" value="monsters.lua"/> <event type="attack" name="monstersatt" event="script" value="monsters.lua"/> Feito isso, vá na pasta lib (data/lib) e crie um arquivo chamado monsterslib.lua. La dentro coloque: Feito isso, agora crie um arquivo chamado monsters.lua dentro de creaturescripts/scripts, e cole isso dentro Pronto é isso, você tem um pequeno framework configurável para fazer seus monstros se matarem. Para implementar o script no monstro basta ir no arquivo .xml dos monstros que deseja incluir esse sistema e colocar, logo após as defense, a tag: <script> <event name="minionatt"/> <event name="minion"/> </script> Abaixo um exemplo de utilização do framework, simulando uma luta de "raças" entre dwarfs e orcs de diferentes tipos: O código está bem auto explicativo. Qualquer dúvida me avisem. Espero que gostem. Abraços,
-
Em data\creaturescripts\scripts crie um aquivo com o nome de doublexp.lua: -- Monday = Segunda -- Tuesday = Terça -- Wednesday = Quarta -- Thursday = Quinta -- Friday = Sexta -- Saturday = Sabado -- Sunday = Domingo function onLogin(cid) DoubleDays = {"Thursday", "Sunday"} if isInArray(DoubleDays, os.date("%A")) then doPlayerSetRate(cid, SKILL__LEVEL, 2.0) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Hoje estamos em evento de Double XP,Aproveite.") end return true end Em creaturescripts.xml adicione a seguinte linha: <event type="login" name="DoubleXP" event="script" value="doublexp.lua"/> Para alterar os dias que ocorrem a DoubleXP basta alterar os dias em: DoubleDays = {"Thursday", "Sunday"}
-
então gente alguem tem uma creaturescript que não de dano na pessoa da mesma party ?
-
então gente eu queria um sistema de quando um player matar outro apareça no default em laranja tipo Y matou Z tipo assim, outro sistema que eu preciso é de não poder matar membros da propria party
-
Galera, eu queria um script de task com npc, seria 5 tasks, só pode pedir uma por vez, podendo cancelar caso queira, e ao finalizar as 5 tasks ganharia os addons 1 e 2 do assassin outfit, vlw!
-
Iai, pessoal blz? Estou aqui para postar uma gambiarra que eu fiz kkk está gambiarra deixa o player impossível de passar do levle 100 , se ele passar deste level o script fará ele voltar do level dele por 100, por exemplo, to level 99, dai eu upo uns 10 level, e fico no level 109, ai o script faz voltar pro level 100. é uma gambiarra grande hein kkk, tomei como base uns scripts que vi com o tempo, eu testei e está funcionando 100% então espero que gostem em creaturescripts/scripts crie um arquivo com o nome de MaxLevel.lua então coloque isto dentro: local level = 100 function onAdvance(cid, skill, oldLevel, newLevel) if skill == 8 then if getPlayerLevel(cid) >= level then doPlayerSetRate(cid, 8, 0.0) doPlayerSetExperienceRate(cid, 0.0) doPlayerAddExp(cid, getExperienceForLevel(level)-getPlayerExperience(cid)) doPlayerSendCancel(cid, "Você atingiu o level limite de ".. level .."!") end end return true end Agora em login.lua adicione isto com as linhas semelhantes: registerCreatureEvent(cid, "MaxLevel") E para finalizar vá em creaturescript.xml e adicione isto: <event type="advance" name="MaxLevel" event="script" value="Maxlevel.lua"/> Pronto! Script adicionado e funcionando! Espero que gostem! vlw e fuis Tópico duplicado! Desculpem-me! Poderiam Excluir este tópico??
-
Iai, pessoal blz? Estou aqui para postar uma gambiarra que eu fiz kkk está gambiarra deixa o player impossível de passar do levle 100 , se ele passar deste level o script fará ele voltar do level dele por 100, por exemplo, to level 99, dai eu upo uns 10 level, e fico no level 109, ai o script faz voltar pro level 100. é uma gambiarra grande hein kkk, tomei como base uns scripts que vi com o tempo, eu testei e está funcionando 100% então espero que gostem em creaturescripts/scripts crie um arquivo com o nome de MaxLevel.lua então coloque isto dentro: local level = 100 function onAdvance(cid, skill, oldLevel, newLevel) if skill == 8 then if getPlayerLevel(cid) >= level then doPlayerSetRate(cid, 8, 0.0) doPlayerSetExperienceRate(cid, 0.0) doPlayerAddExp(cid, getExperienceForLevel(level)-getPlayerExperience(cid)) doPlayerSendCancel(cid, "Você atingiu o level limite de ".. level .."!") end end return true end Agora em login.lua adicione isto com as linhas semelhantes: registerCreatureEvent(cid, "MaxLevel") E para finalizar vá em creaturescript.xml e adicione isto: <event type="advance" name="MaxLevel" event="script" value="Maxlevel.lua"/> Pronto! Script adicionado e funcionando! Espero que gostem! vlw e fuis
-
Kill Player + Exp eu preciso do scrip eu teno um ot d war eu nao quero que os player ten dando 1 level al mourer. eu quero que de exp ejemplo.. 50000x
-
Explicação: Enquanto andar com o full addon de algumas ouflits irá sair efeito. Creaturescripts/scripts: creaturescripts.xml: <event type="login" name="EffectOutLogin" event="script" value="outfiteffect.lua"/> <event type="outfit" name="OutfitEffects" event="script" value="outfiteffect.lua"/> Configurando: local effect = { [136] = 3, [128] = 3, -- citizen [270] = 27,[273] = 27, -- jester [156] = 61,[152] = 61, -- assassin [147] = 44,[143] = 44, -- barbarian [148] = 45,[144] = 45, -- druid [157] = 68,[153] = 68, -- beggar [149] = 36,[145] = 36, -- wizard [279] = 17,[278] = 17, -- brotherwood [137] = 39,[129] = 39, -- hunter [141] = 66,[133] = 66, -- summoner [142] = 34,[134] = 34, -- warrior [155] = 31,[151] = 31, -- pirate [158] = 46,[154] = 46, -- shaman [288] = 6,[289] = 6 -- demonhunter } Em [] é o ID da ouflit e depois do = é o número do efeito
-
O script consiste em quando você der look no player irá aparecer se ele é VIP ou FREE e quantas pessoas ele já matou (frags). SS: lookplayer.lua (data/creaturescripts/scripts) function getPlayerFrags(cid) local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = {date = result:getDataInt("date")} if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = { day = table.maxn(contents.day), week = table.maxn(contents.week), month = table.maxn(contents.month) } return size.day + size.week + size.month end function onLook(cid, thing, position, lookDistance) local string = 'You see yourself.' if isPlayer(thing.uid) and thing.uid ~= cid then if getPlayerPremiumDays(thing.uid) > 0 then doPlayerSetSpecialDescription(thing.uid,'[Frags: '..getPlayerFrags(thing.uid)..'][VIP]') else doPlayerSetSpecialDescription(thing.uid,'[Frags: '..getPlayerFrags(thing.uid)..'][FREE]') end elseif thing.uid == cid then if getPlayerPremiumDays(cid) > 0 then doPlayerSetSpecialDescription(cid,'[Frags: '..getPlayerFrags(cid)..'][VIP]') else doPlayerSetSpecialDescription(cid,'[Frags: '..getPlayerFrags(cid)..'][FREE]') end if getPlayerFlagValue(cid, PLAYERFLAG_SHOWGROUPINSTEADOFVOCATION) then string = string..' You are '.. getPlayerGroupName(cid) ..'.' elseif getPlayerVocation(cid) ~= 0 then string = string..' You are '.. getPlayerVocationName(cid) ..'.' else string = string..' You have no vocation.' end string = string..getPlayerSpecialDescription(cid)..'' if getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil then string = string..' You are '.. (getPlayerSex(cid) == 0 and 'wife' or 'husband') ..' of '.. getPlayerNameByGUID(getPlayerPartner(cid)) ..'.' end if getPlayerGuildId(cid) > 0 then string = string..' You are ' .. (getPlayerGuildRank(cid) == '' and 'a member' or getPlayerGuildRank(cid)) ..' of the '.. getPlayerGuildName(cid) string = getPlayerGuildNick(cid) ~= '' and string..' ('.. getPlayerGuildNick(cid) ..').' or string..'.' end if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEECREATUREDETAILS) then string = string..'\nHealth: ['.. getCreatureHealth(cid) ..' / '.. getCreatureMaxHealth(cid) ..'], Mana: ['.. getCreatureMana(cid) ..' / '.. getCreatureMaxMana(cid) ..'].' string = string..'\nIP: '.. doConvertIntegerToIp(getPlayerIp(cid)) ..'.' end if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEEPOSITION) then string = string..'\nPosition: [X:'.. position.x..'] [Y:'.. position.y..'] [Z:'.. position.z..'].' end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string) return false end return true end creaturescripts.xml <event type="look" name="LookPlayer" event="script" value="lookplayer.lua"/> login.lua (data/creaturescripts) registerCreatureEvent(cid, "LookPlayer") Créditos: Taag - Suicide
-
Já que tô de bobeira nessa madrugada, não custa nada refazer uns sistemas né. O sistema consiste em não permitir o uso do Magebomb ou fazer (o famoso) MC. antimagemc.lua (data/creaturescripts/scripts) Creaturescripts.xml (data/creaturescripts) <event type="login" name=antimagemc" event="script" value="antimagemc.lua"/> PS: Tirei os acentos do script para evitar futuros bugs. PS²: Eu tirei o script de um fórum gringo e reformulei. Créditos: Gringo desconhecido.
-
O script consiste em não deixar que players da mesma guild se ataquem (se matem). creaturescripts.xml (data/creaturescripts): <event type="attack" name="attackguild" script="attackguild.lua"/> attackguild.lua (data/creaturescripts/scripts):
-
Falaê galera. Hoje vou trazer um script do Wise que achei bem interessante e não achei aqui. O que isso faz? Faz com que o player necessite se alimentar para parar de perder vida, caso não se alimente, sua vida irá descer até 0. Caso o player morra, quando entrar, ele vai continuar perdendo a porcentagem de HP, até que enfim se alimente. Acredito que seja bom para servidores sérios. Versões testadas: TFS 0.3.6, mas pelas funções, acho que execute de boa também com TFS 1.0 e com o TFS 0.4. Bora lá. Vá em data\creaturescripts\scripts, crie um .lua chamado checkhunger e adicione isso: -- Developed by Wise local t = { hp = 2, -- % maxTime = 25 * 60, -- minutes * 60 lossInterval = 5, -- seconds hstor = 98765 -- hunger storage } function checkHunger(cid) local h = getPlayerStorageValue(cid, t.hstor) local loss = t.lossInterval > 1 and t.lossInterval or 2 if getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBEATTACKED) then return true elseif getPlayerFood(cid) < 1 then if h <= t.maxTime then if h < 0 then setPlayerStorageValue(cid, t.hstor, 0) end setPlayerStorageValue(cid, t.hstor, getPlayerStorageValue(cid, t.hstor) + 1) else addEvent(function() if isPlayer(cid) then doCreatureAddHealth(cid, -(t.hp * (getCreatureMaxHealth(cid) / 100))) end end, (loss - 1) * 1000) end else if h > 0 then setPlayerStorageValue(cid, t.hstor, 0) end end addEvent(function() if isPlayer(cid) then checkHunger(cid) end end, 1000) return true end function onLogin(cid) return checkHunger(cid) and true end Agora vá em data\creaturescripts e abra o creaturescripts.xml, adicione a seguinte tag: <event type="login" name="checkHunger" event="script" value="checkhunger.lua"/> Configuração: local t = { hp = 2, -- porcentagem de HP que o player perderá maxTime = 25 * 60, -- tempo máximo para ficar sem se alimentar em minutos * 60 (no caso, seriam 25 minutos, ou seja, 1500 segundos) lossInterval = 5, -- tempo do intervalo de perda da porcentagem do HP, em segundos (no caso, perderia a porcentagem estipulada a cada 5 segundos) hstor = 98765 -- storage que faz a contagem do tempo máximo } Créditos: Wise Enjoy it!
- 1 reply
-
- suicidehunger
- system
-
(and 2 more)
Tagged with:
-
Então tenho uma script que da recompensa para o jogador dependendo o level que ele pegue, e queria saber como transforma-la em um script que da a recompensa de acordo com a Vocação do player. Exemplo: Knight upou level 100 ganha uma sword, um axe e um club. Druid upou level 100 ganha Rod. Etc... não precisaria ser 1 Script para toda vocação pode ser 1 script para cada vocação que já ajuda só destacando aonde teria que mudar o ID das vocações. levelitem.lua Tag: Login.lua
-
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á!
- 9 replies
-
- modalwindow
- modal window
-
(and 3 more)
Tagged with:
-
creatureevent AntiMageBomb para TFS 0.3.6 | 0.4
Marco Oliveira posted a topic in Globalevents e Spells
Já existe um sistema parecido no fórum, mas esse possui um código menor e também é funcional em 0.3.6 e 0.4 Em data\creaturescripts\scripts crie um arquivo chamado Antimagebomb.lua local config = { max = 3, text = "Multi-Client or Magebomb is not allowed.", group_id = 1 -- it will only kick player whit that id (1=Players, 2=tutor, 3=seniortutors, 4=Gm's, 5=Cm's and 6=God's } local accepted_ip_list = "" local function antiMC(p) if (getCreatureName(p.pid) == "Account Manager") then return true end if #getPlayersByIp(getPlayerIp(p.pid)) >= p.max then doRemoveCreature(p.pid) end return TRUE end function onLogin(cid) if not(isPlayer(cid)) then return true end if (getCreatureName(cid) == "Account Manager") then return true end if(getConfigValue("antimulticlient")) then if getPlayerGroupId(cid) <= config.group_id then if isInArray(accepted_ip_list,getPlayerIp(cid)) == FALSE then addEvent(antiMC, 1000, {pid = cid, max = config.max+1}) doPlayerSendTextMessage(cid, 19, config.text) end end end return TRUE end Em creaturescripts.xml <event type="login" name="Antimagebomb" event="script" value="Antimagebomb.lua"/> Na linha é o máximo de players que podem logar por ip: max = 3,