Ir para conteúdo

Zorzin

Campones
  • Total de itens

    74
  • Registro em

  • Última visita

Tudo que Zorzin postou

  1. Gente.. Ao invés de ficar tentando baixar a 1.0 que tem alguns bugs, esperem que vai sair a 1.1, com os bugs corrigidos e em vários sites para baixar... Estou arrumando uns bugs que encontrei, acalmen-se! =) Logo logo sai ela, ai vocês vai conseguir baixar.. É melhor vocês esperarem sair a 1.1 e baixar do que ficar que nem doido querendo baixar a 1.0 =) Obrigado, Zorzin
  2. @Tucow Sim.. quando a versão 1.1 tiver pronta, vou colocar em vários Host, como Rapidshare, Megaupload, e outros... @aburame, O Bug da torch o Ta4e já arrumou... Isso aí que você falou, de não vender todos os addons, não é um bug... É que a versão do Script de Vendedor de Addons/Outfits está na 1.0 ainda, porque é muito complicado e muito cansativo fazer esse npc... Se você quiser dar uma olhada, vai em npc/scripts/addon.lua... Olha só quantas linhas tem no arquivo o0... Deve ter umas 600 por ai Com o passar do tempo, o Soulblaster que fez a primeira versão do Npc de Addons/Outfits vai editando e adicionando mais =) Obrigado, Zorzin
  3. @Gente, Versão 1.1 a caminho.. Com alguns bugs arrumados, e database.sql arrumado tambem Obrigado, Zorzin
  4. @All Vlw pelos comments! =) @nicholasfc você configura no data/vocations.xml =) Vou deixar outro link pra baixar o ot, pra quem ta com problemas na hora de baixar... @Pra quem ta com erro no MySQL gente, pra usar a versão SQL, vocês precisam criar uma database, ter algum programa Php, e editar os dados... Por isso, quem está com problemas no MySQL, baixe a versão XML! =) @Ta4e, eu ja coloquei isso ai no config.lua depois tira la do seu post =) Obrigado, Zorzin
  5. @All Vlws pelos comments! @Nostradamus, Bom, aqui eu testei umas 4 horas online, com uns 10 players on... Não pude deixar mais tempo porque to sem tempo e meu pc é ruim =/ Obrigado, Zorzin
  6. Oi galera! =) Venho aqui para postar uma versão de OTServer que eu estava fazendo. Com o tempo fui fazendo, e consegui terminar... É pra tibia 7.92. --- Zorzin OTServer 1.0 --- - Cores no console [Remere] - Premium System [Xidaozu] - Premium System funcionando em Sql [Zorzin] - Salvando o Premium Days (antes não salvava, ficava sempre no mesmo quando você comprava p.a) [Zorzin] - Private Chat Channel somente para premium accounts [Zorzin] - Quando a premium acaba, o player é teleportado para o templo free, o outfit é trocado pra free você recebe uma mensagem dizendo que a premium acabou (no config.lua você configura id do templo e a mensagem) [Zorzin] - "see_playersonline" no config.lua (No Console: "Player Name" logged in. XX Players online.) [Zorzin] - "see_rejectmsg" no config.lua (No Console: Reject player... Reason: xx) [Zorzin] - Quando é a sua primeira visita no server, aparece a janela de outfits [Zorzin] - You may not speak into channels as long as you are on level 1 (duas opções no config.lua: o level mínimo e a mensagem) [Zorzin] - Server Save [TLM] - 7.92 Support [Zorzin] - GM Look - Você vê Itemid, Actionid, Uid, (Hp e Mana -> somente se der look em players) e a Posição [Pedro B.] - Adicionado Subtype no GM Look (agora você vê o Subtype de um item quando der look -> somente se ele tiver) [Zorzin] - Comando /sendprivate msg (manda uma private message pra todos que estão online) [Zorzin] - Promotion System 100% [Zorzin] - Promotion System for SQL and XML [Zorzin] - Preço da Premium e da Promotion no config.lua [Zorzin] - LuaScripts: buyPromotion(cid), getPremiumPrice(), getPromotionPrice(), havePromotion(cid) [Zorzin] - Configurações de Hpticks, Manaticks, etc... pra promotions players no vocations.xml [Zorzin] - Fixed Soul System (antes a soul subia infinitamente, agora você configura no "soul_up_time" do vocations.xml) [Zorzin] - Adicionado configurações no Vocations.xml: soul_max, soul_amount, soul_ticks, soul_up_time (tem essas mesmas configurações para promotions também) [Zorzin] - NpcFunction: getCountNumber(msg) [soulblaster] - Salvando Food e Access pra XML e SQL [Zorzin] - Buy/Sell System 100% igual ao Tibia RL [Zorzin] - LuaScript "haveItem(cid, itemid, count, subtype, iscountable)" [Zorzin] - Configuração do máximo de items que podem ser comprados no config.lua [Zorzin] - Addons e Outfit System 100% igual ao Tibia RL [Zorzin] - LuaScript "doPlayerAddAddon(cid, outfitnumb, addon)" e "doPlayerAddExtraOutfit(cid, outfitnumb)" [Zorzin] - Tutor System (access: 1 tutor, 2 senior tutor, 3 gamemaster, 4 senior gamemaster, 5 god) [Zorzin] - Tutors e Senior Tutors falando em Laranja no Help-Channel [Zorzin] - Gamemasters, Senior Gamemasters e Gods falando em Vermelho no Help-Channel [Zorzin] - Opção no config.lua para mostrar o nome do access quandor der look em um player (Ex: You see Zorzin. He is a knight. He is a tutor.) [Zorzin] - Novos Chat Channels "GM's Chat" e "Tutor's Chat" [Zorzin] - Opção no config.lua do access do GM que pode mover items de longe [Zorzin] - Comando /access (dá access para um player) [Zorzin] - Opções no config.lua para deixar ou não os players trocarem de outfit (são 4 opções - para gms, tutors, players e a mensagem) [Zorzin] - Configurações: Speed Fórmula pra normal players e GM Speed no config.lua [Zorzin] - Configurração: Atacar players diretamente pelo Battle no config.lua [Zorzin] - Opção no config.lua para ativar ou desativar o Capacity System [Zorzin] - Red Login Msg quando você entra no server (no config.lua... Coloque "none" para desativar) [Zorzin] - Arrumados alguns textos em inglês, por exemplo: ("It weighs" trocado para "It weights" e muito mais) [Zorzin] - Opção no config.lua para ativar ou desativar o texto: It weights x oz. (quando você da look para um item) [Zorzin] - Opção no config.lua "can_attack_summons" [Zorzin] - Anti-AFK System (com 5 opções no config.lua = tempo, se turn funciona, mensagem, afk_for_gms e quando a mensagem vai ser mandada) [Zorzin] - Trade Delay (com duas opções no config.lua: o tempo, e a mensagem que vai aparecer) [Zorzin] - Opção no config.lua para editar a cor do Black Square (tem como colocar cores randômicas) [Zorzin] - Opção no config.lua para editar a cor da Exp (tem como colocar cores randômicas) [Zorzin] - Novo sistema de trocar um itemid pra outro itemid pelo config.lua na hora de dar Loading Map!!! (são infinitas opções!! confira as instruções de como usar) [Zorzin] - Adicionado pra trocar os IDS das janelas antigas para as janelas novas quando estiver dando loading Map (no config.lua) [Zorzin] - Sistema de Regras do OTServer (no arquivo data/rules.xml você escreve as regras/OBS: não é permitido acentos) [Zorzin] - Opção no config.lua para mostrar as regras quando for o primeiro login do player [Zorzin] - Comando !rules para ver as regras [Zorzin] - Items somem quando são mandados pra água/swamp/lava/petróleo e aparece um efeito [Zorzin] - Água/Lava/Swamp/Montanha/Rocks/Grass/Underwater Randomizer (com 9 opções no config.lua!! dá pra você configurar se quer randomizar ou não e a porcentagem de cada um) [Zorzin] - Janelinha do "You are dead." quando o char morrer (eu apenas arrumei e coloquei pra funcionar.. agora não ta dando debugs) [Zorzin] - Spells Somente para Premium Accounts (com opção no config.lua para a mensagem que irá aparecer caso o player tentar usar e não tiver premium) [Zorzin] - Spells Somente para Promoted (com opção no config.lua para a mensagem que irá aparecer caso o player tentar usar e não tiver promotion) [Zorzin] - Amulet of loss [Talaturen] - Fixed um bug no Amulet of Loss (antes as vezes caia o AOL + o helmet do player, agora tá normal) [Zorzin] - Nova Bag quando o player morre [K-Zodron] - Configuração do ID da bag/backpack no config.lua que irá aparecer quando o player morrer e logar novamente [Zorzin] - No config.lua você pode configurar os Loss quando um player morrer (em porcentagem - "item_loss", "exp_loss", "magiclevel_loss", "skills_loss", "backpack_loss") [Zorzin] - Bless System [Zorzin] - Configuração das bless no config.lua (as loss, porcentagem,..) [Zorzin] - LuaScript: "getPlayerBlessing(cid,blessnumber)" e "doAddPlayerBlessing(cid,blessnumber)" [Zorzin] - Adicionado um npc que vende as blessings [Zorzin] - AtkSpeed pra free accounts e AtkSpeed para promoted no vocations.xml [Zorzin] - Comandos "/up" e "/down" (agora você pode usar "/up numero" e "/down numero" ou então somente "/up" e "/down") [Zorzin] - Comandos "/randomoutfit" e "/gmoutfit" [Zorzin] - Configuração "rate_enforced_exp" para quando matar um player em PVP-Enforced [Zorzin] - Quando um player entrar no server sempre estará olhando para o Sul (igual ao tibia RL) [Zorzin] - Stamina System (com 2 opções no config.lua: o tempo de Stamina que irá perder quando matar um monstro e quanto de stamina ganhar a cada 1 segundo que o player tiver logout) [Zorzin] - LuaScript "getPlayerStamina(cid)" (em segundos) [Zorzin] - Quando a sua Stamina tá menor que 14 horas, o player só ganha metade da Exp dos monstros [Zorzin] - Comando "/pvp worldtype" (troca o tipo do server) [Zorzin] - New Condition: CONDITION_DROWNING e New Combat: COMBAT_DROWNING (igual ao tibia rl) [Zorzin] - Novo "absorbPercentDrowning" para o items.xml [Zorzin] - Quando você pega Poison/Drowning, aparece a mensagem: "You are poisoned."/"You are drowning." [Zorzin] - LuaScript "doPlayerSendIcon(cid, iconName, sendmessage)" (se sendmessage for 1, vai aparecer por exemplo: "You are poisoned.") [Zorzin] - Rook System [Zorzin] - Trade-Rookgaard e Trade funcionando [Zorzin] - Players em Rookgaard não podem atacar os outros [Zorzin] - Se o player tiver em Main, e ele morrer até chegar em um certo level, ele volta pra Rook (esse sistema, level, e o TownID são configurados no config.lua) [Zorzin] - Commands Logs em "data/command_logs/playername.txt" [Zorzin] - Agora aparece o nome do último que escreveu em um papel e a data [subarmy, Kiper, Talaturen] - Configuração do Fight Mode Rate no config.lua (full_attack, balanced, full_defense... Essa configuração é útil porque você pode deixar o attack/defesa em cada Fight Mode do jeito que você quiser! =) [Zorzin] - Protection System (com 3 opções no config.lua: para ativar/desativar, o level e a mensagem que irá aparecer) - Ao invés de aparecer: "You are already logged in.", vai kickar o player que está logged in e vai entrar o outro cliente (somente se allowclones for maior que 0) [Zorzin] - Agora não é possível entrar com 2 ou mais chars da mesma account (com 2 opções no config.lua: para ativar/desativar e a mensagem) [Zorzin] - Adicionado "decayTo" opção pro items.xml [Xidaozu] - Adicionado opções "infinite_runecharges" e "infinite_ammunation" no config.lua [Xidaozu] - Adicionado configurações da Skull System no config.lua: banunjust, redunjust, bantime, fragtime, whitetime [Xidaozu] - Party System [Remere] - Se o player tenta entrar numa Party e o outro player não está online, aparece: "Player is not online" [Zorzin] - !buyhouse [Pedro B.] - Opção no config.lua para mostrar o preço da house quando der Look na porta [Zorzin] - Opção no config.lua se as houses são somente para premium players ou para free também [Zorzin] - Arrumado o !buyhouse para funcionar em New SVN e trocado o "You do not have the required level." do !buyhouse por: "You need level (xx) to buy a house." [Zorzin] - Comando: /mccheck (checa se tem alguem com o mesmo IP no server) [silv] - Guild System [Yurez] - Quest Logs [Kiper] - /reload quests [Kiper] - Death List [Jiddo] - Comando: /viewdeaths nome (vê as deaths do player) [Zorzin] - DeathList Loading/Saving pra SQL [LarvaExotech] - Comando: /invisible [The Chaos, Xidaozu] - Você pode pegar mais de level 350 [Yurez, Zorzin] - Comando !report (salva os reports num .txt na pasta: data/reports) [Zorzin] - Acc Manager [Rogier] - Fixed Acc Manager, adicionado opção pra escolher "male" ou "female" [Zorzin] - Adicionado um monte de opções do Acc Manager no config.lua (Antes só dava pra configurar a vida e mana, agora tem tudo: exp, level, etc..) [Zorzin] - Fixed outro bug no Acc Manager... O GUID não estava salvando corretamente, agora o GUID será salvado em ordem [Zorzin] - Fixed um bug no Manager.. Os players podiam criar Chars com o nome que já existia.. Agora não podem mais [Zorzin] - O player não pode criar um char com GOD ou GM no manager (em nenhuma parte do nome do char) [Zorzin] - /reload vocations [Zorzin] - Items.ob fixed, adicionado os items novos e vários nomes dos items novos [Ta4e] - Items.otb fixed: [ta4e] - Stone Skin Amulet diminuido 80% de damage [ta4e] - Protection Amulet agora protege só danos físicos [ta4e] - Stealth Ring durando 8 minutos e naum 10 [ta4e] - E muitos outros bugs fix em items.xml [ta4e] - Spells 90% igual Tibia RL [ta4e, Vinii] - Fireworks Rocket [ta4e] - Food System 100% igual Tibia RL [ta4e] - Windows System [Taker, ta4e] - Construction Kits 100% igual RL [ta4e] - Dice [Grizzmo] - Surprise Bag (blue e red) [ta4e] - Bed System (com opção no config.lua pra configurar a quantidade de mana/hp subir enquanto estiver dormindo) [nfries88] - Beds somente para Premium Accounts [Zorzin] - Hotkeys System [skulldiggers] - Agora você pode usar outros items como Meat, Hams no Hotkey [Zorzin] - Fixed o Use on Yourself do Hotkey System (antes aparecia que não podia usar o Battle dretamente em players) [Zorzin] - Agora você pode usar Use on Target e Use with Crosshairs no hotkey [Zorzin] - Agora aparece o nome do item que você ta usando (antes só aparecia spell rune/vial) [Zorzin] - Agora o Hotkey System ta 100% igual RL agora [Zorzin] - Adicionado opção no config.lua para ativar/desativar o Hotkey System [Zorzin] - Obsidian Knife [cokey, ta4e, zorzin] - Novos LuaScripts: getConfigNumber(config), getConfigString(config), getConfigStringField(config, field) (Um luaScript que retorna o numero/string que tá no config.lua) [Zorzin] - Adicionado um exemplo de como usar o getConfigNumber(config) no script: actions/obsidian_knife.lua [Zorzin] - Nova LuaScript: doTeleportPlayer(cid,x,y,z,sendeffect) [Zorzin] - Opção no config.lua para cair Surprise Bags nos monstros, a porcentagem de cada uma, e os IDS das surprise bags blue & red (a Red só cai para Hydra e Warlock, a Blue cai para os outros monstros com Exp maior que 70) [Zorzin] - You see "a"/"an" item. (Ex: You see an apple./You see a spellbook.) [Zorzin] - Comando /white msg (manda mensagem em branco pra todos sem aparecer o nome) [Zorzin] - Comando /red msg (manda mensagem em vermelho pra todos sem aparecer o nome) [Zorzin] - Comando /green msg (manda mensagem em verde pra todos sem aparecer o nome) [Zorzin] - Comando /blue msg (manda mensagem em azul pra todos sem aparecer o nome) [Zorzin] - Comando /pos (vê a sua posição (x,y,z)) [Zorzin] - Comando /sendeffect numero (numero de 0 a 30 - manda um efeito pra todo mundo que ta online) [Zorzin] - Comando !online (vê os players online - com opção no config.lua para mostrar os Gms ou não) [Zorzin] - Adicionado Exhausted para a UH Rune [Zorzin] - LuaScripts: "getPlayerInventoryItemId(cid,slot)" e "getPlayerInventoryItemCountOrSubtype(cid,slot)" (pega o ItemID do item e o outro pega o CountOuSubtype do item... Caso não encontrar nenhum item no slot, retornará 0) [Zorzin] - LuaScripts: "getPlayerInventoryItemActionId(cid,slot)" e "getPlayerInventoryItemUniqueId(cid,slot)" (pega o actionID do item e o outro o UID do item.. Caso não encontrar nenhum item no Slot, retornará 0) [Zorzin] - Updated a minha SVN para a Revision: 2142 (do dia 17 de Janeiro... que foram fixed muitos bugs) [Zorzin] - Adicionado algumas portas que não estavam configuradas no Door System da SVN [Zorzin] - Adicionado novos Flags para os monstros ("hidename" e "hidehealthandname" - com isso é possível criar os Magicthrowers, e outras criaturas que não aparecem o nome e nem o life) [Zorzin] - Fixed o "Hicks!" que aparece quando alguém ta bêbado (agora ao invés de falarem Hicks!, vao mandar uma mensagem em laranja igual ao Tibia RL) [Zorzin] - Wands & Rods [ispiro] - Novo Ícone [Zorzin] - Underwater System (novos Luascript: "getPlayerUnderwater(cid)" e "setPlayerUnderwater(cid, number)") [Zorzin] - Nova Condition: CONDITION_WATER e COMBAT_WATER (É igual ao CONDITION_DROWNING, mas essa nova condition será usada somente nos data/Movements/underwater.lua.. OBS: Não use essa CONDITION_WATER para fazer Spells ou Monstros, use a CONDITION_DROWNING) [Zorzin] - Quando você está andando embaixo d'agua, de vez em quando sai bolhinha no lugar em que você pisa (igual ao Tibia RL) [Zorzin] - Quando você está embaixo d'agua e tira o Helmet of The Deep, você fica perdendo life... Quando você coloca denovo, volta ao normal (igual ao Tibia RL) [Zorzin] - Novo LuaScript: "doMovePlayer(cid,direction)" (NORTH, SOUTH, WEST, EAST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) [Zorzin] - Novo LuaScript: "doMovePlayerToPosition(cid,x,y,z)" (com ele, o player é movido para tal direção... Se o player tiver na diagonal, ele será movido diagonalmente) [Zorzin] - Trocado todas as actions de portas o teleport pela minha função "doMovePlayerToPosition" para ficar igual ao Tibia RL (quando tem alguém blocando a porta e você fecha ela, esse player é movido para fora da porta) [Zorzin] - Se o player logar numa porta e ela estiver fechada, ele vai ser mandado para fora (se tiver um lado da porta que é House, ele sera mandado para o outro lado - Movement: data/movements/scripts/porta_horizontal.lua e porta_vertical.lua) [Zorzin] - Configurei as Level Doors para ficarem igual ao Tibia RL (usando a minha função: "doMovePlayerToPosition") [Zorzin] - Em cada templo, adicionei um teleport para deixar o player Citizen desta cidade quando passar por ele [Zorzin] - Depot Tiles [Zorzin] - LuaScript: "getPlayerLastLogin(cid)" [Zorzin] - LuaScript: "doChangeTeleportDestpos(teleportpos,destpos)" (com esta função, você pode trocar a posição que o teleport vai levar o player) [Zorzin] - LuaScript: "getCreatureSpeed(cid)" (pega a Speed de uma creatura, pode ser monstro/npc/player) [Zorzin] - LuaScript: "changeCreatureSpeed(cid,speed)" (troca a Speed de uma creatura) [Zorzin] - LuaScript: "hasProperty(uid, property)" (checa se o item tem uma propriedade - as propriedades estao no global.lua) [Zorzin] - Monstros 90% igual Tibia RL (menos os Boss que são do Evolutions) [Ta4e] - LuaScript: "getPlayerMoney(cid, money)" [Zorzin] - Npc de Addons e Outfits Versão 1.0 [soulblaster] - Explosive Arrow [Ta4e] - Poison Arrow [Ta4e] - Blessed Wooden Stake (com opção no config.lua) [Ta4e] - Ancient Helmet Action [Ta4e] --- Zorzin OTServer 1.1 --- - Hotkeys Bug Fixed [Zorzin] - Ground Randomizer apenas se o ground tiver actionID 0 e UID 0 [Zorzin] - Hicks! Message fixed [Zorzin] - Fixed division by zero crash no Randomizer [Zorzin] - SQL database corrigida [Zorzin] - Actions refeitas [ta4e] - Adicionado cake,bread,pumpkin system [ta4e] - Adicionada Quest do HOTA mto Mais real [ta4e] - 2 modificações no mapa (sala da hota rl e casa de blessing na ilha do gelo onde tem forno do gigebredman) - Adicionado forno em vega q se o player tiver o gingebredman recipe faz biscoitos lá [ta4e] - Adicionada Soft boots [ta4e] - Item.otb fixado dead monsters e nomes [ta4e] - Monstros corrigidos agora batem danos mto + real [ta4e] - Bug da torcha e acender fogão corrigido [ta4e] - Bug dos corpos dos novos monstros num poderem ser movidos corrigido [ta4e] - Fixes no item.xml [ta4e] - Adicionado exausted system em lua [frerety] - Mana fluid com exausted [ta4e] - Fix no spells.xml [ta4e] - Fix nas spells dos monstros [ta4e] - Fix na mass healing [ta4e] - Adicionado os addons que estavam faltando para venda no npc de Addons [Zorzin] - Fixed bug dos summons que fazia dar crash no server [Zorzin] - Fixed outro bug que os monstros não atacavam os Summons dos players [Zorzin] - GMs, Senior Gamemasters e GODs podem matar Summons mesmo se no Config.lua estiver: can_attack_summons = "no" [Zorzin] - Fixed alguns bugs da Versão em SQL nas sources [Zorzin] - Fixed o database.sql [Zorzin] - Fixed o Account Manager para SQL [Zorzin] - Fixed um bug no data/movements/manager_add_items.lua [Zorzin] - Fixed an issue that could crash the server [sVN Team] - Changed so that doMoveCreature cant fail because of blocking obstacles [sVN Team] - Fix a crash when a summon loses his master [sVN Team] - Fixed an issue where monster summons would keep being active even if there was no players around. [sVN Team] - Fixed a bug where monster summon that where inactive due to the master is out of reach and the master died the summons would become zombies (0 hp). [sVN Team] - Fixed a bug with spells using parameter with player name that where working even when they where not on the same floor (special case). [sVN Team] - Fixed an issue where you could use actions through walls [sVN Team] - Added a missing animation for monster spells "greenbubble". [sVN Team] - Fixed a bug where you could get 2 unjustified kills from 1 kill [sVN Team] - Monster summons will now drop to the ground instead of poffing when the master dies. [sVN Team] - Fixed a bug with convince creature [sVN Team] - Monsters now update look direction before casting spells [sVN Team] SVN Fixes e Updates - Fixed an issue with luaGetPlayerDepotItems [sVN Team] - Monsters destroyed by another monster will not drop loot [sVN Team] - Masterpos for monster is now the spawning position instead of the center of the spawn to prevent dispawning due to a very large spawn zone. [sVN Team] - Npcs will respond only to player events [sVN Team] - New random function, should work in windows and linux [sVN Team] - Added mutex in Spawn::checkSpawn() [sVN Team] - Fixed compiler warnings and move some functions to headers [sVN Team] - Fixed division by zero crash [sVN Team] - Fixed random_range for negative values [sVN Team] - Show lua script loading errors [sVN Team] - Fix Actions::useItemEx return value [sVN Team] - Recode random_range to make it more simple [sVN Team] - Minor changes [sVN Team] - Added a new experimental Map::getPathTo algorithm which should prevent monsters from destroying other monsters unless they have to [sVN Team] - monster will now try push blocking monsters or items before destroying them [sVN Team] - Fixed an issue where monsters in spawn would despawn if they where far away from the center pos [sVN Team] - cleanup of random_range() [sVN Team] - Fixed an issue where the max summons would not be checked correctly if there was several summons with the same interval and chance [sVN Team] - Fixed so that health/mana gain is correctly adjusted when changing vocation [sVN Team] - Distance attacks will now add 2 skillpoint with blood hits and only 1 skillpoint for puff/spark hits (melee attacks will still only gain 1 skillpoint regardless of block type) [sVN Team] - Changed so that armor reducation is always working regardless how many that attacks you (but only 2 hits / round will be counted towards shielding advance) [sVN Team] - Changed decaying system again to fix an issue with rings/torches being able to turn them brand-new under certain conditions. [sVN Team] - Fixed an issue where under certain circumstances a player could get 2 unjustified kills from a single kill. [sVN Team] - Fixed an autowalking issue where the character would become stuck. [sVN Team] - Fixed an issue where player info was sent a bit to late when using spells/weapons. [sVN Team] - "canDecay" is now depricated both in the otb and items.xml, the new attribute to make an item being able to stop a decaying item is "stopduration", these affects rings, torches, magic light wands, lamps and some other items (all of them are included in the updated items.xml) [sVN Team] - Fixed an issue with ConditionSpeed deserialization which could make a player walk really fast/slow [sVN Team] - Fix so now is loaded fist skill [sVN Team] - Added comments to ItemAttributes class and some fixes [sVN Team] - Remove compiler warnings [sVN Team] - Added check player access to FindPerson [sVN Team] - Added boundaries checks for animation effects. [sVN Team] - Added 3 new optional attributes to monster loot items, "text", "subtype" and "actionId". [sVN Team] - Fixed an issue with pushItem/pushCreature. [sVN Team] - Fixed an issue with loot items with charges would always have 1 charge. [sVN Team] - Added "drunk" spell in monster spell xml configuration. [sVN Team] - "Drunk" added to reserved list to not use in spells.xml [sVN Team] - Fixed a bug in pushCreature/pushItem that could crash the server [sVN Team] - Fixed an issue with items loaded from map where always having 1 charge instead of default from items.xml [sVN Team] - Fixed a bug in random_range() which would only return (min, max - 1) which would make monsters tend to prefer going left. [sVN Team] - If its not possible to place a creature at centerPos in placeCreature() the next attempts will be random around the centerPos instead of starting from top-left->bottom->right. [sVN Team] - Cleanup of some excessive code [sVN Team] - Check that a player only creates one private channel [sVN Team] - Change unsigned long to uint32_t in autoid [sVN Team] - Remove compiler warnings [sVN Team] - Added a new function findItemOfType() for future usage. [sVN Team] - Added new attributes to to items.xml "name", "description", "weight", "decayTo", "decayTime", "rotateto", "armor", "defense" , "attack", "maxitems", "textMaxLen", "textReadOnlyId", "ammoType", "shootType", "weaponType", "slotType" and a new attribute for magic fields "replaceable" that can be set to 1/0 (true/false) if you want a field to be replaceable (such as fields loaded from map). [sVN Team] - Included all magic fields into the items.xml and movements.xml and set decayTo=0 for wild growth and magic walls. [sVN Team] - Fixed an issue with DamageCondition where min/max values where not configured correctly (thanks LooSik). [sVN Team] - Fixed a bug in decaying (thanks LooSik). [sVN Team] - Fixed an issue with magic field that crashed the server [sVN Team] - Fixed a small issue when loading weights lower than 1.00 oz [sVN Team] - Fixed an issue where you could use actions through walls [sVN Team] Mapa O mapa é o SadTeam, feito por Mtts e SadSoul. O mapa tem aproximadamente 6.8MB, e tem 8 cidades. Mudanças no mapa - Nas áreas embaixo d'agua, eu tirei as escadas e substituí-las por Teleports (para ficar igual ao Tibia RL) [Zorzin] - Para ir nas áreas embaixo d'agua, você precisa do Helmet of The Deep (antes qualquer um podia descer pela escada) [Zorzin] - Editado Rookgaard (agora tá bem melhor, mais decorações) [Zorzin] - Adicionado Depot Tiles em todas as cidades [Zorzin] - Adicionado CarpetMan em Tiquanda [Zorzin] ------------------------------------------------------------------------------ Download: Zorzin OTServer 1.1 (XML): Mirror 1: http://rapidshare.com/files/16803314/Zorzi....1_XML.rar.html Mirror 2: http://lix.in/f02d5c ************************ Zorzin OTServer 1.1 (SQL): Mirror 1: http://rapidshare.com/files/16804008/Zorzi....1_SQL.rar.html Mirror 2: http://lix.in/429cc2 ------------------------------------------------------------------------------ É isso ae gente! =) Espero que gostem da versão, que façam bom proveito, e por favor, não retire os créditos :S Esse versão foi feita com muito carinho Vários dias tive que ficar dia e noite trabalhando nela o0 Mas... Valeu a pena :icon1: Postem aqui dúvidas, sugestões, comentários ou qualquer coisa relacionada ao Zorzin OTServer. Por favor comentem =) Obrigado, Zorzin
  7. o0.. Muito bom as TalkActions.. =) Vlws Soulblaster por postar elas aqui ;D Tenho certeza que vai ajudar muita gente, pois existem muitos ots que não tem esses comandos nas sources, ai basta elas adicionarem por talkactions (é bem mais facil porque muita gente não sabe compilar =)) Vou usar o !uptime Obrigado, Zorzin
  8. Muito bom o tuto! =) Organizado, simples, fácil e rápido! Vai ajudar muita gente... Tem muitas pessoas que não conseguem compilar a SVN Nova justamente por causa do luaL_dofile, que só tem na Library LUA Nova (a atual: 5.1.1)... Muito bom! :nuts: Parabéns pelo tuto =] Zorzin
  9. @todos, eu não quis dizer que é difícil de configurar... Pelo contrário, é muitooo fácil configurar os npcs, as falas Eu quis dizer que era um poco + avançado o código, pq da pra comprar infinitos items, da pra configurar um monte de coisa, da pra vender/comprar items com Subtype, da pra ocnfigurar o maximo de items que podem ser comprados no Config.lua, e muito mais... =] Foi isso que eu quis dizer... =D Configurar eh mto facil ainda mais as falas que ja deixei prontinhas pra serem configuradas no arquivo do npc @todos, Obrigado pelos comments!! =)~ Obrigado, Zorzin
  10. Não.. é um poco mais complexo... ahseiuhe Tipo.. Por exemplo: ------------------------ Zorzin: hi Npc: Hello GM Zorzin! I sell meat, lifefluids. Also, I buy manafluids, ropes and apples. Zorzin: buy 121 lifefluids Npc: Do you want to buy 121 lifefluids for 8470 gold? Zorzin: yes Npc: Here you are. ------------------------ Outro exemplo: Zorzin: hi Npc: Hello GM Zorzin! I sell meat, lifefluids. Also, I buy manafluids, ropes and apples. Zorzin: sell 2345 apples Npc: Do you want to sell 2345 apples for 4690 gold? Zorzin: yes Npc: Thanks for this item. ------------------------ E por aí vai... Tem vários exemplos diferentes mas não vou listar todos não pq sao muitos =) Obrigado, Zorzin
  11. Vlws pelos comments! =D Se acharem algum bug, ou tiverem alguma sugestão, por favor postem aqui =) Eu não achei nenhum bug até agora Obrigado, Zorzin
  12. Opa.. nice =) Depois vou adicionar aqui e testar.. ai eu edito Ah.. Soulblaster, adiciona ali no seu post lá emcima: Pra quem o ot for XML ao invés de SQL, deleta o: player->bank = result.getDataLong("bank"); e deleta o: query << "`bank` = " << player->bank << ", "; E em ioplayerxml.cpp: Depois de: if(readXMLInteger(root, "soul", intValue)){ player->soul = intValue; } Adicione: if(readXMLInteger(root, "bank", intValue)){ player->bank = intValue; } else player->bank = 0; -------------- E depois de: sb.str(""); sb << player->soul; xmlSetProp(root, (const xmlChar*)"soul", (const xmlChar*)sb.str().c_str()); Adicione: sb.str(""); sb << player->bank; xmlSetProp(root, (const xmlChar*)"bank", (const xmlChar*)sb.str().c_str()); ------------------------------------------------------------------------- Aí troca o titulo do post para: [7.9 Xml/Sql] Obrigado, Zorzin
  13. Gratz! Mto boa a versão!! Recomendo! =) Parábens Continue assim... Obrigado, Zorzin
  14. Oi gente! =) Criei um buy/sell system que tem um monte de opções e está funcionando perfeitamente... No meu buy/sell: * Você pode comprar infinitos items [por exemplo: buy 121 maces, buy 267 apples] * Você pode vender infinitos items [por exemplo: sell 456 hams, sell 21 ropes] * Você pode comprar/vender items com Subtype [por exemplo: manafluids, runas] * LuaScript "haveItem(cid, itemid, count, subtype, iscountable)" [checka se o player tem algum determinado item, funciona pra todos luascripts(npcs,actions,etc)] * Novas Funções em data/npc/script/lib/npc.lua * Você pode configurar as mensagems que o npc vai falar no NpcScript [por exemplo: Here you are.] * Você pode configurar o máximo de items que podem ser comprados no config.lua * O npc pergunta se você quer comprar/vender o item * e muito mais!! Primeiro, você precisa da função getCountNumber(msg) feita pelo Soulblaster: No final de data/npc/scripts/lib/npc.lua adicione: function getCountNumber(msg) b, e = string.find(msg, "%d+") if b == nil or e == nil then count = 1 else count = tonumber(string.sub(msg, b, e)) end return count end ------------------------------------------ Vamos começar com o code?? Gogogo No final de game.cpp adicione: #ifdef ZORZIN_BUY_SELL uint32_t Game::haveItem(Cylinder* cylinder, uint32_t item_id, uint16_t subtype, uint16_t type) { if(cylinder == NULL){ return 0; } std::list<Container*> listContainer; ItemList::const_iterator it; Container* tmpContainer = NULL; Thing* thing = NULL; Item* item = NULL; unsigned int itemCount = 0; for(int i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex(); ++i){ if(!(thing = cylinder->__getThing(i))) continue; if(!(item = thing->getItem())) continue; if(tmpContainer = item->getContainer()){ listContainer.push_back(tmpContainer); } else{ if(item->getID() == item_id) { if(type == 0){ if(item->hasSubType() && item->getItemCountOrSubtype() == subtype) ++itemCount; else if(!item->hasSubType()) ++itemCount; } else if(type == 1){ if(item->getItemCount() > 0) itemCount += item->getItemCount(); } } } } while(listContainer.size() > 0){ Container* container = listContainer.front(); listContainer.pop_front(); for(it = container->getItems(); it != container->getEnd(); ++it){ Item* item = *it; if(tmpContainer = item->getContainer()){ listContainer.push_back(tmpContainer); } else if(item->getID() == item_id) { if(type == 0){ if(item->hasSubType() && item->getItemCountOrSubtype() == subtype) ++itemCount; else if(!item->hasSubType()) ++itemCount; } else if(type == 1){ if(item->getItemCount() > 0) itemCount += item->getItemCount(); } } } } return itemCount; } void Game::deleteItemSubType(Cylinder* cylinder, uint32_t item_id, uint16_t subtype, uint32_t how_many) { if(cylinder == NULL){ return; } int xx = 0; std::list<Container*> listContainer; ItemList::const_iterator it; Container* tmpContainer = NULL; Thing* thing = NULL; Item* item = NULL; unsigned int itemCount = 0; for(int i = cylinder->__getFirstIndex(); i < cylinder->__getLastIndex(); ++i){ if(!(thing = cylinder->__getThing(i))) continue; if(!(item = thing->getItem())) continue; if(tmpContainer = item->getContainer()){ listContainer.push_back(tmpContainer); } else{ if(item->getID() == item_id && subtype != 0 && item->hasSubType() && item->getItemCountOrSubtype() == subtype && xx < how_many){ removeItemOfType(cylinder, item_id, 1); ++xx; } } } while(listContainer.size() > 0){ Container* container = listContainer.front(); listContainer.pop_front(); for(it = container->getItems(); it != container->getEnd(); ++it){ Item* item = *it; if(tmpContainer = item->getContainer()){ listContainer.push_back(tmpContainer); } else if(item->getID() == item_id && subtype != 0 && item->hasSubType() && item->getItemCountOrSubtype() == subtype && xx < how_many){ removeItemOfType(cylinder, item_id, 1); ++xx; } } } } #endif ------------------------------------------ Em game.h, depois de: class Game { public: Game(); ~Game(); Adicione: #ifdef ZORZIN_BUY_SELL uint32_t haveItem(Cylinder* cylinder, uint32_t item_id, uint16_t subtype, uint16_t type); void deleteItemSubType(Cylinder* cylinder, uint32_t item_id, uint16_t subtype, uint32_t how_many); #endif ------------------------------------------ Em configmanager.cpp, depois de: m_confString[LOGIN_MSG] = getGlobalString(L, "loginmsg", "Welcome."); Adicione: #ifdef ZORZIN_BUY_SELL m_confInteger[MAX_ITEMS_COUNTABLE] = getGlobalNumber(L, "max_items_countable", 200); m_confInteger[MAX_ITEMS_NOTCOUNTABLE] = getGlobalNumber(L, "max_items_not_countable", 2000); m_confString[MAX_ITEMS_MSG] = getGlobalString(L, "max_items_msg", "Sorry, you can not buy more than "); #endif ------------------------------------------ Em configmanager.h, depois de: OTSERV_DB_HOST, Adicione: #ifdef ZORZIN_BUY_SELL MAX_ITEMS_MSG, #endif Em configmanager.h, depois de: OTSERV_DB_ENABLED, Adicione: #ifdef ZORZIN_BUY_SELL MAX_ITEMS_COUNTABLE, MAX_ITEMS_NOTCOUNTABLE, #endif ------------------------------------------ Em Luascript.cpp, depois de: //getPlayerFood(uid) lua_register(m_luaState, "getPlayerFood", LuaScriptInterface::luaGetPlayerFood); Add: #ifdef ZORZIN_BUY_SELL //haveItem(cid, itemid, count, subtype, iscountable) lua_register(m_luaState, "haveItem", LuaScriptInterface::haveItem); #endif ------------------------------------------ No final de Luascript.cpp adicione: #ifdef ZORZIN_BUY_SELL int LuaScriptInterface::haveItem(lua_State *L) { uint16_t type = (uint16_t)popNumber(L); uint16_t subtype = (uint16_t)popNumber(L); uint16_t count = (uint16_t)popNumber(L); uint32_t itemId = (uint32_t)popNumber(L); uint32_t cid = (uint32_t)popNumber(L); ScriptEnviroment* env = getScriptEnv(); Player* player = env->getPlayerByUID(cid); if(player){ if(g_game.haveItem(player, itemId, subtype, type) >= count){ lua_pushnumber(L, LUA_TRUE); } else{ lua_pushnumber(L, LUA_FALSE); } } else{ reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushnumber(L, LUA_ERROR); } return 1; } #endif ------------------------------------------ Em Luascript.h, depois de: static int luaGetPlayerFood(lua_State *L); Adicione: #ifdef ZORZIN_BUY_SELL static int haveItem(lua_State *L); #endif ------------------------------------------ Em Npc.cpp, depois de: lua_register(m_luaState, "selfSay", NpcScriptInterface::luaActionSay); Adicione: #ifdef ZORZIN_BUY_SELL lua_register(m_luaState, "buy", NpcScriptInterface::luaBuyItem); lua_register(m_luaState, "sell", NpcScriptInterface::luaSellItem); #endif ------------------------------------------ No final de Npc.cpp, adicione: #ifdef ZORZIN_BUY_SELL int NpcScriptInterface::luaBuyItem(lua_State* L) { //Buy/Sell System by Zorzin std::string name(popString(L)); short type = (short)popNumber(L); long price = (int)popNumber(L); int how_many = (int)popNumber(L); int count_or_subtype = (short)popNumber(L); int item_id = (int)popNumber(L); int cid = (int)popNumber(L); Player* player = g_game.getPlayerByID(cid); uint32_t getPlayerMoney = g_game.getMoney(player); short add_count = 0; #ifdef USING_OLD_CVS Npc* mynpc = getNpc(); #else ScriptEnviroment* env = getScriptEnv(); Npc* mynpc = env->getNpc(); #endif Tile* ground = player->getTile(); if(type == 1 && count_or_subtype == 0) count_or_subtype = 1; std::stringstream textMsg; if(type == 0 && how_many > g_config.getNumber(ConfigManager::MAX_ITEMS_NOTCOUNTABLE)){ textMsg << g_config.getString(ConfigManager::MAX_ITEMS_MSG) << g_config.getNumber(ConfigManager::MAX_ITEMS_NOTCOUNTABLE) << " " << name << "."; mynpc->doSay(textMsg.str().c_str()); } else if(type == 1 && count_or_subtype > g_config.getNumber(ConfigManager::MAX_ITEMS_COUNTABLE)){ textMsg << g_config.getString(ConfigManager::MAX_ITEMS_MSG) << g_config.getNumber(ConfigManager::MAX_ITEMS_COUNTABLE) << " " << name << "."; mynpc->doSay(textMsg.str().c_str()); } else{ if(getPlayerMoney >= price){ //Checks if the player has the money if(type == 1 && count_or_subtype <= 100) how_many = 1; else if(type == 1 && count_or_subtype > 100){ how_many = count_or_subtype/100; add_count = count_or_subtype% 100; count_or_subtype = 100; } g_game.removeMoney(player, price); for(int cont = 0; cont < how_many; ++cont){ ReturnValue ret = g_game.internalPlayerAddItem(player, Item::CreateItem(item_id, count_or_subtype)); if(ret != RET_NOERROR) ground->__internalAddThing(Item::CreateItem(item_id, count_or_subtype)); if(add_count != 0 && how_many == cont+1){ ret = g_game.internalPlayerAddItem(player, Item::CreateItem(item_id, add_count)); if(ret != RET_NOERROR) ret = g_game.internalAddItem(ground, Item::CreateItem(item_id, add_count), INDEX_WHEREEVER, FLAG_NOLIMIT); } } lua_pushnumber(L, 1); //return 1 on the NpcScript :P } else lua_pushnumber(L, 0); //return 0 on the NpcScript :P } return 1; } int NpcScriptInterface::luaSellItem(lua_State* L) { //Buy/Sell System by Zorzin short type = (short)popNumber(L); long price = (int)popNumber(L); int how_many = (int)popNumber(L); short count_or_subtype = (short)popNumber(L); int item_id = (int)popNumber(L); int cid = (int)popNumber(L); short sub_type = 0; if(type == 0) sub_type = count_or_subtype; Player* player = g_game.getPlayerByID(cid); uint32_t getPlayerItem = g_game.haveItem(player, item_id, sub_type, type); short remove_count = 0; #ifdef USING_OLD_CVS Npc* mynpc = getNpc(); #else ScriptEnviroment* env = getScriptEnv(); Npc* mynpc = env->getNpc(); #endif Tile* ground = player->getTile(); if((type == 0 && getPlayerItem >= how_many) || (type == 1 && getPlayerItem >= count_or_subtype)){ //checks if the players has the items if(type == 1 && count_or_subtype <= 100) how_many = 1; else if(type == 1 && count_or_subtype > 100){ how_many = count_or_subtype/100; remove_count = count_or_subtype% 100; count_or_subtype = 100; } if(type == 0 && count_or_subtype != 0) g_game.deleteItemSubType(player, item_id, count_or_subtype, how_many); else{ if(type == 0 && count_or_subtype == 0) count_or_subtype = 1; for(int cont = 0; cont < how_many; ++cont){ g_game.removeItemOfType(player, item_id, count_or_subtype); if(remove_count != 0 && how_many == cont+1) g_game.removeItemOfType(player, item_id, remove_count); } } if(price > 9999){ ReturnValue ret = g_game.internalPlayerAddItem(player, Item::CreateItem(2160, price/10000)); if(ret != RET_NOERROR) ret = g_game.internalAddItem(ground, Item::CreateItem(2160, price/10000), INDEX_WHEREEVER, FLAG_NOLIMIT); price = price%10000; } if(price > 99){ ReturnValue ret = g_game.internalPlayerAddItem(player, Item::CreateItem(2152, price/100)); if(ret != RET_NOERROR) ret = g_game.internalAddItem(ground, Item::CreateItem(2152, price/100), INDEX_WHEREEVER, FLAG_NOLIMIT); price = price%100; } if(price > 0){ ReturnValue ret = g_game.internalPlayerAddItem(player, Item::CreateItem(2148, price)); if(ret != RET_NOERROR) ret = g_game.internalAddItem(ground, Item::CreateItem(2148, price), INDEX_WHEREEVER, FLAG_NOLIMIT); price = 0; } lua_pushnumber(L, 1); } else lua_pushnumber(L, 0); return 1; } #endif ------------------------------------------ Em Npc.h, depois de: static int luaActionSay(lua_State *L); Add: #ifdef ZORZIN_BUY_SELL static int luaBuyItem(lua_State *L); static int luaSellItem(lua_State *L); #endif ------------------------------------------ Agora, cria um novo arquivo em data/npc/ named: "test.xml" e adicione nesse arquivo: <?xml version="1.0"?> <npc name="Test" script="data/npc/scripts/test.lua" access="3"> <mana now="800" max="800"/> <health now="800" max="800"/> <look type="144" head="96" body="109" legs="90" feet="128" addons="3"/> </npc> ------------------------------------------ Agora, cria um novo arquivo em data/npc/scripts/ named: "test.lua" e adicione nesse arquivo: ------------------------------------------ No final de data/npc/scripts/lib/npc.lua Adicione: function sendMsgBuySell(cid,itemid,count,price,article,name,plural,b_s) price = price*count if b_s ~= 'buy' and b_s ~= 'sell' then b_s = 'sell' end if count == 1 then selfSay('Do you want to '.. b_s ..' '.. article ..' '.. name ..' for '.. price ..' gold?') else name = plural selfSay('Do you want to '.. b_s ..' '.. count ..' '.. name ..' for '.. price ..' gold?') end end function buyItem(cid,itemid,count,subtype,price,type,name,plural,msgerror,msgok,msgno,msg) price = price*count if count > 1 then name = plural end if msgcontains(msg, 'yes') then if type == 0 then buy_status = buy(cid,itemid,subtype,count,price,0,name) else buy_status = buy(cid,itemid,count,subtype,price,1,name) end if buy_status == 1 then selfSay(msgok) elseif buy_status == 0 then selfSay(msgerror) end elseif msgcontains(msg, 'no') then selfSay(msgno) end -- msgcontains end --function function sellItem(cid,itemid,count,subtype,price,type,msgerror,msgok,msgno,msg) price = price*count if msgcontains(msg, 'yes') then if type == 0 then sell_status = sell(cid,itemid,subtype,count,price,0) else sell_status = sell(cid,itemid,count,subtype,price,1) end if sell_status == 1 then selfSay(msgok) else selfSay(msgerror) end talk_state = 0 elseif msgcontains(msg, 'no') then selfSay(msgno) end end ------------------------------------------ Em Project Options (Alt+P) > Parameters > C++ Compiler adicione: -DZORZIN_BUY_SELL ------------------------------------------ Adicione no config.lua: ----------------------------------------- --- Buy/Sell System by Zorzin =) --- ----------------------------------------- -- Max Items to buy (if item is not countable - Ex: rope, crown armor) -- ||| Default: 200 ||| -- max_items_notcountable = 200 -- Max Items to buy (if item is countable - Ex: meat, ham) -- ||| Default: 2000 ||| -- max_items_countable = 2000 -- The message that will be sent when the player try to buy more then the max items -- ||| Default: "Sorry, you can not buy more than " ||| -- max_items_msg = "Sorry, you can not buy more than " ----------------------------------------- ------------------------------------------ Agora dê rebuild all --------------------------- Se você ta tendo compilers errors no npc.cpp, vai em Project Options (Alt+P) > Parameters > C++ Compiler e adicione: -DUSING_OLD_CVS --------------------------- É isso ai.. Agora vou explicar o meu buy/sell system (em data/npc/scripts/test.lua)... -- Mensages: buy_error = 'Sorry, you dont have enough money.' buy_ok = 'Here you are.' buy_no = 'Ok. Maybe another time.' -- sell_error = 'Sorry, you dont have that item.' sell_ok = 'Thanks for this item.' sell_no = 'Ok. Maybe another time.' -- buy_error e sell_error -> é a mensagem que vai ser mandada para o player quanto ele nao tiver dinheiro ou o item necessário buy_ok e sell_ok -> é a mensagem que vai ser mandada quando o buy/sell for concluído buy_no e sell_no, é a mensagem que vai ser mandada quando o player dizer no 'sell',2006,getCountNumber(msg),7,50,0,'a','manafluid','manafluids' 'sell' -> o tipo (pode ser sell ou buy) 2006 -> itemID getCountNumber(msg) -> não mude isso! 7 -> subtype 50 -> preço de 1 item 0 -> iscountable (se o Item é Contável, coloque 1... se o Item não é Contável, coloque 0 [Ex: Manafluid não é Contável.. Para Manafluid coloque 0]) 'a' -> o artigo (pode ser a ou an) 'manafluid' -> nome do item no singular 'manafluids' -> nome do item no plural haveItem(cid,2674,120,0,1) cid -> não mude isso! 2674 -> itemID 120 -> count 0 -> subtype 1 -> iscountable (se o Item é Contável, coloque 1... se o Item não é Contável, coloque 0 [Ex: Manafluid não é Contável.. Para Manafluid coloque 0]) ------------------------------------------ Credits: Zorzin Espero que vocês tenham gostado.. =) Comments plz :icon1: Obrigado, Zorzin
  15. @frerety ehasueiohe.. vlw pelo comment =) e voce.. parou de criar codes? @todos vlws pelos comments ahh.. essa versao do comando eh a 1.0, coloquem a 2.0 que tem mais opcoes... ai vai: Gente, tem um comando /randomoutfit mais novo, a versao mais nova é a 2.0... Ai vai o link: http://www.xtibia.com/forum/index.php?showtopic=36137
  16. hummm..aqui ta funcionando 100% o0 qual versão de SVN vc ta usando? as vezes voce esqueceu alguma parte do code sei la.. confere ai se colocou o code direito... caso ainda n der certo, me fale qual versao de SVN vc ta usando.. =) @todos ehasuiheuhe vlws pelos comments to viajando mas quando eu chegar eu vou fazer + uns codes e eu posto aqui pra vcs, ok? heasuihe =) Obrigado, Zorzin
  17. Oi gente... Essa é a versão 2.0 do comando /randomoutfit... Nessa nova versão, você pode usar 5 tipos de RandomOutfit... Esses tipos são: monsters: outfits de monstros colors: mudar a cor do seu outfit items: mudar seu outfit pra items (não sao todos os items mas são muitos ;D) addons: mudar somente os addons addons_colors: mudar os addons e a cor do outfit também - Aí você usa o comando assim: /randomoutfit tipo Por exemplo: /randomoutfit monsters Lá vai o code: --------------------------------------------- Commands.cpp Depois de: {"/town",&Commands::teleportToTown}, Adicione: {"/randomoutfit",&Commands::randomOutfit}, --- No final do Commands.cpp adicione: bool Commands::randomOutfit(Creature* creature, const std::string& cmd, const std::string& param){ //code by Zorzin versão 2.0 Player* player = creature->getPlayer(); if(!player) return false; if(player->changeOutfitRandom == 0 && (param != "monsters" && param != "colors" && param != "items" && param != "addons" && param != "addons_colors")) { player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "The options are: monsters, colors, items, addons, addons_colors."); return false; } if(player->changeOutfitRandom == 0){ if(param == "monsters") player->changeOutfitRandom = 1; else if(param == "colors") player->changeOutfitRandom = 2; else if(param == "items") player->changeOutfitRandom = 3; else if(param == "addons") player->changeOutfitRandom = 4; else if(param == "addons_colors") player->changeOutfitRandom = 5; // player->sendTextMessage(MSG_INFO_DESCR, "Random Outfit Change: enabled."); return true;}else{ player->changeOutfitRandom = 0; player->currentOutfit.lookType = player->defaultOutfit.lookType; player->currentOutfit.lookHead = player->defaultOutfit.lookHead; player->currentOutfit.lookBody = player->defaultOutfit.lookBody; player->currentOutfit.lookLegs = player->defaultOutfit.lookLegs; player->currentOutfit.lookFeet = player->defaultOutfit.lookFeet; player->currentOutfit.lookAddons = player->defaultOutfit.lookAddons; g_game.internalCreatureChangeOutfit(player, player->getCurrentOutfit()); //o char vai voltar pro outfit inicial;) player->sendTextMessage(MSG_INFO_DESCR, "Random Outfit Change: disabled."); return true;} return false;} --------------------------------------------- Commands.h Depois de: bool teleportToTown(Creature* creature, const std::string& cmd, const std::string& param); Adicione: bool randomOutfit(Creature* creature, const std::string& cmd, const std::string& param); --------------------------------------------- Player.cpp Depois de: magLevel = 20; Adicione: changeOutfitRandom = 0; --- Depois de: #ifdef __SKULLSYSTEM__ checkRedSkullTicks(interval);#endif Adicione: changeRandomOtf(); --- No final do Player.cpp adicione: void Player::changeRandomOtf(){ if(changeOutfitRandom == 0) return; if(changeOutfitRandom == 1) { short x = random_range(1, 2); if(x == 1) currentOutfit.lookType = random_range(2, 127); else currentOutfit.lookType = random_range(192, 247); g_game.internalCreatureChangeOutfit(this, getCurrentOutfit()); } else if(changeOutfitRandom == 2) { currentOutfit.lookHead = random_range(0, 132); currentOutfit.lookBody = random_range(0, 132); currentOutfit.lookLegs = random_range(0, 132); currentOutfit.lookFeet = random_range(0, 132); g_game.internalCreatureChangeOutfit(this, getCurrentOutfit()); } else if(changeOutfitRandom == 3) { Outfit_t outfit; short z = random_range(1, 7); if(z == 1) outfit.lookTypeEx = random_range(2376, 2456); else if(z == 2) outfit.lookTypeEx = random_range(2509, 2542); else if(z == 3) outfit.lookTypeEx = random_range(2457, 2500); else if(z == 4) outfit.lookTypeEx = random_range(2640, 2665); else if(z == 5) outfit.lookTypeEx = random_range(2261, 2316); else if(z == 6) outfit.lookTypeEx = random_range(1487, 1508); else if(z == 7) outfit.lookTypeEx = random_range(2086, 2092); g_game.internalCreatureChangeOutfit(this, outfit); } else if(changeOutfitRandom == 4) { currentOutfit.lookAddons = random_range(0, 3); g_game.internalCreatureChangeOutfit(this, getCurrentOutfit()); } else if(changeOutfitRandom == 5) { currentOutfit.lookHead = random_range(0, 132); currentOutfit.lookBody = random_range(0, 132); currentOutfit.lookLegs = random_range(0, 132); currentOutfit.lookFeet = random_range(0, 132); currentOutfit.lookAddons = random_range(0, 3); g_game.internalCreatureChangeOutfit(this, getCurrentOutfit()); }} --------------------------------------------- Player.h Depois de: virtual Player* getPlayer() {return this;}; Adicione: short changeOutfitRandom;void changeRandomOtf(); --------------------------------------------- Pronto... agora dê REBUILD ALL e divirta-se :icon1: Não se esqueça de adicionar no data/commands.xml: <command cmd="/randomoutfit" access="3" /> Credits: Zorzin Obrigado, Zorzin
  18. Bom, esse num é o lugar certo pra perguntar isso, mas vou responder sua pergunta... Eh soh vc ir no Chat, ao invés de digitar somente a mensagem, digite #c mensagem que sairá em vermelho (apenas se for Acces > 0) Por exemplo: #c Oi gente... =) Espero ter ajudado, Zorzin
  19. Oi, tipo... Tem 2 Screenshots lá emcima do post, depois você da uma olhada lá.. =) E outra... o code num tem bug nenhum ;D Ah uma coisa.... Esse codigo funciona soh em Ots 7.9, por exemplo: XikeOTS, New SVN, etc... =) @Todos, Obrigado pelos comments, depois irei criar mais alguns codes e postar aqui pra vocês x) Obrigado, Zorzin
  20. @tibia4e Sei sim =) Com o tempo vou criando codes e postando eles aqui... Vou ver se faço o próximo code: Bed System pra New SVN ;D @Todos Muito Obrigado pelos comments e que vocês tenham um FELIZ NATAL! Ho Ho HO ehuasiehoehe =) Obrigado, Zorzin
  21. Oi gente... Esse código é o seguinte... No config.lua, vc escolhe se quer abilitar a decoração de Natal ou não, e escolhe quantos % vai ser decorado... Ele funciona desta forma: Quando vc liga o ot, as PAREDES são decoradas com items de Natal de acordo com o config.lua... :icon1: --------- Screenshots: Nesses dois casos eu usei 40% de decoracao pelo config.lua ;] -------- Bom.. Vamos começar?! Configmanager.cpp Antes de: m_confString[LOGIN_MSG] = getGlobalString(L, "loginmsg", "Welcome."); Adicione: #ifdef ZORZIN_CHRISTMAS m_confString[CHRISTMAS_DECO] = getGlobalString(L, "christmas_deco", "yes"); m_confInteger[CHRISTMAS_PERCENT] = getGlobalNumber(L, "christmas_percent", 50); #endif ---------------------------------------------- Configmanager.h Depois de: CONFIG_FILE = 0, Aficione: #ifdef ZORZIN_CHRISTMAS CHRISTMAS_DECO, #endif --- Depois de: LOGIN_TRIES = 0, Adicione: #ifdef ZORZIN_CHRISTMAS CHRISTMAS_PERCENT, #endif ---------------------------------------------- No final do Game.cpp adicione: #ifdef ZORZIN_CHRISTMASint Game::IsWall(int ItemID){if(ItemID == 1025 || ItemID == 1030 || ItemID == 1032 || ItemID == 1036 || ItemID == 1041 || ItemID == 1043 || ItemID == 1049 || ItemID == 1054 || ItemID == 1056 || ItemID == 1060 || ItemID == 1065 || ItemID == 1067 || ItemID == 1100 || ItemID == 1105 || ItemID == 1107 || ItemID == 1111 || ItemID == 1116 || ItemID == 5010 || ItemID == 3463)return 1;else if(ItemID == 1026 || ItemID == 1028 || ItemID == 1034 || ItemID == 1037 || ItemID == 1039 || ItemID == 1045 || ItemID == 1050 || ItemID == 1052 || ItemID == 1058 || ItemID == 1061 || ItemID == 1063 || ItemID == 1069 || ItemID == 1101 || ItemID == 1103 || ItemID == 1109 || ItemID == 1112 || ItemID == 1114 || ItemID == 1118 || ItemID == 3454)return 2;elsereturn 0;}#endif ---------------------------------------------- Game.h Depois de: int loadMap(std::string filename, std::string filekind); Adicione: #ifdef ZORZIN_CHRISTMAS int IsWall(int ItemID); #endif ---------------------------------------------- IOMapOtbm.cpp Depois de: #include "house.h" Adicione: #include "configmanager.h"extern ConfigManager g_config; --- Depois de: if(!item){ map->setLastError(LOADMAPERROR_FAILEDTOCREATEITEM, nodeItem); return false; } Adicione: #ifdef ZORZIN_CHRISTMAS short iswall = g_game.IsWall(item->getID()); if(g_config.getString(ConfigManager::CHRISTMAS_DECO) == "yes" && (iswall == 1 || iswall == 2)) addChristmasDecoration(iswall, tile); #endif --- No final do IOMapOtbm.cpp adicione: #ifdef ZORZIN_CHRISTMASvoid IOMapOTBM::addChristmasDecoration(short IsWALL, Tile* tile){ int percent = 100/g_config.getNumber(ConfigManager::CHRISTMAS_PERCENT); int x = random_range(1,percent); short itemtype = random_range(1,3); int item_id = 0; switch(IsWALL) { case 1: if(x == 1 && itemtype == 1) item_id = 6517; else if(x == 1 && itemtype == 2) item_id = 6518; else if(x == 1 && itemtype == 3) item_id = 6519; break; case 2: if(x == 1 && itemtype == 1) item_id = 6513; else if(x == 1 && itemtype == 2) item_id = 6514; else if(x == 1 && itemtype == 3) item_id = 6515; break; default: break; } if(item_id != 0) tile->__internalAddThing(Item::CreateItem(item_id)); }#endif ---------------------------------------------- IoMapOtbm.h Depois de: ~IOMapOTBM(){}; Adicione: #ifdef ZORZIN_CHRISTMAS void addChristmasDecoration(short IsWALL, Tile* tile); #endif ---------------------------------------------- Vai em Project Options(Alt+P) e em Parameters -> C++ Compiler adiciona: -DZORZIN_CHRISTMAS ---------------------------------------------- Por último, adicione isso no config.lua: --------------------------------------------- Decoração de Natal by Zorzin ----------------------------------------------- Decorar as paredes com items de natal? christmas_deco = "yes"-- Quantos % decorar? (pode ser de 1 a 100)christmas_percent = 20----------------------------------------- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Credits: Zorzin Se quiserem que as paredes sejam decoradas 100% (todas) coloque christmas_percent = 100, e por ai vai.... Se quiser desativar a decoração, coloque christmas_deco = "no"... É isso ae Espero que tenham gostado =D Qualquer coisa se quiser algum code, podem pedir pra mim OBS: Vocês precisam de um items.otb do tibia 7.9 e de um ot 7.9 pra funcionar esse código.. Caso precisarem do items.otb pra 7.9, ai vai o link: http://rapidshare.com/files/8080914/items_otb.zip.html Obrigado, Zorzin
  22. Vlws pelo comentario ejaseheiuh Mas na verdade, não é necessário dar Rebuild All, porque esse code é somente no Commands.cpp, Commands.h e Game.cpp.. Se fosse em algum arquivo .h sozinho, era necessário sim.. Por exemplo.. Se o code fosse em: Commands.h e Game.cpp, você teria que dar Rebuild All, pq o Dev não compila os .h que foram modificados... Ele só compila os .cpp que vc modificou, junto com os .h... :icon1: Ahh... Se alguem tiver precisando de algum code ou quiserem um, fale comigo que eu posso fazer Nesse momento to criano um code de Natal daqui a poco vo posta aqui no XTibia x) ---------------- Edited: @tibiaa4e será q code num eh melhor nao? pq quote funciona emoticons tbm e outras coisas, code é especial pra code [sem emoticon sem nada]... acho que ta bom assim... mas qualquer coisa eu edito =] @Ablank aqui nas minhas sources somente com Compile funciona, mas como vc precisou dar Rebuild, vou editar meu post Obrigado, Zorzin
  23. Gente, tem um comando /randomoutfit mais novo, a versao mais nova é a 2.0... Ai vai o link: http://www.xtibia.com/forum/index.php?showtopic=36137 Oi gente.... Me pediram pra eu fazer um código que quando você usa um comando, o char fica trocando de outfit sozinho (as cores apenas )... Ele funciona desta forma: Você digita /randomoutfit, aí seus outfits ficam mudando de cor sozinho... Quando você digita novamente /randomoutfit, é desativada e o outfit volta para o anterior (o outfit antes de você usar o comando).. Commands.cpp Depois de: {"/town",&Commands::teleportToTown}, Adicione: {"/randomoutfit",&Commands::randomOutfit}, ----- No final de Commands.cpp: bool Commands::randomOutfit(Creature* creature, const std::string& cmd, const std::string& param){ //code by Zorzin x) Player* player = creature->getPlayer(); if(!player) return false; if(player->changeOutfitRandom == false){ player->changeOutfitRandom = true; player->sendTextMessage(MSG_INFO_DESCR, "Random Outfit Change: Enabled."); return true;}else{ player->changeOutfitRandom = false; player->currentOutfit.lookHead = player->defaultOutfit.lookHead; player->currentOutfit.lookBody = player->defaultOutfit.lookBody; player->currentOutfit.lookLegs = player->defaultOutfit.lookLegs; player->currentOutfit.lookFeet = player->defaultOutfit.lookFeet; g_game.internalCreatureChangeOutfit(player, player->getCurrentOutfit()); //o char vai voltar pro outfit inicial;) player->sendTextMessage(MSG_INFO_DESCR, "Random Outfit Change: Disabled."); return true;} return false;} -------------------------------------------- Commands.h Depois de: bool serverInfo(Creature* creature, const std::string& cmd, const std::string& param); Adicione: bool randomOutfit(Creature* creature, const std::string& cmd, const std::string& param); -------------------------------------------- Player.cpp Depois de: magLevel = 20; Adicione: changeOutfitRandom = false; ----- Depois de: #ifdef __SKULLSYSTEM__ checkRedSkullTicks(interval);#endif Adicione: changeRandomOtf(); ----- No final do Player.cpp adicione: void Player::changeRandomOtf(){ if(changeOutfitRandom) { currentOutfit.lookHead = random_range(0, 132); currentOutfit.lookBody = random_range(0, 132); currentOutfit.lookLegs = random_range(0, 132); currentOutfit.lookFeet = random_range(0, 132); g_game.internalCreatureChangeOutfit(this, getCurrentOutfit()); } else return;} -------------------------------------------- Player.h Depois de: int32_t getAccessLevel() const {return accessLevel;} Adicione: bool changeOutfitRandom;void changeRandomOtf(); ------------------------------------------- Agora REBUILD ALL e não se esqueça de adicionar o comando "/randomoutfit" no data/commands.xml Credits: Zorzin É isso aí... :icon1: É um código simples, mas pediram pra mim fazer e ta ae o code =) Se alguém estiver precisando de algum código, podem falar comigo Obrigado, Zorzin
  24. Com esse código, quando o player usa o wand of inferno, solta tipo um efeito de fogo no monstro ou player que ela esta atacando e deixa (3x3 Firefields)... Soh num entendi porque você colocou para access somente maior ou igual a 2.. Tem um problema no seu código.... Tanto no seu code quanto no do Thunder Tiger, tem 1 chave a mais no final do code. :icon1: Esse código nao funciona em New CVS e tem uns bugs... Mas... vlw a intenção Vou passar o code pra New SVN e arrumar ele: (funciona em ot 7.9, por exemplo: Last SVN, XikeOTS e em alguns 7.8 também =) No final de Game.cpp adicione: bool Game::CreateMeteoreEffect(Creature* creature){ Position pos = creature->getPosition(); pos.x-=7; pos.y+=5; Position From = pos; Position To = creature->getPosition(); bool doAnimation = true; for(int areax = creature->getPosition().x-1; areax <= creature->getPosition().x+1; areax++){ for(int areay = creature->getPosition().y-1; areay <= creature->getPosition().y+1; areay++){ Position toPos(areax, areay, creature->getPosition().z); Tile* toTile = map->getTile(toPos); Item* fireItem = Item::CreateItem(1492,1); internalAddItem(toTile, fireItem); startDecay(fireItem); if(doAnimation == true){ SpectatorVec::iterator it; SpectatorVec list; getSpectators(list, From, true); for(it = list.begin(); it != list.end(); it++){ Player* player = dynamic_cast<Player*>((*it)); if(player) player->sendDistanceShoot(From, toPos, NM_ANI_FIRE); } } }}} ------------------------------------- Game.h, depois de: int loadMap(std::string filename, std::string filekind); Adicione: bool CreateMeteoreEffect(Creature* creature); ------------------------- Weapons.cpp depois de: bool Weapon::useWeapon(Player* player, Item* item, Creature* target) const{ if(!playerWeaponCheck(player, target)){ return false; } Adicione: if(item->getID() == 2187)g_game.CreateMeteoreEffect(target); --------------------------------------------- Pronto.. Agora sim ta funcionando 100% em ots 7.9 e ots 7.8 =) =) Zorzin
  25. opa... gostei muito da action shemmue... vou criar uma parecida no meu ot, mas um pouquinho diferente.. acho que vou criar uma quest que tem que usar a chave em algum lugar, para abrir outra porta, que está em outro lugar... auhauehuah :icon1: Vlw pelo script... Obrigado, Zorzin
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...