Postado Setembro 17, 2015 9 anos Iae Bom, vim pedir alguns scripts para TFS 0.4... Vou explica-los. 1º- Atributos por storages: Funcionaria da seguinte maneira: Existem 4 storages no meu servidor (21201) (21202) (21203) (21204), cada storage corresponde a uma quest de cada vocação de Sorcerer(01) até knight (04). O pedido é se alguém conseguiria fazer um script onde cada storage adicionaria um atributo ao jogador (obs: esses storages são para sempre). Atributos: 21201: Adicionaria uma porcentagem de regeneração de mana. (Se a porcentagem for 50%, o jogador tem 50% de chance de curar 20% de sua mana). 21202: Adicionaria uma porcentagem de absorver sangue de jogadores ou monstros em sua volta (3x3). (Se a porcentagem for 50%, o jogador tem 50% de chance de sugar 20% de life e mana de seus inimigos). obs: não sei e a absorção de mana funcionaria em monstros. 2103: Adiciona uma quantidade de velocidade ao jogador e aumenta uma porcentagem em sua precisão com armas de distancia. (Aumenta 20% em acertar ataques a longa distância). sabe quando o paladino erra o ataque? Então, essa porcentagem diminuiria a chance desses erros acontecerem. 2104: Aumenta uma porcentagem em refletir uma porcentagem do dano recebido dos inimigos. (Se a porcentagem for 50%, o jogador tem 50% de chance de refletir 20% do dano recebido). obs: Esses valores são exemplos, eles podem ser mudados* 2º- Magias passivas: Funcionaria da seguinte maneira: O jogador iria receber uma storage já configurada no meu servidor, essa storage desbloquearia uma magia passiva. Após conseguir esse storage o jogador ficaria com um efeito nele mesmo eternamente. A magia teria uma porcentagem para lançar por exemplo: Se configurar 50% na magia, ela teria 50% de chance de se enfurecer e atacar quem está te atacando. Vou dar alguns exemplos de magias que se parecem com isso: soul system/ - Esse sistema contém 3 scripts, o que se parece com meu pedido é o sistema de auras, onde o jogador fica com uma aura o rondando e ela tem uma chance de atacar quem o ataca. Mas eu não quero que ela fique em volta do jogador. O estilo do ataque seria assim: Um efeito cairia do céu e atingira o alvo(ou os alvos) que a magia quer atingir, tenho esse script: local water = {490, 491, 492, 493} local combat = createCombatObject() local meteor = createCombatObject() setCombatParam(meteor, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(meteor, COMBAT_PARAM_EFFECT, 47) setCombatFormula(meteor, COMBAT_FORMULA_LEVELMAGIC, -9.0, -30, -10.0, 4) local condition = createConditionObject(CONDITION_ENERGY) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 10, 2000, -50) setCombatCondition(combat, condition) combat_arr = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } local combat_area = createCombatArea(combat_arr) setCombatArea(combat, combat_area) local function meteorCast(p) doCombat(p.cid, p.combat, positionToVariant(p.pos)) end local function stunEffect(cid) doSendMagicEffect(getThingPos(cid), CONST_ME_STUN) end function onTargetTile(cid, pos) if (math.random(0, 0) == 0) then local ground = getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}) if (isInArray(water, ground.itemid) == TRUE) then local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z} doSendDistanceShoot(newpos, pos, 35) addEvent(meteorCast, 200, {cid = cid, pos = pos, combat = meteor_water}) else local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z} doSendDistanceShoot(newpos, pos, 35) addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor}) end end end setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Ele foi modificado na gambiarra kkk, Mas é essa noção. 3º - Magia que absorve. ---- Resolvido pelo membro zipter98 em outro fórum. Funcionaria da seguinte forma: Já viram o movimento "Lech Seed" nos poketibias? Então é o mesmo conceito. O jogador mandaria a magia no inimigo e a magia absorveria uma quantidade de sangue a cada 1 segundo por 10 segundos. Cada vez que a magia absorveria o sangue aparece um efeito no inimigo, mesma coisa que o lech seed. 4º- NPC Guild Master ---- Resolvido por Deadpool Bom, seria um npc onde o jogador criaria uma guilda, invitaria um membro para guild (ele teria que eu ao npc para aceitar o convite), baniria alguém da guilda, promoveria alguém da guilda e deletaria a guilda. 5º - Editar magia. Então, fiz uma magia de área que fica conjurando direto por 6 segundos, mas quando o jogador anda, a magia não o acompanha... Gostaria que alguém me ajudasse nisso. Aqui o script: -- SpellCreator generated. -- =============== COMBAT VARS =============== -- Areas/Combat for 6000ms local combat60_Brush = createCombatObject() setCombatParam(combat60_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat60_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat60_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat60_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 5500ms local combat55_Brush = createCombatObject() setCombatParam(combat55_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat55_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat55_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat55_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 5000ms local combat50_Brush = createCombatObject() setCombatParam(combat50_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat50_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat50_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat50_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 4500ms local combat45_Brush = createCombatObject() setCombatParam(combat45_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat45_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat45_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat45_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 0ms local combat0_Brush = createCombatObject() setCombatParam(combat0_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat0_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat0_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat0_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 500ms local combat5_Brush = createCombatObject() setCombatParam(combat5_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat5_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat5_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat5_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 1000ms local combat10_Brush = createCombatObject() setCombatParam(combat10_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat10_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat10_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat10_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 1500ms local combat15_Brush = createCombatObject() setCombatParam(combat15_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat15_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat15_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat15_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 2000ms local combat20_Brush = createCombatObject() setCombatParam(combat20_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat20_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat20_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat20_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 2500ms local combat25_Brush = createCombatObject() setCombatParam(combat25_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat25_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat25_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat25_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 3000ms local combat30_Brush = createCombatObject() setCombatParam(combat30_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat30_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat30_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat30_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 3500ms local combat35_Brush = createCombatObject() setCombatParam(combat35_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat35_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat35_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat35_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- Areas/Combat for 4000ms local combat40_Brush = createCombatObject() setCombatParam(combat40_Brush, COMBAT_PARAM_EFFECT, CONST_ME_GROUNDSHAKER) setCombatParam(combat40_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatArea(combat40_Brush,createCombatArea({{0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {1, 1, 1, 3, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0}})) function getDmg_Brush(cid, level, maglevel) return (500)*-1,(1000)*-1 end setCombatCallback(combat40_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_Brush") -- =============== CORE FUNCTIONS =============== local function RunPart(c,cid,var,dirList,dirEmitPos) -- Part if (isCreature(cid)) then doCombat(cid, c, var) if (dirList ~= nil) then -- Emit distance effects local i = 2; while (i < #dirList) do doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList,y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1]) i = i + 2 end end end end function onCastSpell(cid, var) local startPos = getCreaturePosition(cid) addEvent(RunPart,6000,combat60_Brush,cid,var) addEvent(RunPart,5500,combat55_Brush,cid,var) addEvent(RunPart,5000,combat50_Brush,cid,var) addEvent(RunPart,4500,combat45_Brush,cid,var) RunPart(combat0_Brush,cid,var) addEvent(RunPart,500,combat5_Brush,cid,var) addEvent(RunPart,1000,combat10_Brush,cid,var) addEvent(RunPart,1500,combat15_Brush,cid,var) addEvent(RunPart,2000,combat20_Brush,cid,var) addEvent(RunPart,2500,combat25_Brush,cid,var) addEvent(RunPart,3000,combat30_Brush,cid,var) addEvent(RunPart,3500,combat35_Brush,cid,var) addEvent(RunPart,4000,combat40_Brush,cid,var) return true end Se alguém quiser simplificar eu aceito também uheueh 6º - Volatile spider Bom, o xWhiteWolf fez uma magia muito maneira a volatile spiderling onde o jogador invoca uma aranha e ela explode quando toca o oponente. Bom, eu tentei modificar aqui mas não consegui. Queria que alguém me ajudasse a modificar a magia da aranha. Preciso de 2 magias: A primeira seria um tipo de exeta res, onde a aranha ficaria mandando uma magia de área (uma exeta res) por 10 segundos (ou até que ela morra). Para que os monstros ataquem a aranha e não o player. A segunda seria uma magia de paralyze, onde a aranha mandaria uma magia sem nenhum dano em uma área 1x1: {1, 1, 1}, {1, 3, 1}, {1, 1, 1} E os jogadores que forem atingidos por essa magia serão tomarão condition de paralyze. E depois de mandar a magia a aranha morre. Bom, não sei se isso é possível, mas eu tive essas ideias só que não sei fazer os scripts. Espero que alguém me ajude, se eu tiver mais ideias eu posto aqui. Bjs :* Editado Setembro 21, 2015 9 anos por NathanAmaro (veja o histórico de edições) Oi
Postado Setembro 19, 2015 9 anos Autor @up Editado Setembro 19, 2015 9 anos por NathanAmaro (veja o histórico de edições) Oi
Postado Setembro 19, 2015 9 anos Bom, consegui o Guild Master.. data/npcs crie um arquivo.xml renomei para "Guild Master" e coloque isso dentro: <?xml version="1.0"?> <npc name="Guild Master" script="data/npc/scripts/guild.lua" access="3" lookdir="1"> <health now="1" max="1"/> <look type="163" head="20" body="30" legs="40" feet="50" corpse="3128"/> </npc> script: "Guild.lua" local focus = 0 local talk_start = 0 local target = 0 local following = false local attacking = false local talk_state = 0 local gstat = 0 -- guild status local grank = '' -- guild rank local gname = '' -- guild name local cname = '' -- name of player who talks to us local pname = '' -- name of some other player local maxnamelen = 30 local maxranklen = 20 local maxnicklen = 20 local leaderlevel = 50 local NONE = 0 local INVITED = 1 local MEMBER = 2 local VICE = 3 local LEADER = 4 local allow_pattern = '^[a-zA-Z0-9 -]+$' function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Good bye then.') focus = 0 talk_start = 0 end end function onCreatureTurn(creature) 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) cname = creatureGetName(cid) if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then selfSay('Hello ' .. cname .. '! How can I help you?') talk_state = 0 focus = cid talk_start = os.clock() elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then selfSay('Sorry, ' .. cname .. '! I talk to you in a minute.') elseif msgcontains(msg, 'bye') and (focus == cid) and getDistanceToCreature(cid) < 4 then selfSay('Good bye, ' .. cname .. '!') talk_state = 0 focus = 0 talk_start = 0 elseif focus == cid then if talk_state == 0 then msg = string.lower(msg) if msgcontains(msg, 'found') then -- found a new guild level = getPlayerLevel(cid) if level >= leaderlevel then gstat = getPlayerGuildStatus(cname) if gstat == NONE or gstat == INVITED then selfSay('What name your guild should have?') talk_state = 1 elseif gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, you are member of a guild.') talk_state = 0 end else selfSay('Sorry, you need level ' .. leaderlevel .. ' to found a guild.') end talk_start = os.clock() elseif msgcontains(msg, 'join') then -- join a guild when invited gstat = getPlayerGuildStatus(cname) if gstat == NONE then selfSay('Sorry, you are not invited to any guild.') talk_state = 0 elseif gstat == INVITED then gname = getPlayerGuildName(cname) selfSay('Do you want to join ' .. gname .. '?') talk_state = 3 elseif gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, you are a member of a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'exclude') or msgcontains(msg, 'kick') then -- kick player from a guild gstat = getPlayerGuildStatus(cname) if gstat == VICE or gstat == LEADER then selfSay('Who do you want to kick today?') talk_state = 4 else selfSay('Sorry, only leader and vice-leaders can kick players from a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'invite') then -- invite player to a guild gstat = getPlayerGuildStatus(cname) if gstat == VICE or gstat == LEADER then selfSay('Who do you want to invite to your guild?') talk_state = 5 else selfSay('Sorry, only leader and vice-leaders can invite players to a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'leave') then -- leave a guild gstat = getPlayerGuildStatus(cname) if gstat == NONE or gstat == INVITED then selfSay('You are not in a guild.') talk_state = 0 elseif gstat == MEMBER or gstat == VICE then gname = getPlayerGuildName(cname) selfSay('Do you want to leave ' .. gname .. '?') talk_state = 7 elseif gstat == LEADER then selfSay('You are a leader of a guild. If you leave, no one can invite new players. Are you sure?') talk_state = 7 end elseif msgcontains(msg, 'pass') then -- pass leadership gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Who do you want to be a new leader?') talk_state = 8 else selfSay('Sorry, only leader can resign from his position.') talk_state = 0 end elseif msgcontains(msg, 'vice') then -- set vice leader gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Which member do you want to promote to vice-leader?') talk_state = 9 else selfSay('Sorry, only leader can promote member to vice-leader.') talk_state = 0 end elseif msgcontains(msg, 'member') then -- remove vice-leader gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Which vice-leader do you want to demote to regular member?') talk_state = 10 else selfSay('Sorry, only leader can demote vice-leaders to members.') talk_state = 0 end elseif msgcontains(msg, 'nick') or msgcontains(msg, 'title') then -- set nick gstat = getPlayerGuildStatus(cname); if gstat == LEADER then selfSay('Whom player do you want to change nick?') talk_state = 11 else selfSay('Sorry, only leader can change nicks.') talk_state = 0 end end else -- talk_state != 0 talk_start = os.clock() if talk_state == 1 then -- get name of new guild gname = msg if string.len(gname) <= maxnamelen then if string.find(gname, allow_pattern) then if foundNewGuild(gname) == 0 then selfSay('Sorry, there is already a guild with that name.') talk_state = 0 else selfSay('And what rank do you wish to have?') talk_state = 2 end else selfSay('Sorry, guild name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, guild name cannot be longer than ' .. maxnamelen .. ' characters.') talk_state = 0 end elseif talk_state == 2 then -- get rank of leader grank = msg if string.len(grank) <= maxranklen then if string.find(grank, allow_pattern) then setPlayerGuild(cname,LEADER,grank,gname) selfSay('You are now leader of your new guild.') talk_state = 0 else selfSay('Sorry, rank name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, rank name cannot be longer than ' .. maxranklen .. ' characters.') talk_state = 0 end elseif talk_state == 3 then -- join a guild if msg == 'yes' then setPlayerGuildStatus(cname, MEMBER) selfSay('You are now member of a guild.') talk_state = 0 else selfSay('What else can I do for you?') talk_state = 0 end elseif talk_state == 4 then -- kick player pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To kick yourself say leave.') talk_state = 0 elseif gname == gname2 then gstat2 = getPlayerGuildStatus(pname) if gstat > gstat2 then clearPlayerGuild(pname) selfSay('You kicked ' .. pname .. ' from your guild.') talk_state = 0 else selfSay('Sorry, vice-leaders can kick only regular members.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 5 then -- get invited name pname = msg gstat = getPlayerGuildStatus(pname) if gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, ' .. pname .. ' is in another guild.') talk_state = 0 else selfSay('And what rank do you wish to give him/her?') talk_state = 6 end elseif talk_state == 6 then -- get invited rank grank = msg if string.len(grank) <= maxranklen then if string.find(grank, allow_pattern) then gname = getPlayerGuildName(cname) setPlayerGuild(pname, INVITED, grank, gname) selfSay('You have invited ' .. pname .. ' to your guild.') talk_state = 0 else selfSay('Sorry, rank name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, rank name cannot be longer than ' .. maxranklen .. ' characters.') talk_state = 0 end elseif talk_state == 7 then -- leave a guild if msg == 'yes' then clearPlayerGuild(cname) selfSay('You have left your guild.') talk_state = 0 else selfSay('What else can I do for you?') talk_state = 0 end elseif talk_state == 8 then -- pass leadership pname = msg level = getPlayerLevel(pname) if level >= leaderlevel then gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if gname == gname2 then setPlayerGuildStatus(cname,MEMBER) setPlayerGuildStatus(pname,LEADER) gname = getPlayerGuildName(cname) selfSay(pname .. ' is a new leader of ' .. gname .. '.') talk_state = 0 else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0; end else selfSay('Sorry, ' .. pname .. ' is not online.') talk_state = 0 end elseif talk_state == 9 then -- set vice-leader pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To resign from leadership say pass.') talk_state = 0 elseif gname == gname2 then gstat = getPlayerGuildStatus(pname) if gstat == INVITED then selfSay('Sorry, ' .. pname .. ' hasn\'t joined your guild yet.'); talk_state = 0 elseif gstat == VICE then selfSay(pname .. ' is already a vice-leader.') talk_state = 0 elseif gstat == MEMBER then setPlayerGuildStatus(pname, VICE) selfSay(pname .. ' is now a vice-leader of your guild.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 10 then -- set member pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To resign from leadership say pass.') talk_state = 0 elseif gname == gname2 then gstat = getPlayerGuildStatus(pname) if gstat == INVITED then selfSay('Sorry, ' .. pname .. ' hasn\'t joined your guild yet.'); talk_state = 0 elseif gstat == VICE then setPlayerGuildStatus(pname, MEMBER) selfSay(pname .. ' is now a regular member of your guild.') talk_state = 0 elseif gstat == MEMBER then selfSay(pname .. ' is already a regular member.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 11 then -- get name of player to change nick pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if gname == gname2 then selfSay('And what nick do you want him to have (say none to clear)?') talk_state = 12 else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 12 then -- get nick if msg == 'none' then setPlayerGuildNick(pname, '') selfSay(pname .. ' now has no nick.') talk_state = 0 else if string.len(msg) <= maxnicklen then if string.find(msg, allow_pattern) then setPlayerGuildNick(pname, msg) selfSay('You have changed ' .. pname .. '\'s nick.') talk_state = 0 else selfSay('Sorry, nick contains illegal characters.') talk_state = 0 end else selfSay('Sorry, nick cannot be longer than ' .. maxnicklen .. ' characters.') talk_state = 0 end end end end end end function onCreatureChangeOutfit(creature) end function onThink() doNpcSetCreatureFocus(focus) if (os.clock() - talk_start) > 45 then if focus > 0 then selfSay('Next Please...') end focus = 0 end if focus ~= 0 then if getDistanceToCreature(focus) > 5 then selfSay('Good bye then.') focus = 0 end end end Aqui funcionou normal... Teste ai.. Quantos aos outros, mais tarde volto aqui Editado Setembro 19, 2015 9 anos por Deadpool (veja o histórico de edições) Se te ajudei, deixe seu curti, clique em melhor resposta, para que eu possa ajudar sempre. Trabalhos (C++): Cor das mensagens nos channels Ajusta/Mudar cor das mensagens de Loot Liberação dos novos Remakes da PokeXGames. NPC "Guild Master" que cria, deleta, invita, kicka players da guild. At Soon, LIKE ON FACEBOOK. Clik on Imgs
Postado Setembro 19, 2015 9 anos Autor Bom, consegui o Guild Master.. data/npcs crie um arquivo.xml renomei para "Guild Master" e coloque isso dentro: <?xml version="1.0"?> <npc name="Guild Master" script="data/npc/scripts/guild.lua" access="3" lookdir="1"> <health now="1" max="1"/> <look type="163" head="20" body="30" legs="40" feet="50" corpse="3128"/> </npc> script: "Guild.lua" local focus = 0 local talk_start = 0 local target = 0 local following = false local attacking = false local talk_state = 0 local gstat = 0 -- guild status local grank = '' -- guild rank local gname = '' -- guild name local cname = '' -- name of player who talks to us local pname = '' -- name of some other player local maxnamelen = 30 local maxranklen = 20 local maxnicklen = 20 local leaderlevel = 50 local NONE = 0 local INVITED = 1 local MEMBER = 2 local VICE = 3 local LEADER = 4 local allow_pattern = '^[a-zA-Z0-9 -]+$' function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Good bye then.') focus = 0 talk_start = 0 end end function onCreatureTurn(creature) 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) cname = creatureGetName(cid) if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then selfSay('Hello ' .. cname .. '! How can I help you?') talk_state = 0 focus = cid talk_start = os.clock() elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then selfSay('Sorry, ' .. cname .. '! I talk to you in a minute.') elseif msgcontains(msg, 'bye') and (focus == cid) and getDistanceToCreature(cid) < 4 then selfSay('Good bye, ' .. cname .. '!') talk_state = 0 focus = 0 talk_start = 0 elseif focus == cid then if talk_state == 0 then msg = string.lower(msg) if msgcontains(msg, 'found') then -- found a new guild level = getPlayerLevel(cid) if level >= leaderlevel then gstat = getPlayerGuildStatus(cname) if gstat == NONE or gstat == INVITED then selfSay('What name your guild should have?') talk_state = 1 elseif gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, you are member of a guild.') talk_state = 0 end else selfSay('Sorry, you need level ' .. leaderlevel .. ' to found a guild.') end talk_start = os.clock() elseif msgcontains(msg, 'join') then -- join a guild when invited gstat = getPlayerGuildStatus(cname) if gstat == NONE then selfSay('Sorry, you are not invited to any guild.') talk_state = 0 elseif gstat == INVITED then gname = getPlayerGuildName(cname) selfSay('Do you want to join ' .. gname .. '?') talk_state = 3 elseif gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, you are a member of a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'exclude') or msgcontains(msg, 'kick') then -- kick player from a guild gstat = getPlayerGuildStatus(cname) if gstat == VICE or gstat == LEADER then selfSay('Who do you want to kick today?') talk_state = 4 else selfSay('Sorry, only leader and vice-leaders can kick players from a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'invite') then -- invite player to a guild gstat = getPlayerGuildStatus(cname) if gstat == VICE or gstat == LEADER then selfSay('Who do you want to invite to your guild?') talk_state = 5 else selfSay('Sorry, only leader and vice-leaders can invite players to a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'leave') then -- leave a guild gstat = getPlayerGuildStatus(cname) if gstat == NONE or gstat == INVITED then selfSay('You are not in a guild.') talk_state = 0 elseif gstat == MEMBER or gstat == VICE then gname = getPlayerGuildName(cname) selfSay('Do you want to leave ' .. gname .. '?') talk_state = 7 elseif gstat == LEADER then selfSay('You are a leader of a guild. If you leave, no one can invite new players. Are you sure?') talk_state = 7 end elseif msgcontains(msg, 'pass') then -- pass leadership gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Who do you want to be a new leader?') talk_state = 8 else selfSay('Sorry, only leader can resign from his position.') talk_state = 0 end elseif msgcontains(msg, 'vice') then -- set vice leader gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Which member do you want to promote to vice-leader?') talk_state = 9 else selfSay('Sorry, only leader can promote member to vice-leader.') talk_state = 0 end elseif msgcontains(msg, 'member') then -- remove vice-leader gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Which vice-leader do you want to demote to regular member?') talk_state = 10 else selfSay('Sorry, only leader can demote vice-leaders to members.') talk_state = 0 end elseif msgcontains(msg, 'nick') or msgcontains(msg, 'title') then -- set nick gstat = getPlayerGuildStatus(cname); if gstat == LEADER then selfSay('Whom player do you want to change nick?') talk_state = 11 else selfSay('Sorry, only leader can change nicks.') talk_state = 0 end end else -- talk_state != 0 talk_start = os.clock() if talk_state == 1 then -- get name of new guild gname = msg if string.len(gname) <= maxnamelen then if string.find(gname, allow_pattern) then if foundNewGuild(gname) == 0 then selfSay('Sorry, there is already a guild with that name.') talk_state = 0 else selfSay('And what rank do you wish to have?') talk_state = 2 end else selfSay('Sorry, guild name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, guild name cannot be longer than ' .. maxnamelen .. ' characters.') talk_state = 0 end elseif talk_state == 2 then -- get rank of leader grank = msg if string.len(grank) <= maxranklen then if string.find(grank, allow_pattern) then setPlayerGuild(cname,LEADER,grank,gname) selfSay('You are now leader of your new guild.') talk_state = 0 else selfSay('Sorry, rank name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, rank name cannot be longer than ' .. maxranklen .. ' characters.') talk_state = 0 end elseif talk_state == 3 then -- join a guild if msg == 'yes' then setPlayerGuildStatus(cname, MEMBER) selfSay('You are now member of a guild.') talk_state = 0 else selfSay('What else can I do for you?') talk_state = 0 end elseif talk_state == 4 then -- kick player pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To kick yourself say leave.') talk_state = 0 elseif gname == gname2 then gstat2 = getPlayerGuildStatus(pname) if gstat > gstat2 then clearPlayerGuild(pname) selfSay('You kicked ' .. pname .. ' from your guild.') talk_state = 0 else selfSay('Sorry, vice-leaders can kick only regular members.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 5 then -- get invited name pname = msg gstat = getPlayerGuildStatus(pname) if gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, ' .. pname .. ' is in another guild.') talk_state = 0 else selfSay('And what rank do you wish to give him/her?') talk_state = 6 end elseif talk_state == 6 then -- get invited rank grank = msg if string.len(grank) <= maxranklen then if string.find(grank, allow_pattern) then gname = getPlayerGuildName(cname) setPlayerGuild(pname, INVITED, grank, gname) selfSay('You have invited ' .. pname .. ' to your guild.') talk_state = 0 else selfSay('Sorry, rank name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, rank name cannot be longer than ' .. maxranklen .. ' characters.') talk_state = 0 end elseif talk_state == 7 then -- leave a guild if msg == 'yes' then clearPlayerGuild(cname) selfSay('You have left your guild.') talk_state = 0 else selfSay('What else can I do for you?') talk_state = 0 end elseif talk_state == 8 then -- pass leadership pname = msg level = getPlayerLevel(pname) if level >= leaderlevel then gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if gname == gname2 then setPlayerGuildStatus(cname,MEMBER) setPlayerGuildStatus(pname,LEADER) gname = getPlayerGuildName(cname) selfSay(pname .. ' is a new leader of ' .. gname .. '.') talk_state = 0 else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0; end else selfSay('Sorry, ' .. pname .. ' is not online.') talk_state = 0 end elseif talk_state == 9 then -- set vice-leader pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To resign from leadership say pass.') talk_state = 0 elseif gname == gname2 then gstat = getPlayerGuildStatus(pname) if gstat == INVITED then selfSay('Sorry, ' .. pname .. ' hasn\'t joined your guild yet.'); talk_state = 0 elseif gstat == VICE then selfSay(pname .. ' is already a vice-leader.') talk_state = 0 elseif gstat == MEMBER then setPlayerGuildStatus(pname, VICE) selfSay(pname .. ' is now a vice-leader of your guild.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 10 then -- set member pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To resign from leadership say pass.') talk_state = 0 elseif gname == gname2 then gstat = getPlayerGuildStatus(pname) if gstat == INVITED then selfSay('Sorry, ' .. pname .. ' hasn\'t joined your guild yet.'); talk_state = 0 elseif gstat == VICE then setPlayerGuildStatus(pname, MEMBER) selfSay(pname .. ' is now a regular member of your guild.') talk_state = 0 elseif gstat == MEMBER then selfSay(pname .. ' is already a regular member.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 11 then -- get name of player to change nick pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if gname == gname2 then selfSay('And what nick do you want him to have (say none to clear)?') talk_state = 12 else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 12 then -- get nick if msg == 'none' then setPlayerGuildNick(pname, '') selfSay(pname .. ' now has no nick.') talk_state = 0 else if string.len(msg) <= maxnicklen then if string.find(msg, allow_pattern) then setPlayerGuildNick(pname, msg) selfSay('You have changed ' .. pname .. '\'s nick.') talk_state = 0 else selfSay('Sorry, nick contains illegal characters.') talk_state = 0 end else selfSay('Sorry, nick cannot be longer than ' .. maxnicklen .. ' characters.') talk_state = 0 end end end end end end function onCreatureChangeOutfit(creature) end function onThink() doNpcSetCreatureFocus(focus) if (os.clock() - talk_start) > 45 then if focus > 0 then selfSay('Next Please...') end focus = 0 end if focus ~= 0 then if getDistanceToCreature(focus) > 5 then selfSay('Good bye then.') focus = 0 end end end Aqui funcionou normal... Teste ai.. Quantos aos outros, mais tarde volto aqui Então cara, ele não tá reconhecendo a função gstat = getPlayerGuildStatus(cname) Oi
Postado Setembro 19, 2015 9 anos Qual a versão do seu TFS? Troca por este: local focus = 0 local talk_start = 0 local target = 0 local following = false local attacking = false local talk_state = 0 local gstat = 0 -- guild status local grank = '' -- guild rank local gname = '' -- guild name local cname = '' -- name of player who talks to us local pname = '' -- name of some other player local maxnamelen = 30 local maxranklen = 20 local maxnicklen = 20 local leaderlevel = 50 local NONE = 0 local INVITED = 1 local MEMBER = 2 local VICE = 3 local LEADER = 4 local allow_pattern = '^[a-zA-Z0-9 -]+$' function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Good bye then.') focus = 0 talk_start = 0 end end function onCreatureTurn(creature) 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) cname = getCreatureName(cid) if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then selfSay('Hello ' .. cname .. '! How can I help you?') talk_state = 0 focus = cid talk_start = os.clock() elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then selfSay('Sorry, ' .. cname .. '! I talk to you in a minute.') elseif msgcontains(msg, 'bye') and (focus == cid) and getDistanceToCreature(cid) < 4 then selfSay('Good bye, ' .. cname .. '!') talk_state = 0 focus = 0 talk_start = 0 elseif focus == cid then if talk_state == 0 then msg = string.lower(msg) if msgcontains(msg, 'found') then -- found a new guild level = getPlayerLevel(cid) if level >= leaderlevel then gstat = getPlayerGuildStatus(cname) if gstat == NONE or gstat == INVITED then selfSay('What name your guild should have?') talk_state = 1 elseif gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, you are member of a guild.') talk_state = 0 end else selfSay('Sorry, you need level ' .. leaderlevel .. ' to found a guild.') end talk_start = os.clock() elseif msgcontains(msg, 'join') then -- join a guild when invited gstat = getPlayerGuildStatus(cname) if gstat == NONE then selfSay('Sorry, you are not invited to any guild.') talk_state = 0 elseif gstat == INVITED then gname = getPlayerGuildName(cname) selfSay('Do you want to join ' .. gname .. '?') talk_state = 3 elseif gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, you are a member of a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'exclude') or msgcontains(msg, 'kick') then -- kick player from a guild gstat = getPlayerGuildStatus(cname) if gstat == VICE or gstat == LEADER then selfSay('Who do you want to kick today?') talk_state = 4 else selfSay('Sorry, only leader and vice-leaders can kick players from a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'invite') then -- invite player to a guild gstat = getPlayerGuildStatus(cname) if gstat == VICE or gstat == LEADER then selfSay('Who do you want to invite to your guild?') talk_state = 5 else selfSay('Sorry, only leader and vice-leaders can invite players to a guild.') talk_state = 0 end talk_start = os.clock() elseif msgcontains(msg, 'leave') then -- leave a guild gstat = getPlayerGuildStatus(cname) if gstat == NONE or gstat == INVITED then selfSay('You are not in a guild.') talk_state = 0 elseif gstat == MEMBER or gstat == VICE then gname = getPlayerGuildName(cname) selfSay('Do you want to leave ' .. gname .. '?') talk_state = 7 elseif gstat == LEADER then selfSay('You are a leader of a guild. If you leave, no one can invite new players. Are you sure?') talk_state = 7 end elseif msgcontains(msg, 'pass') then -- pass leadership gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Who do you want to be a new leader?') talk_state = 8 else selfSay('Sorry, only leader can resign from his position.') talk_state = 0 end elseif msgcontains(msg, 'vice') then -- set vice leader gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Which member do you want to promote to vice-leader?') talk_state = 9 else selfSay('Sorry, only leader can promote member to vice-leader.') talk_state = 0 end elseif msgcontains(msg, 'member') then -- remove vice-leader gstat = getPlayerGuildStatus(cname) if gstat == LEADER then selfSay('Which vice-leader do you want to demote to regular member?') talk_state = 10 else selfSay('Sorry, only leader can demote vice-leaders to members.') talk_state = 0 end elseif msgcontains(msg, 'nick') or msgcontains(msg, 'title') then -- set nick gstat = getPlayerGuildStatus(cname); if gstat == LEADER then selfSay('Whom player do you want to change nick?') talk_state = 11 else selfSay('Sorry, only leader can change nicks.') talk_state = 0 end end else -- talk_state != 0 talk_start = os.clock() if talk_state == 1 then -- get name of new guild gname = msg if string.len(gname) <= maxnamelen then if string.find(gname, allow_pattern) then if foundNewGuild(gname) == 0 then selfSay('Sorry, there is already a guild with that name.') talk_state = 0 else selfSay('And what rank do you wish to have?') talk_state = 2 end else selfSay('Sorry, guild name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, guild name cannot be longer than ' .. maxnamelen .. ' characters.') talk_state = 0 end elseif talk_state == 2 then -- get rank of leader grank = msg if string.len(grank) <= maxranklen then if string.find(grank, allow_pattern) then setPlayerGuild(cname,LEADER,grank,gname) selfSay('You are now leader of your new guild.') talk_state = 0 else selfSay('Sorry, rank name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, rank name cannot be longer than ' .. maxranklen .. ' characters.') talk_state = 0 end elseif talk_state == 3 then -- join a guild if msg == 'yes' then setPlayerGuildStatus(cname, MEMBER) selfSay('You are now member of a guild.') talk_state = 0 else selfSay('What else can I do for you?') talk_state = 0 end elseif talk_state == 4 then -- kick player pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To kick yourself say leave.') talk_state = 0 elseif gname == gname2 then gstat2 = getPlayerGuildStatus(pname) if gstat > gstat2 then clearPlayerGuild(pname) selfSay('You kicked ' .. pname .. ' from your guild.') talk_state = 0 else selfSay('Sorry, vice-leaders can kick only regular members.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 5 then -- get invited name pname = msg gstat = getPlayerGuildStatus(pname) if gstat == MEMBER or gstat == VICE or gstat == LEADER then selfSay('Sorry, ' .. pname .. ' is in another guild.') talk_state = 0 else selfSay('And what rank do you wish to give him/her?') talk_state = 6 end elseif talk_state == 6 then -- get invited rank grank = msg if string.len(grank) <= maxranklen then if string.find(grank, allow_pattern) then gname = getPlayerGuildName(cname) setPlayerGuild(pname, INVITED, grank, gname) selfSay('You have invited ' .. pname .. ' to your guild.') talk_state = 0 else selfSay('Sorry, rank name contains illegal characters.') talk_state = 0 end else selfSay('Sorry, rank name cannot be longer than ' .. maxranklen .. ' characters.') talk_state = 0 end elseif talk_state == 7 then -- leave a guild if msg == 'yes' then clearPlayerGuild(cname) selfSay('You have left your guild.') talk_state = 0 else selfSay('What else can I do for you?') talk_state = 0 end elseif talk_state == 8 then -- pass leadership pname = msg level = getPlayerLevel(pname) if level >= leaderlevel then gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if gname == gname2 then setPlayerGuildStatus(cname,MEMBER) setPlayerGuildStatus(pname,LEADER) gname = getPlayerGuildName(cname) selfSay(pname .. ' is a new leader of ' .. gname .. '.') talk_state = 0 else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0; end else selfSay('Sorry, ' .. pname .. ' is not online.') talk_state = 0 end elseif talk_state == 9 then -- set vice-leader pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To resign from leadership say pass.') talk_state = 0 elseif gname == gname2 then gstat = getPlayerGuildStatus(pname) if gstat == INVITED then selfSay('Sorry, ' .. pname .. ' hasn\'t joined your guild yet.'); talk_state = 0 elseif gstat == VICE then selfSay(pname .. ' is already a vice-leader.') talk_state = 0 elseif gstat == MEMBER then setPlayerGuildStatus(pname, VICE) selfSay(pname .. ' is now a vice-leader of your guild.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 10 then -- set member pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if cname == pname then selfSay('To resign from leadership say pass.') talk_state = 0 elseif gname == gname2 then gstat = getPlayerGuildStatus(pname) if gstat == INVITED then selfSay('Sorry, ' .. pname .. ' hasn\'t joined your guild yet.'); talk_state = 0 elseif gstat == VICE then setPlayerGuildStatus(pname, MEMBER) selfSay(pname .. ' is now a regular member of your guild.') talk_state = 0 elseif gstat == MEMBER then selfSay(pname .. ' is already a regular member.') talk_state = 0 end else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 11 then -- get name of player to change nick pname = msg gname = getPlayerGuildName(cname) gname2 = getPlayerGuildName(pname) if gname == gname2 then selfSay('And what nick do you want him to have (say none to clear)?') talk_state = 12 else selfSay('Sorry, ' .. pname .. ' is not in your guild.') talk_state = 0 end elseif talk_state == 12 then -- get nick if msg == 'none' then setPlayerGuildNick(pname, '') selfSay(pname .. ' now has no nick.') talk_state = 0 else if string.len(msg) <= maxnicklen then if string.find(msg, allow_pattern) then setPlayerGuildNick(pname, msg) selfSay('You have changed ' .. pname .. '\'s nick.') talk_state = 0 else selfSay('Sorry, nick contains illegal characters.') talk_state = 0 end else selfSay('Sorry, nick cannot be longer than ' .. maxnicklen .. ' characters.') talk_state = 0 end end end end end end function onCreatureChangeOutfit(creature) end function onThink() doNpcSetCreatureFocus(focus) if (os.clock() - talk_start) > 45 then if focus > 0 then selfSay('Next Please...') end focus = 0 end if focus ~= 0 then if getDistanceToCreature(focus) > 5 then selfSay('Good bye then.') focus = 0 end end end Se te ajudei, deixe seu curti, clique em melhor resposta, para que eu possa ajudar sempre. Trabalhos (C++): Cor das mensagens nos channels Ajusta/Mudar cor das mensagens de Loot Liberação dos novos Remakes da PokeXGames. NPC "Guild Master" que cria, deleta, invita, kicka players da guild. At Soon, LIKE ON FACEBOOK. Clik on Imgs
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.