Histórico de Curtidas
-
Sentsuizan deu reputação a MaTTch em [Vault System] Sistema de CofreBom galera eu resolvi fazer o Vault System a pedido de um amigo meu e decidi compartilhar com vocês.
Testado em 8.60 TFS 0.4
EDIT -- O script foi arrumado, pois havia um bug que o player ganhava golds.
Vamos lá.
1° - Vá em data/actions/scripts e crie um arquivo chamado vault.lua, e dentro você coloca isso:
local vaultStorage = 99991 -- storage em que ficara armazenado os golds ------------------//* Functions //------------------- local function getPlayerFreeSpace(cid) -- by MaTTch local checkSlots, space = {3,5,6,10}, 0 local function getContainerFree(container) local free = 0 if(not isContainer(container.uid)) then return free end for i = 0, (getItemInfo(container.itemid).maxItems -1) do local item = getContainerItem(container.uid, i) if(item.itemid == 0) then free = free + 1 elseif(isContainer(item.uid)) then free = free + getContainerFree(item) end end return free end for _, i in ipairs(checkSlots) do local slotItem = getPlayerSlotItem(cid, i) if(i ~= CONST_SLOT_BACKPACK and slotItem.itemid == 0) then space = space + 1 elseif(isContainer(slotItem.uid)) then space = space + getContainerFree(slotItem) end end return space end local function withdrawMoneySecurity(cid, value, storage) -- by MaTTch local storageMoney, countValue = getPlayerStorageValue(cid, storage), 0 local config = { [1] = {ITEM_CRYSTAL_COIN, math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)}, [2] = {ITEM_PLATINUM_COIN, math.floor((value/getItemInfo(ITEM_PLATINUM_COIN).worth)-(math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)*100))}, [3] = {ITEM_GOLD_COIN, math.floor(value%100)} } for i = 1, #config do local count = config[i][2] if(count > 0) then while(count > 0) do storageMoney = getPlayerStorageValue(cid, storage) local a, itemCap = count > 100 and 100 or count, getItemInfo(config[i][1]).weight if(getPlayerFreeCap(cid) >= (itemCap*a)) then if(getPlayerFreeSpace(cid) >= 1) then doPlayerAddItem(cid, config[i][1], a) setPlayerStorageValue(cid, storage, (storageMoney - (getItemInfo(config[i][1]).worth * a))) countValue = countValue + (getItemInfo(config[i][1]).worth * a) count = count - a else return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough space in container. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end else return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough cap. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end end end end return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end ------------------//* End Functions //------------------- function onUse(cid, item, fromPosition, itemEx, toPosition) local cidMoney, vaultMoney = getPlayerMoney(cid), getPlayerStorageValue(cid, vaultStorage) if(vaultMoney <= 0) then if(cidMoney <= 0) then return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have money.") end doPlayerRemoveMoney(cid, cidMoney) setPlayerStorageValue(cid, vaultStorage, cidMoney) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have added "..cidMoney.." gold"..(cidMoney > 1 and "s" or "").." to vault. Now your money is kept in the vault chest, you can take it whenever you want.") else withdrawMoneySecurity(cid, vaultMoney, vaultStorage) end return true end 2° - Agora em data/actions/actions.xml adicione a tag:
<action itemid="ID" event="script" value="vault.lua"/> Em ID você escolhe o id do item que quiser.
3° - Agora em data/creaturescripts/scripts crie um arquivo com o nome vaultLook.lua, e dentro coloque isso:
local config = { vaultId = ID, -- itemid do vault vaultStorage = 99991 -- storage em que ficara armazenado os golds } function onLook(cid, thing, position, lookDistance) local show = getPlayerStorageValue(cid, config.vaultStorage) if(thing.itemid == config.vaultId) then local str = "You see"..(getItemInfo(thing.itemid).article and " "..getItemInfo(thing.itemid).article.." " or " ")..getItemInfo(thing.itemid).name..".\nYou have "..(show < 0 and 0 or show).." gold"..(show > 1 and "s" or "").." in the vault." if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then str = str .. "\nItemID: ["..thing.itemid.."].\nPosition: [X: "..getThingPos(thing.uid).x.."] [Y: "..getThingPos(thing.uid).y.."] [Z: "..getThingPos(thing.uid).z.."]." end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str) return false end return true end 4° - Agora em data/creaturescripts/creaturescripts.xml adicione a tag:
<event type="look" name="vaultLook" event="script" value="vaultLook.lua"/> 5° - Agora em data/creaturescripts/login.lua lá embaixo adicione junto dos outros:
registerCreatureEvent(cid, "vaultLook") E agora o sistema já esta pronto para ser usado.
- Aah mas como funciona?
Você clica uma vez no cofre (vault) e deposita todo seu dinheiro nele, ao clicar de novo você pega-os de volta, e caso não tiver cap ou espaço na bag você pega somente o possível e o restante ficara la até você quiser pegar.
--> Versão do Vault System em editText
Créditos:
MaTTch (eu)
-
Sentsuizan deu reputação a Ackerzin em Mana&Life 100/100 sem bug.Mana e Life 100/100
Salve galerinha, estive procurando em vários tópicos, algum codigo de life e mana 100/100, e nenhum deles funcionava perfeito para oque eu precisava, todos eles paravam de funcionar quando o player atingia o level 715835 ou mana/life "21474847" o numero 100 da vida virava 65750 ou da mana, de qual você atingisse primeiro "21474847" e pra quem quer por high XP isso é um problema, mas depois de muito, MUITO,MUITO,muito esforço de um amigo, @Rusherzin, ele conseguiu burla isso, e agora você pode pegar quantos de level/mana/life quiser que não vai sair de 100/100, então é isso vamos ao que interessa.
TFS 0.4 foi testado !
Nas SOURCES arquivo protocolgame.cpp procure por:
void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg) e substitua por isso:
Imagem mostrando certinho a life/mana
Créditos:
99% @Rusherzin Por fazer tudo !
1% @Zzyzx Por ficar incomodando até ele fazer !
-
Sentsuizan deu reputação a r0bert0lol em [8.60][OLD Client] Narutibia (NTO HARD) - Servidor CompletoOlá galera do TK !
Venho por meio deste tópico, publicar a ultima versão do meu servidor derivado de Tibia NTO Hard juntamente com todos os arquivos necessários para edições.
Confesso que não foi fácil tomar essa decisão, afinal de contas foram mais de 5 anos nessa vida de administrador de otserver e esses arquivos são de muita valia, tenho certeza de que muito do que conquistei e me tornei, é resultante dos servidores que pude administrar. Costumo dizer que não sou programador e que estou mais para um gerente de scripts, todos os meus servidores foram criados com base em arquivos disponibilizados em comunidades como esta, sendo assim, pensei comigo, seria interessante eu disponibilizar e de certa forma contribuir, acredito que esses arquivos ainda podem ser útil para muitos.
O que tem de diferente no NTO Hard ?
Foi feito com muito carinho ! Rs. Eu poderia fazer uma lista (BÍBLIA) do que tem no servidor porém estou sem tempo mas tenho certeza que esse é o servidor NTO mais completo, atual e disponível para ser baixado em qualquer comunidade de otserver.
Veja algumas Imagens !
O que tem nesse Pacote Full de Arquivos NTO Hard ?
Datapack mais recente e completa do servidor. Site Gesior com template própria + AntiDDOS. Client Descompilado + Estendido + DLL Manabar com ajuste na altura da Barra de Vida/Chakra + DLL Proteção para extensão.cab Source OTX compatível com o servidor CabCreator Item Editor que funciona com o item.otb do server Object Builder 0.4.1 Remeres Map Editor Estendido para funcionar com o client do server Pic Editor IP Changer
DOWNLOAD & SCAN
dbresetada.sql
-
Sentsuizan deu reputação a DdJs em (Resolvido)[Duvida] Sobre Aluguel House@Juantibiano As vezes o server não tem suporte nas sources e outras pastas para fazer funcionar. Acho que é o mesmo principio de um server baiak, que não funciona o sistema de parcel pq falta configurações...
-
Sentsuizan deu reputação a luanluciano93 em setCreatureName(cid, name, description)Olá pessoal, eu estava ajudando um amigo em um script de Tibia Naruto, e me deparei com a necessidade de usar uma função para trocar o nome de um summon, mas isso teria que ser inGame, e depois de procurar um pouco achei a função setCreatureName, que faz exatamente o que eu precisava.
O que ela faz?
Como eu expliquei acima, ela muda o nome da Creature inGame, podendo ser bastante útil (dependendo da sua criatividade).
Como instalar?
A instalação é feita inteiramente nas sources, então vamos lá ..
1 - No arquivo monster.h encontre esse trecho:
class Monster : public Creature { private: Monster(MonsterType* _mType); public: E adicione isso abaixo de public::
std::string name, nameDescription; 2 - Ainda em monster.h procure por:
virtual const std::string& getName() const {return mType->name;} E substitua por isso:
virtual const std::string& getName() const {return name;} 3 - Ainda em monster.h procure por:
virtual const std::string& getNameDescription() const {return mType->nameDescription;} E substitua por isso:
virtual const std::string& getNameDescription() const {return nameDescription;} 4 - Ainda em monster.h procure por:
virtual std::string getDescription(int32_t) const {return mType->nameDescription + ".";} E substitua por isso:
virtual std::string getDescription(int32_t) const {return nameDescription + ".";} 5 - Agora em monster.cpp procure por:
Monster::Monster(MonsterType* _mType): Nas linhas abaixo tem a linha: raid = NULL; , adicione isso logo abaixo:
name = _mType->name; nameDescription = _mType->nameDescription;
6 - Agora em luascript.h adicione isso perto das linhas semelhantes:
static int32_t luaSetCreatureName(lua_State* L); 7 - Agora em luascript.cpp adicione isso perto das linhas semelhantes:
//setCreatureName(cid, name, description) lua_register(m_luaState, "setCreatureName", LuaInterface::luaSetCreatureName); 8 - Ainda em luascript.cpp adicione isso perto das linhas semelhantes:
int32_t LuaInterface::luaSetCreatureName(lua_State* L) { // setCreatureName(cid, newName, newDescription) std::string newDesc = popString(L); std::string newName = popString(L); ScriptEnviroment* env = getEnv(); Creature* creature; if (creature = env->getCreatureByUID(popNumber(L))) { Monster* monster = (Monster*)creature; monster->name = newName; monster->nameDescription = newDesc; lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Pelo fato de algumas diferenças no modo de escrever a função entre as TFS, pode ocorrer erros, e então substitua as seguintes linhas dos 2 passos anteriores:
Créditos: Scarlet Ayeid
É isso pessoal ... um exemplo de uso dentro de alguma função é assim basicamente:
local pos = {x = 10, y = 10, z = 7} local Teste = doCreateMonster("Rat", pos) setCreatureName(Teste, ""..getCreatureName(cid).."", "a "..getCreatureName(cid).."") Espero ter ajudado pessoal, até mais.
-
Sentsuizan deu reputação a Noob II em habilitar pvp systemvai em data/lib/050-function.lua e verifica se tem isso dentro se não tiver adiciona:
function getTileZoneInfo(pos) local tmp = getTileInfo(pos) if(tmp.pvp) then return 2 end if(tmp.nopvp) then return 1 end return 0 end
Depois vai em data/lib/somefunctions.lua e procura por essa função:
function canAttackOther(cid, pid)
abaixo disso:
local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
coloca isso:
if getTileInfo(getThingPos(cid)).pvp then return "Can" end
-
Sentsuizan deu reputação a LeoTK em (Resolvido)(Ajuda) Talk que reinicia servidor@Juantibiano simples uso o auto-restarter se for windows caso for linux use o screen com autorestart irei deixar os dois auto-restart para download e depois use o comando shutdown para fechar o servidor e o auto-restarter vai abri-lo automaticamente
Auto-restart = Windows AUTO RESTARTER.bat
Auto-restart = Linux restart.sh
-
Sentsuizan deu reputação a Vodkart em Dúvida: storage e 'key char'No primeiro código não seria difícil, até fiz um sistema que "salva" o tempo online:
https://tibiaking.com/forums/topic/71413-86-staff-time/
fiz usando storages como vc pode ver
-
Sentsuizan deu reputação a lordzetros em Dúvida: storage e 'key char'Sobre o segundo, acredito que seja possível sim, em C++ tem-se a possibilidade de você pegar o nome do computador, usuário e outras informações (até mesmo do hardware, como o da placa mãe - GamersClub utiliza deste método para identificar cheaters que já foram banidos -). Com isso, basta você armazenar no banco de dados essas informações de cada jogador e fazer com que seja trabalhada de uma forma que quando o player for banido, seja lançada a identificação do mesmo na blacklist. Dá um pouco de trabalho, mas é algo que rende bastante para novas ideias do servidor, como baú diário de forma precisa e dentre outros...
-
Sentsuizan recebeu reputação de buenoiz em (Resolvido)AJUDAIrmao, vai na Pallet House do RME e exclua todas as houses que estao nela (da city principal) em seguida siga os passos q te mandei inicialmente. Vai funcionar.
-
Sentsuizan deu reputação a vankk em (Resolvido)(Ajuda) Alterar CleanBasta você modificar essa linha aqui no game.cpp para
if((*tit)->getUniqueId() != UNIQUE_ID_DO_ITEMS_VIP && (*tit)->isMoveable() && !(*tit)->isLoadedFromMap() && !(*tit)->isScriptProtected()) aonde está UNIQUE_ID_DO_ITEMS_VIP você muda para o UniqueID dos Items VIP de seu servidor.
-
Sentsuizan deu reputação a Vodkart em (Resolvido)Comando que mostra todas as guilds do servidor.function getGuildLeaderName(GuildName) -- function by vodkart local leader = db.getResult("SELECT `players`.`name` FROM `players` WHERE `players`.`id` = (SELECT `guilds`.`ownerid` FROM `guilds` WHERE `guilds`.`name` = ".. db.escapeString(GuildName) .. ")") if(leader:getID() ~= -1) then return leader:getDataString("name") end return "Nobody" end function onSay(cid, words, param, channel) local str, lista = "Guilds Disponiveis no servidor", db.getResult("SELECT `name` FROM `guilds`;") if (lista:getID() ~= -1) then k = 1 repeat local name = lista:getDataString("name") local lider = getGuildLeaderName(name) str = str .. "\n [" .. k .. "] "..name.." - Lider: "..lider k = k + 1 until not lista:next() lista:free() doShowTextDialog(cid, 2529,str) return true end doShowTextDialog(cid, 2529,"Não existem guilds no servidor.") return true end
-
Sentsuizan deu reputação a Vodkart em [MODS] - [8.6] Perfect Zombie System [Automático] [V1.0]Qual dúvida ou erro poste no tópico que estarei respondendo.
Obs: Antes que me falem besteiras, coloquei para os GM'S, CM'S E GOD'S não contarem no evento, então testem apenas com jogadores.
Zombie.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Perfect Zombie System" version="8.6" author="Vodkart" contact="tibiaking.com" enabled="yes"> <config name="zombie_config"><![CDATA[ zombie_config = { storages = {172100, 172101, 172102}, -- n edite players = {min = 2, max = 30}, -- min, max players no evento rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, timeToStartEvent = 30, -- segundos para começar o evento CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento teleport = {{x=147, y=55, z=7}, {x=125 , y=304, z=7}}, -- position do tp onde aparece, position para onde o jogador vai ao entrar no tp arena = {{x=110,y=297,z=7},{x=145,y=321,z=7}}, -- area positions monster_name = "Zombie Event", timeBetweenSpawns = 20, min_Level = 20 } zombie_days = { ["Monday"] = {"13:00","18:00","20:00","22:00"}, ["Tuesday"] = {"13:00","18:00","22:50","22:00"}, ["Wednesday"] = {"21:57","18:00","20:00","23:17"}, ["Thursday"] = {"13:00","18:00","20:00","22:00"}, ["Friday"] = {"13:00","18:00","21:45","22:00"}, ["Saturday"] = {"13:00","18:00","20:00","22:00"}, ["Sunday"] = {"13:00","18:00","20:00","22:00"} } function removeZombieTp() local t = getTileItemById(zombie_config.teleport[1], 1387).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(zombie_config.teleport[1], CONST_ME_POFF) end function ZerarStoragesZombie() for _, stor in pairs(zombie_config.storages) do setGlobalStorageValue(stor, 0) end end function getPlayersInZombieEvent() local t = {} for _, pid in pairs(getPlayersOnline()) do if isInRange(getPlayerPosition(pid), zombie_config.arena[1], zombie_config.arena[2]) and getPlayerAccess(pid) < 3 then t[#t+1] = pid end end return t end function getZombieRewards(cid, items) local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID for _, i_i in ipairs(items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then doAddContainerItem(backpack, item, amount) else for i = 1, amount do doAddContainerItem(backpack, item, 1) end end end end function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function HaveCreatureZombie(area, remove) for x = area[1].x - 1, area[2].x + 1 do for y = area[1].y - 1, area[2].y + 1 do local pos = {x=x, y=y, z=area[1].z} local m = getTopCreature(pos).uid if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end end end end function spawnZombie() if #getPlayersInZombieEvent() > 1 then local pos = {x=math.random(zombie_config.arena[1].x, zombie_config.arena[2].x), y=math.random(zombie_config.arena[1].y,zombie_config.arena[2].y), z=zombie_config.arena[1].z} if not isWalkable(pos, false, false, false) then spawnZombie() else doSummonCreature(zombie_config.monster_name, pos) doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) doSendMagicEffect(pos, CONST_ME_MORTAREA) setGlobalStorageValue(zombie_config.storages[2], getGlobalStorageValue(zombie_config.storages[2]) <= 0 and 1 or getGlobalStorageValue(zombie_config.storages[2])+1) doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(zombie_config.storages[2]) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED) addEvent(spawnZombie, zombie_config.timeBetweenSpawns *1000) end end end function CheckZombieEvent(delay) if getGlobalStorageValue(zombie_config.storages[1]) ~= (zombie_config.players.max+1) then if delay > 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.max then doBroadcastMessage("Zombie event starting in " .. delay .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING) elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.min then for _, cid in pairs(getPlayersInZombieEvent()) do doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT) end removeZombieTp() doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. zombie_config.players.min .. " players is needed!", MESSAGE_STATUS_WARNING) ZerarStoragesZombie() elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) >= zombie_config.players.min then removeZombieTp() doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1]) .. " players]! The event will soon start.") for _, var in pairs(getPlayersInZombieEvent()) do doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!") end addEvent(spawnZombie, zombie_config.timeToStartEvent*1000) end addEvent(CheckZombieEvent, 60000, delay-1) end end]]></config> <event type="statschange" name="ZombieStats" event="script"><![CDATA[ domodlib('zombie_config') if isPlayer(cid) and isMonster(attacker) and getCreatureName(attacker) == zombie_config.monster_name then if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then if #getPlayersInZombieEvent() > 1 then doBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED) local corpse = doCreateItem(getPlayerSex(cid) == 1 and 3058 or 6081, 1, getPlayerPosition(cid)) doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT) if #getPlayersInZombieEvent() == 1 then local winner = getPlayersInZombieEvent()[1] doBroadcastMessage(getCreatureName(winner)..' has survived at zombie event!') local goblet = doPlayerAddItem(winner, zombie_config.rewards.trophy, 1) doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(winner) .. " for winning the Zombie event.") getZombieRewards(winner, zombie_config.rewards.items) doTeleportThing(winner, getTownTemplePosition(getPlayerTown(winner)), false) doSendMagicEffect(getPlayerPosition(winner), CONST_ME_TELEPORT) doBroadcastMessage(getPlayerName(winner).." won the Zombie event! Congratulations!") HaveCreatureZombie(zombie_config.arena, true) ZerarStoragesZombie() end else doBroadcastMessage("No one survived in the Zombie Event.", MESSAGE_EVENT_ADVANCE) HaveCreatureZombie(zombie_config.arena, true) ZerarStoragesZombie() end return false end end return true]]></event> <globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[ domodlib('zombie_config') function onThink(interval, lastExecution) if zombie_days[os.date("%A")] then local hrs = tostring(os.date("%X")):sub(1, 5) if isInArray(zombie_days[os.date("%A")], hrs) and getGlobalStorageValue(zombie_config.storages[3]) <= 0 then local tp = doCreateItem(1387, 1, zombie_config.teleport[1]) doItemSetAttribute(tp, "aid", 45110) CheckZombieEvent(zombie_config.CheckTime) setGlobalStorageValue(zombie_config.storages[1], 0) setGlobalStorageValue(zombie_config.storages[2], 0) HaveCreatureZombie(zombie_config.arena, true) end end return true end]]></globalevent> <event type="login" name="Zombie_Login" event="script"><![CDATA[ domodlib('zombie_config') function onLogin(cid) registerCreatureEvent(cid, "ZombieBattle") registerCreatureEvent(cid, "ZombieStats") if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end return true end]]></event> <event type="combat" name="ZombieBattle" event="script"><![CDATA[ domodlib('zombie_config') if isPlayer(cid) and isPlayer(target) and isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then doPlayerSendCancel(cid, "You may not attack this player.") return false end return true ]]></event> <movevent type="StepIn" actionid ="45110" event="script"><![CDATA[ domodlib('zombie_config') function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end if getPlayerAccess(cid) > 3 then return doTeleportThing(cid, zombie_config.teleport[2]) end if getPlayerLevel(cid) < zombie_config.min_Level then doTeleportThing(cid, fromPosition, true) doPlayerSendCancel(cid, "You need to be at least level " .. zombie_config.min_Level .. ".") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end if getGlobalStorageValue(zombie_config.storages[1]) <= zombie_config.players.max then doTeleportThing(cid, zombie_config.teleport[2]) setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1) doBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(zombie_config.storages[1]) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED) if getGlobalStorageValue(zombie_config.storages[1]) == zombie_config.players.max then setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1) removeZombieTp() doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1])-1 .. " players]! The event will soon start.") for _, var in pairs(getPlayersInZombieEvent()) do doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!") end addEvent(spawnZombie, zombie_config.timeToStartEvent*1000) end end return true end]]></movevent> <talkaction words="/zombiestart;!zombiestart" access="5" event="buffer"><![CDATA[ domodlib('zombie_config') if getGlobalStorageValue(zombie_config.storages[3]) > 0 then doPlayerSendCancel(cid, "The event is already starting.") return true elseif not param or not tonumber(param) then doPlayerSendCancel(cid, "Use only numbers.") return true end local param = tonumber(param) <= 0 and 1 or tonumber(param) local tp = doCreateItem(1387, 1, zombie_config.teleport[1]) doItemSetAttribute(tp, "aid", 45110) CheckZombieEvent(tonumber(param)) ZerarStoragesZombie() setGlobalStorageValue(zombie_config.storages[3], 1) HaveCreatureZombie(zombie_config.arena, true) ]]></talkaction> <globalevent name="ZombieDebug-Start" type="start" event="buffer"><![CDATA[ domodlib('zombie_config') ZerarStoragesZombie() return true]]></globalevent> </mod>
OBS: Quem serve em milesegundos, mude essa parte:
<globalevent name="Zombie_Start" interval="60" event="script"><![CDATA[
para
<globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[
----------------------------------------------------- // --------------------------------------------------
o monstro você instala em data/monsters
zombie event.xml
<?xml version="1.0" encoding="UTF-8"?> <monster name="Zombie Event" nameDescription="an zombie event" race="undead" experience="280" speed="100" manacost="0"> <health now="500" max="500"/> <look type="311" corpse="9875"/> <targetchange interval="5000" chance="50"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="0"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" min="-35000" max="-35000"/> </attacks> <defenses armor="15" defense="10"/> <immunities> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="10"> <voice sentence="You wont last long!"/> <voice sentence="Mmmmh.. braains!"/> </voices> <loot> <item id="2148" countmax="1" chance="100000"/><!-- gold coin --> </loot> </monster>
e a tag em monsters.xml
<monster name="Zombie Event" file="zombie event.xml"/>
Configuração
Sistema
zombie_config = {
storages = {172100, 172101}, -- não edite
players = {min = 2, max = 30}, -- número minimo e máximo para jogadores no evento
rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, -- premiações do jogador
timeToStartEvent = 30, -- segundos para começar o evento após dar start
CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento
teleport = {{x=145, y=50, z=7}, {x=176 , y=54, z=5}}, -- posiçãodo tp onde aparece, posição para onde o jogador vai ao entrar no tp
arena = {{x=173,y=52,z=5},{x=179,y=56,z=6}}, -- posição começo e final da area do evento
monster_name = "Zombie Event", -- nome do monstro que será sumonado
timeBetweenSpawns = 20, -- a cada quantos segundos é dado o respaw time do zombie no evento
min_Level = 20 -- level minimo para participar do evento
}
Dia e Horário
zombie_days = {
["Monday"] = {"13:00","18:00","20:00","22:00"},
["Tuesday"] = {"13:00","18:00","20:00","22:00"},
["Wednesday"] = {"13:00","18:00","20:00","22:00"},
["Thursday"] = {"13:00","18:00","20:00","22:00"},
["Friday"] = {"13:00","18:00","20:00","22:00"},
["Saturday"] = {"13:00","18:00","20:00","22:00"},
["Sunday"] = {"13:00","18:00","20:00","22:00"}
}
["Dia em inglês"] = {"horário do evento"}
Configurando a área:
zombie lua.rar
-
Sentsuizan deu reputação a jeremias em !spells ou !jutsus que não buga em STAFF.Olá pessoal, resolvi adaptar o script do comando !spells ou !jutsus, essa adaptação consiste em prevenir que Staffs como GM, CM, ADM, tomem debug ao usar o comando.
Recomendado para Staffs iniciantes ou esquecidos que usem o comando.
Como coloco em meu servidor ?
-- Adaptado por Jeremias 13/03/2018. function onSay(cid, words, param) if (getPlayerGroupId(cid) >= 3) then return doPlayerSendTextMessage(cid, 19, "Staff nao tem jutsus.") end local count = getPlayerInstantSpellCount(cid) local text = "" local t = {} for i = 0, count - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if spell.level ~= 0 then if spell.manapercent > 0 then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local prevLevel = -1 for i, spell in ipairs(t) do local line = "" if prevLevel ~= spell.level then if i ~= 1 then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" end doShowTextDialog(cid, 2175, text) return TRUE end
Uma adaptação simples que previne dbugs desnecessários.
-
Sentsuizan deu reputação a Cat em Como usar Map generatorMap Generator: Gerar minimap e transformar em .otbm
O Map Gen, como é conhecido, está disponível em duas versões. É possível criar um minimap baseando-se em fatores como tamanho, temperatura e umidade usando o software feito pelo Hempuli; Essa imagem pode ser convertida em .otbm e em pouco tempo você tem em mãos um continente com piso e bordas prontinho para uso. O outro programa, um pouco mais complexo, possibilita fazer tudo isso que o primeiro faz e mais, gerar montanhas com vários andares, adicionar natureza e outros detalhes no mapa automaticamente.
Vantagens:
- Programa leve e fácil de manusear.
- Formatos e bordas customizados requerem habilidade e tempo do mapper, o Map Gen faz isso em segundos.
- Os formatos obtidos através dos fatores de autenticação são bonitos e complexos ou seja, nas mãos de um mapper habilidoso serviriam muito mais do que uma base.
Desvantagens:
- A ferramenta só gera até determinado tamanho, é preciso mesclar vários shapes ou editar a mão se quiser fazer continentes maiores. É recomendado apenas para ilhas e continentes de tamanho pequeno-médio.
- Criatividade: Sem o uso do Map Gen, você além de praticar mais pode criar formatos que o software não pode, você é a melhor ferramenta.
DOWNLOADS
TUTORIAL - Hempuli's Map Gen + Tibia King Map Shape
O HMG é totalmente feito por MMF2, mas deve funcionar no Clickteam Fusion 2.5, supondo que você tenha os plugins necessários. Há um executável agradável incluído, por isso, não possuir o MMF2 / CF2.5 não impede que você brinque com o gerador!
Vamos começar? Abra o Hempuli's Map Gen e siga as orientações da imagem abaixo:
PARTE 01 - Configurações
a. - Montante/Altura: Esta opção é para definir a altura e a proporção, se for configurado com mais altura, o terreno terá mais "gelo" do interior para o exterior e também será mais largo. Se tiver menos altura, o terreno será mais baixo e sem gelo.
Exemplo:
b. - Montante/Temperatura: Esta é para fazer a mesclagem com base na temperatura, se for menor terá mais gelo, se for maior e a altura também, o gelo vai mesclar com o verde.
Exemplo:
c. - Montante/Chuva: Aqui irá definir os "períodos de chuva", teoricamente falando. Se o terreno será molhado ou bem seco externamente.
Exemplo:
d. - Alcance/Largura: O espaço que o terreno vai ocupar, se será uma ilha pequena ou extensa.
Exemplo:
e. - Alcance/Temperatura: Mesma função da temperatura em montante.
Exemplo:
f. - Alcance/Chuva: Do mesmo modo que em montante, porém internamente.
Exemplo:
g. - Força/Tamanho: Aqui vai definir se o terreno será mais largo e achatado, ou se ele será mais suave e delicado. Também se aplica a altura e largura.
Exemplo:
h. - Força/Temperatura: Esta opção vai tratar da intensidade da temperatura (conforme a configuração, mesmo que as três temperaturas sejam altas pode ser que tenha gelo no meio, então é bom ajustar as chuvas caso você queira 0% de gelo)
Exemplo:
i. - Força/Chuva: Da mesma forma que nas outras configurações, essa opção vai tirar o verde do terreno, mas terão poças de água localizadas do centro para fora.
Exemplo:
PARTE 02 - Menus
1. - Clique para gerar um novo terreno conforme muda as configurações na lateral.
2. - Vai criar terrenos aleatórios, porém aproximando-se das configurações da lateral.
3. - Mostra o terreno em formato de minimap (padrão)
4. - Mostra em partículas dispersas, divididas em cores, todas as configuração aplicadas.
5. - Na cor vermelha, mostra as proporções do tamanho do terreno.
6. - Na cor verde, mostra as proporções da temperatura do terreno.
7. - Na cor azul, mostra as proporções da chuva no terreno.
8. - Copia a imagem para ser salva. Utilize o paint (Win + R: mspaint) para salvá-la ou editá-la se necessário
Após finalizar a criação do terreno, utilize o Tibia King Map Shape para transformar em .otbm.
Video-tutorial abaixo:
Dica: Com o mapa aberto, vá em edit - border options - borderize map para adicionar as bordas nos pisos automaticamente. Depois disso faça uma revisão e sucesso!
Vou deixar para falar sobre o Inconssecus Map Gen mais tarde, pois ainda está em demo. Você pode testá-lo neste link.
-
Sentsuizan deu reputação a MaXwEllDeN em O que é o item.UID?Items UniqueID
Olá, pessoal. Tudo tranquilo?
Após muito tempo sem publicar nada, resolvi comentar um assunto que pode ser um pouco obscuro, que eu usava bastante mas demorei certo tempo pra entender realmente o que era. Estou falando do UniqueID, os IDs únicos.
Alguma vez vocês já se perguntaram como o servidor faz para diferenciar o health potion que você possui em sua backpack, do health potion que outro player acabou de dropar em uma caçada?
Pois é! O servidor tem uma forma bem simples e inteligente de distinguir um item do outro. Ele atribui a cada item um número único, que funciona como a digital do item. Dessa forma, quando usamos o health potion que está em nossa backpack, o servidor sabe exatamente qual item remover, dentre tantos outros existentes no seu servidor.
-Certo Max, mas aonde você quer chegar com esse papinho?
As UniqueIDs podem ser usadas para fazer a ligação de um item específico a um script, assim como as actionIDs, a diferença nesse caso é que só podemos ter um único item em todo o servidor com esse UID(uniqueID).
-Hmm, quer dizer que a UID em um script funciona da mesma forma que uma AID(actionID)?
Quase isso. Pelo Map Editor você pode atribuir a UniqueID diretamente a algum item do mapa, assim como você faz com ActionID. Basicamente, você poderia dividir as ações no seu servidor em duas partes: Aquelas que são exclusivas de um único item e aquelas que podem ser atribuídas a mais de um item. Presta atenção que quando falo único item não estou me referindo ao tipo do ítem, como por exemplo todos os crystal coins(itemID 2160) do jogo, mas sim a um crystal coin específico, como um que esteja em uma área de alguma quest.
Por fim, para esclarecer mais um pouco, vou deixar dois exemplos distintos, onde em um eu escolheria usar o itemUID para atribuir certa ação a um item, e em outro eu escolheria usar a actionID.
Caso onde seria mais agradável utilizar itemUID:
Imagina que você está desenvolvendo um script para a Annihilator, mais precisamente da alavanca que teletransporta os players para dentro da sala dos Demons. Como essa alavanca é um item único no servidor, não haverá nenhuma outra alavanca que quando clicada levará os players para a sala dos Demons, eu escolheria atribuir a ela um itemUID único, e associar esse UID ao script que teletransporta os players para dentro da quest.
Caso onde seria mais agradável utilizar actionID:
Agora, imaginemos um caso onde precisamos criar por exemplo, uma pedra que heala quem clicar nela, e precisamos atribuir essa mesma ação a três pedras iguais, distribuídas pelo mapa. Como nesse caso teremos mais de um item compartilhando a mesma ação, seria ideal utilizarmos actionIDs para fazer a ligação dessas pedras com o script que heala o player.
É isso, pessoal. O tópico de hoje foi bem simples e enxuto. Caso tenha restado alguma dúvida ou vocês tenham alguma dúvida sobre scripting no geral e gostariam de saber mais, pode deixar um comentário aí que assim que eu tiver tempo respondo.
Abraços e fiquem com Deus.
-
Sentsuizan deu reputação a Bruno Carvalho em [TalkAction] Player Check SystemVersão: 3.2
Versão de tibia: 9.4+ (Funciona em anteriores)
Descrição: Existem muitos scripts que ajudam o administrador do servidor a cuidar dele, um deles é saber coisas sobre quem está jogando e se está sendo honesta. Eu peguei alguns scripts e estou juntando em um para diminuir o tamanho e ter uma fácil verificação.
TAG:
<talkaction log="yes" words="!p;/p" access="5" event="script" value="playercheck.lua"/> Script:
Talkactions/scripts/playercheck.lua
local config = { check = {"check", "viwer", "verificar", "ver"}, delete = {"del", "delete", "deletar"}, search = {"search", "procurar"} } function getItemsInContainer(cont, sep) local text = "" local tsep = "" local count = "" for i=1, sep do tsep = tsep.."-" end tsep = tsep..">" for i=0, getContainerSize(cont.uid)-1 do local item = getContainerItem(cont.uid, i) if isContainer(item.uid) == FALSE then if item.type > 0 then count = "("..item.type.."x)" end text = text.."\n"..tsep..getItemNameById(item.itemid).." "..count.." ("..item.itemid..")" else if getContainerSize(item.uid) > 0 then text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" text = text..getItemsInContainer(item, sep+2).." ("..item.itemid..")" else text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" end end end return text end function onSay(cid, words, param, channel) local slotName = {"Cabeça", "Amuleto", "Backpack", "Armor", "Mao Direita", "Mao Esquerda", "Legs", "Pés", "Ring", "Ammo Slot"} local t = string.explode(param, ",") if(table.isStrIn(param, config.check)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[2]) if isPlayer(player) == TRUE then local text = getPlayerName(player).."'s Equipment: " for i=1, 10 do text = text.."\n\n" local item = getPlayerSlotItem(player, i) if item.itemid > 0 then if isContainer(item.uid) == TRUE then text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..") "..getItemsInContainer(item, 1) else text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..")" end else text = text..slotName[i]..": Empty" end end doShowTextDialog(cid, 6579, text) else doPlayerSendCancel(cid, "This player is not online.") end end elseif(table.isStrIn(param, config.delete)) then if getPlayerGroupId(cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) if isPlayer(player) == TRUE then count = t[4] if(not t[4]) then count = 1 end if getPlayerItemCount(player, t[2]) > 0 then if doPlayerRemoveItem(player, t[2], count) then doPlayerSendCancel(cid, "Item Deletado.") else doPlayerSendCancel(cid, "Este player não esta quantidade.") end else doPlayerSendCancel(cid, "Este player não tem o item.") end end end elseif(table.isStrIn(param, config.search)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) local result = db.getResult("SELECT name, online FROM players WHERE id IN (SELECT player_id FROM player_items WHERE itemtype = ".. t[2] ..");") local msg = "Resultados da busca pelo item ".. t[2] .." em seu banco de dados:\n\n" if result:getID() ~= -1 then while true do local name = result:getDataString("name") local online = result:getDataInt("online") msg = msg .. name .." [".. (online == 1 and "Online" or "Offline") .."]\n" if not result:next() then break end end else msg = msg .. "O item não foi encontrado em nenhum jogador." end doShowTextDialog(cid, t[2], msg) end end return true end Explicação:
Quando o god digita:
/p check, (PNAME) - Ele verifica os items que o player tem.
/p del, (ID), (PNAME), (COUNT) - Ele deleta o item de determinado player (Se não colocar o count ele irá remover somente 1).
/p search, (ID) - Ele verifica quantos players tem tal item e se está online.
Créditos:
Oneshot
CaioODemais
Comedinha (Bruno Carvalho)
-
Sentsuizan recebeu reputação de Alexander Augusto em [DUVIDA] Vancini deve voltar?Desculpem se está na área errada, é meu primeiro post assim .-.
Fala pessoal do forum TK, ultimamente só venho fazer pedidos mais hoje vim tirar uma dúvida.
Muita gente está parando de jogar Tibia, por está virando um jogo antigo e meio que sem graça por conta de servidores não inovaram não é mesmo? Ultimamente só temos nas OTserverlist's Baiaks e Globais Mais me veio na cabeça uma coisa... Quem se lembra do servidor Vancini OTserver? Aquele que fez muito sucesso na época de 8.50, na qual vários servidores foram abertos como : BogaOT, Killzonepvp, Blackpvp, Euro-vancini etc..
Penso eu que seria uma boa ideia reabrir-lo por conta que muitas pessoas curtem o Baiak e como os verdadeiros jogadores de Tibia sabem esse servidor e outros também como Snow OTs, Slayer etc.. foi uma das bases usadas no baiak.
Bem, eu estava pensando em reabri-lo na versão 8.60 que é uma das mais jogadas ainda, o que vocês acham ? Vocês jogariam ? Compensa? Acham bom ? Alias, naquela época que rolava um bom pvp hihi.
Bem aguardo resposta de vocês.
Imagens do servidor que está assim desde que abri na época de 8.50.
Tps área epic
DP
Templo áreas
Exposição items
Quests da epic
Quests da vip (inicial)
Quets da área free
Teleports VIP/Free
-
Sentsuizan deu reputação a bringsz em [AJUDA]Erro ao criar conta@Juantibiano
Basicamente para você criar um personagem você deve ter um personagem base para ele se "espelhar" vamos assim dizer, ou seja, esses personagens chamamos de sample...
Exemplo para eu criar um Goku no meu servidor de DBO precisa ter um personagem na minha database chamado de Goku Sample, geralmente essas contas ficam na mesma conta que o acc manager...
Esse erro pode ser que quando você tenta criar um personagem ele vai procurar o Sample e não acha, esse personagem é um personagem novo? ou quando você baixou já veio com esse erro? Caso já veio assim, só esse personagem da erro ou todos?
-
Sentsuizan deu reputação a bringsz em [AJUDA]Erro ao criar contaSolucionou?
-
Sentsuizan deu reputação a MaXwEllDeN em (Resolvido)Ajuda Hiraishin Kunai não teleportar dentro dentro de monstros!local pos = fromPosition local aqui = getPlayerPosition(cid) local vocs = {300, 301, 302, 303, 304, 305, 306, 307} local agua = {4610, 4612, 4611, 4664, 4613, 4666, 4646, 4654, 4609, 4665, 4608, 4625, 4665, 4666, 4645} local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 2700, 2708, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422} local pedra = {874, 919, 873, 2707, 2784, 2778, 3330, 4471, 4475, 4473, 4472, 4474, 4468, 4478, 4469, 4470, 4479, 2703, 2704, 1534, 2739, 3867, 5324, 5316, 5315, 5317, 1600, 1597, 1601} function onUse(cid, item, fromPosition, itemEx, toPosition) if getDistanceBetween(aqui, toPosition) >= 8 then return doPlayerSendTextMessage(cid, 27, "Está muito longe.") elseif(not(isSightClear(aqui, toPosition, 1))) then return doPlayerSendTextMessage(cid, 27, "Isso é impossivel.") elseif(getTilePzInfo(aqui)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.") elseif(getTilePzInfo(toPosition)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.") elseif(isInArray(agua, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em agua") elseif(isInArray(parede, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em paredes") elseif(isInArray(pedra, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em pedras") elseif(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 27, "Desculpe, Apenas Minato pode usar a tecnica Deus Dragão.") elseif(isCreature(itemEx.uid)) then return doPlayerSendTextMessage(cid, 27, "Desculpe, mas você não pode teletransportar em criaturas.") end if(doTeleportThing(cid, toPosition, false)) then doSendMagicEffect(pos, 24) doSendMagicEffect(toPosition, 24) doCreatureSay(cid, "Shunshin", 19) return doSendDistanceShoot(pos, toPosition, 16) end return doPlayerSendCancel(cid, "Desculpe nao foi possivel.") end
-
Sentsuizan deu reputação a KotZletY em Player morre e nao dropa corpo@Juantibiano entendo, é realmente um pena caso tenhamos editado muita coisa na distro.
Que bom que conseguiu resolver, eu particularmente nunca passei por erros assim.
Era estranho, ambos scripts, estava funcionando, eu sempre testo, então lhe passei os dois que eu usava quando usava distro 0.4, e que sempre funcionou perfeitamente. Hahahaha.
Em fim, abraços, e boa sorte com seu servidor!
xD
-
Sentsuizan recebeu reputação de ZoR em Player morre e nao dropa corpotava analisando isso hoje, mas nao vi com calma, vou ver aqui e deixo a resposta para você amanha. Caso eu ache a solução posto aqui no tópico. Obrigado pelo suporte.
-
Sentsuizan deu reputação a Biscoito Gamer em [DUVIDA] Vancini deve voltar?Namoral, eu jogaria muito rs bons tempos cara BogaOT velho que sdd dessa ***** Killzone *.* quem tinha o boneco era rei na epoca, muito bom, precisando de ajuda em algo só chamar \z
-
Sentsuizan deu reputação a DukeeH em [Ajuda] Sobre colocar donateNão, você não paga taxa para a empresa.
Sim, sempre existe a chance de eles te processarem, porem é quase impossível tendo em vista o tamanho da empresa e o tamanho do seu server.