soth 0 Postado Março 28, 2012 Share Postado Março 28, 2012 Um pedido "simples", um npc normal de guild, que crie guilds, invite players e tudo mais, obrigado desde ja ! tfs 0.4 esse codigo nao funciona: 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() 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 Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados