No meu ot fiz um sistema de vip muito bacana e gostaria de esta passando para vocês. Meu ot é o YourOts 8.1, deve de funcionar em outros 8.0 pra cima.
Para fazer é preciso muita atenção, pois o tópico vai ser um pouco grande.
Bom vamos começar, vou explicar para que serve.
Fiz essa vip com intenção de deixar outros players com mais poderes do que os outros e acessar outras áreas que players sem vip não pode. Então ele não só vai poder acessar novas areas como também terá novos poderes. Nela vai ter, novas magias, novas vocações, vip coins (que no caso seria scarab coin só mudar o nome) e outras áreas. Então vamos por partes.
1° Vamos fazer um npc que vende a vip. Esse npc vai te pedir vip coins que iremos fazer na 2° parte.
Vá em data//npc e copia um arquivo qualquer dentro desta pasta, cole e renomeia como "The Vip". Abra o arquivo e dentro coloque isto:
<npc name="The Vip" script="data/npc/scripts/vip.lua" access="6" lookdir="2"><mana now="800" max="800"/>
<health now="200" max="200"/>
<look type="266" head="114" body="119" legs="132" feet="114"/>
</npc>
Pronto, agora vá em scripts, copie um arquivo qualquer dentro desta pasta, cole e renomeia para "vip". Abra o arquivo e dentro coloque isto:
local focus = 0 local talk_start = 0 local target = 0 local following = false local attacking = false 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) msg = string.lower(msg) if (msgcontains(msg, 'hi') and focus == 0) and getDistanceToCreature(cid) < 4 then selfSay('Ola ' .. creatureGetName(cid) .. '! Eu vendo vips. Para comprar vips me de 100 vip coins!!!') focus = cid talk_start = os.clock() elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then selfSay('Desculpe-me, ' .. creatureGetName(cid) .. '! Falo com voce em um minuto.') elseif msgcontains(msg, 'vip') then selfSay('Voce tem as 100 vip coins necessarias para adquirir a sua vip?') talk_state = 1 talk_start = os.clock() elseif getPlayerLevel(cid) < 1200 then selfSay('Desculpe, voce precisa de level 1200 para comprar vip.') talk_state = 0 elseif not isPremium(cid) then selfSay('Desculpe, voce nao eh premium para comprar vip.') talk_state = 0 elseif talk_state == 1 and msgcontains(msg, 'yes') then [color="#FF0000"]if getPlayerItemCount(cid,2159) == 100 then doPlayerRemoveItem(cid,2159,100)[/color] setPlayerStorageValue(cid, 13540, 1) selfSay('Parabens !!! Parabens voce Adiquiriu a sua vip.') talk_state = 0 talk_start = os.clock() else selfSay('Desculpe Você nao tem o necessario para adquirir vip.') talk_state = 0 talk_start = os.clock() end elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 5 then selfSay('Ate mais, ' .. creatureGetName(cid) .. '!') focus = 0 talk_start = 0 elseif msgcontains(msg, 'nao') and getDistanceToCreature(cid) < 5 then selfSay('Desculpe, ' .. creatureGetName(cid) .. '! Volte aqui quando tiver os itens nescessarios.') talk_start = os.clock() talk_state = 0 end end function onCreatureChangeOutfit(creature) end function onThink() doNpcSetCreatureFocus(focus) if (os.clock() - talk_start) > 30 then if focus > 0 then selfSay('Proximo...') end focus = 0 end if focus ~= 0 then if getDistanceToCreature(focus) > 5 then selfSay('Ate mais.') focus = 0 end end end
Está feito o seu npc de vip agora é só colocar no mapa.
2° Criando VIP Coins
Quando você da use em 100 moedas elas não se transformam em 1 moeda mais avançada?? Não?? Claro que sim
Exemplo: 100 Gold Coind deu use se transformou em 1 platinum coin.
É isso que nós vamos fazer pegar 100 crystal coin dar use para se transformar em 1 vip coin, pode ser outro item em vez de crystal coin mas ai vai do seu gosto.
Primeiro vai em data//actions//scripts copie qualquer arquivo dentro da pasta, cole e renomeia para "scarab". Abra-o e dentro coloque isto:
function onUse(cid, item, frompos, item2, topos)if doRemoveItem(item.uid,1) then
doPlayerSendTextMessage(cid,22,"You have changed 1 vip coin to 100 crystal coins")
doPlayerAddItem(cid,2160,100)
end
end
Ainda dentro desta pasta abra o arquivo "crystal" que modificaremos para isto:
function onUse(cid, item, frompos, item2, topos)if item.itemid == 2160 and item.type == 100 then
doRemoveItem(item.uid,item.type)
doPlayerAddItem(cid,2159,1)
doPlayerSendTextMessage(cid,22,"You have changed 100 crystal to 1 vip coin")
elseif item.itemid == 2160 and item.type < 100 then
doRemoveItem(item.uid,1)
doPlayerAddItem(cid,2152,100)
doPlayerSendTextMessage(cid,22,"You have changed 1 vip to 100 crystal coins")
end
end
Agora se você quiser colocar outro item em vez de scarab coin é só mudar os números que estão em vermelho não se esqueça de mudar também no npc.
Agora vai em data//actions e abra o arquivo actions.xml e dentro coloque isto:
<action itemid="2159" script="scarab.lua" />
Agora vá em data//items, abra o items.xml de crtl+F e escreva "scarab coin" mude o nome para vip coin.
NÃO SE ESQUEÇA DE TIRAR ESSAS MOEDAS DO BIXOS "ANCIENT SCARAB E SCARAB"
Pronto sua moeda está pronto para comprar vip.
3° Adicionando novas vocções para a vip
Nessa parte você vai add 4 novas vocações para sorcerer, druid, paladin e knight que é importante para ter novas magias e ser mais poderoso do que os outros.
Bom, primeiro vá em data e abra o arquivo vocations.xml nele voce vai adicionar isto:
Aqui só vou colocar as ultimas 4 vocações, apenas coloque em baixo da ultima vocação que é a do elite knight. Os nomes é você que escolhe eu coloquei magic antes de todos mas é porque num tive ideia =/.
<vocation id="9" name="Magic Master Sorcerer" description="a magic master sorcerer" gaincap="15" gainhp="30" gainmana="90" gainhpticks="4" gainhpamount="600" gainmanaticks="2" gainmanaamount="1200" gainsoulticks="15" gainsoulamount="1" maxsoul="200" manamultiplier="1.2" attackspeed="300" prevoc="1" basespeed="220"> <diepercent experience="4" magic="4" skill="4" equipment="7" container="100"/> <formula damage="1.2" defense="1.1" armor="1.1"/> <skill id="0" multiplier="1.5"/> <skill id="1" multiplier="2.0"/> <skill id="2" multiplier="2.0"/> <skill id="3" multiplier="2.0"/> <skill id="4" multiplier="2.0"/> <skill id="5" multiplier="1.5"/> <skill id="6" multiplier="1.1"/> </vocation> <vocation id="10" name="Magic Elder Druid" description="an magic elder druid" gaincap="15" gainhp="30" gainmana="90" gainhpticks="4" gainhpamount="600" gainmanaticks="2" gainmanaamount="1200" gainsoulticks="15" gainsoulamount="1" maxsoul="200" manamultiplier="1.2" attackspeed="300" prevoc="2" basespeed="220"> <diepercent experience="4" magic="4" skill="4" equipment="7" container="100"/> <formula damage="1.2" defense="1.1" armor="1.1"/> <skill id="0" multiplier="1.5"/> <skill id="1" multiplier="1.8"/> <skill id="2" multiplier="1.8"/> <skill id="3" multiplier="1.8"/> <skill id="4" multiplier="1.8"/> <skill id="5" multiplier="1.5"/> <skill id="6" multiplier="1.1"/> </vocation> <vocation id="11" name="Magic Royal Paladin" description="a magic royal paladin" gaincap="60" gainhp="45" gainmana="60" gainhpticks="3" gainhpamount="800" gainmanaticks="2" gainmanaamount="1000" gainsoulticks="15" gainsoulamount="1" maxsoul="200" manamultiplier="2.0" attackspeed="300" prevoc="3" basespeed="220"> <diepercent experience="4" magic="4" skill="4" equipment="7" container="100"/> <formula damage="1.2" defense="1.1" armor="1.1"/> <skill id="0" multiplier="1.2"/> <skill id="1" multiplier="1.2"/> <skill id="2" multiplier="1.2"/> <skill id="3" multiplier="1.2"/> <skill id="4" multiplier="1.1"/> <skill id="5" multiplier="1.1"/> <skill id="6" multiplier="1.1"/> </vocation> <vocation id="12" name="Magic Elite Knight" description="an magic elite knight" gaincap="90" gainhp="30" gainmana="10" gainhpticks="2" gainhpamount="1200" gainmanaticks="4" gainmanaamount="600" gainsoulticks="15" gainsoulamount="1" manamultiplier="4.9" attackspeed="300" prevoc="4" basespeed="220"> <diepercent experience="4" magic="4" skill="4" equipment="7" container="100"/> <formula damage="1.2" defense="1.1" armor="1.1"/> <skill id="0" multiplier="1.1"/> <skill id="1" multiplier="1.1"/> <skill id="2" multiplier="1.1"/> <skill id="3" multiplier="1.1"/> <skill id="4" multiplier="1.4"/> <skill id="5" multiplier="1.1"/> <skill id="6" multiplier="1.1"/> </vocation> </vocations>
AVISO!! SE TIVER OUTRAS VOCAÇÕES COM A VOCATION ID MAIOR QUE 8 - exemplo: vocation id="9"... SUBSTITUA POR ESTAS AI DE CIMA.
4° colocando as vocações para acessar as magias
A intenção de criar essas novas vocações é de elas poderem soltar magias que as outras não podem, então obrigatóriamente você terá que criar novas magia para elas nem que seja 1.
Primeiro vou adicionar aqui as magias comuns que todos usam para eles tabém poderem usar.
Vá em data//spells e susbstitua o arquivo existente por este:
http://rapidshare.com/files/167995665/spells.xml.html
AVISO!! SE VOCÊ TIVER OUTRAS MAGIAS NOVAS FAÇA UM BACKUP DELAS PARA DEPOIS PODER ADD DE VOLTA.
Agora as magias novas que vocês criarem vocês adicona as vocações. Por exemplo: Quero adicionar "Exori Grup" -.^ para o Magic Sorcerer. Vá em spells.xml e abra-o, entao você adiciona isto:
<instant name="Super Energy" words="exori grup" direction="1" lvl="12" maglv="3" mana="20" soul="0" exhaustion="1" prem="1" enabled="1" script="super energy.lua><vocation id="9"/></instant>
Onde está em azul e o id que você vai adicionar de acordo com a vocação que você escolher entre 9, 10, 11 e 12.
5° Fazendo o npc que da o Magic Promotion
Agora é preciso criar um npc que da esse promotion.
Vá em data//npc copie um arquivo qualquer desta pasta e renomeie para "Promotion Magic" agora abra-o, pague tudo e adicione isto:
<?xml version="1.0"?>
<npc name="Promotion Magic" script="data/npc/scripts/pmagic.lua" access="3" lookdir="2">
<mana now="800" max="800"/>
<health now="200" max="200"/>
<look type="133" head="114" body="94" legs="86" feet="114"/>
</npc>
Feche e salve. Agora vá em data//npc//scripts, copie qualquer arquivo desta pasta, abra-o, renomeie para "color="#000000"]pmagic[/color]", apague tudo que tem dentro e adicione isto:
local focus = 0 local talk_start = 0 local target = 0 local days = 0 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) msg = string.lower(msg) if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 2 then selfSay('Hello ' .. creatureGetName(cid) .. '! Eu vendo premiums e promotion magic. AVISO: Nao pessa mais de um PROMOTION MAGIC ou seu char ficara extremamente lento.') focus = cid talk_start = os.clock() elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 2 then selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.') elseif focus == cid then talk_start = os.clock() if msgcontains(msg, 'promotion magic') or msgcontains(msg, 'promotions magic') then [color="#FFFF00"]if getPlayerLevel(cid) < 1200 then[/color] selfSay('Desculpe, voce precisa de level 1200 para comprar promotion magic.') talk_state = 0 elseif not isPremium(cid) then selfSay('Desculpe, voce nao tem premium para comprar promotion magic.') talk_state = 0 else selfSay('Voce quer comprar promotion magic por 2kk?') talk_state = 1 end elseif msgcontains(msg, 'premium') or msgcontains(msg, 'premmy') then selfSay('Do you want to buy 7 days of premium for 7k?') talk_state = 2 elseif talk_state == 1 then if msgcontains(msg, 'yes') then if pay(cid,2000000) then doPlayerSetVocation(cid, getPlayerVocation(cid)+4) selfSay('You are now promoted!') else selfSay('Desculpe, Voce nao tem dinheiro suficiente.') end end talk_state = 0 elseif talk_state == 2 then if msgcontains(msg, 'yes') then if pay(cid,7000) then selfSay('/premium '.. creatureGetName(cid) ..', 7') selfSay('You have 7 days of premium more!') else selfSay('Desculpe, Voce nao tem dinheiro suficiente.') end end talk_state = 0 elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then selfSay('Good bye, ' .. creatureGetName(cid) .. '!') focus = 0 talk_start = 0 end end end function onCreatureChangeOutfit(creature) end function onThink() doNpcSetCreatureFocus(focus) if (os.clock() - talk_start) > 30 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
AVISO!! NÃO CONSEGUI FAZER O NPC DAR APENAS UMA VEZ A VOCAÇÃO ENTÃO O NPC JA AVISA QUE NÃO PODE PEDIR MAIS DE UMA VEZ. SE ALGUÉM SOUBER COMO NÃO DEIXAR ELE DAR MAIS DE UMA VOCAÇÃO POR FAVOR AJUDEM . Em amarelo é o level que você deseja mudar eu deixei 1200.
6° Ultima. Colocando as areas vip.
Essa é a parte mais importante do tópico e eu peguei de outro tópico, seria mais facil eu colocar aqui o link do tópico para não ficar muito grande:
http://www.xtibia.com/forum/Colecao-Sistem...mmy-t80404.html
Agora o mais importante é você colocar essas areas quando você for add o npc que te da o promotion. Por exemplo: Coloque o npc antes dos pisos vip que ele for passar e crie uma casinha para ele dar exani hur "up" assim ele primeiro vai ter que comprar a vip antes de comprar a magic promotion e para ter segurança e tem que ser promotion dando exani hur "up".
Se vocês não entenderam sobre isso que acabei de explicar postarei uma foto para ficar um pouco melhor.
Espero que gostem qualquer duvida ou bug postem ae .
FLWWW