Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/04/15 em todas áreas
-
Adaptação para 0.4 e Correção de Bug!
Spring Trap e um outro reagiu a Yan Liima por uma questão
Acho que você não instalou o Devpack vai na pasta Stian's Repack Dev-Cpp Abre o Packman.exe vai em install e seleciona este arquivo que estarei deixando aqui para você baixar. Depois é so você instalar normal dando Next > e pronto. Download: OpenSLL 0.9.82 pontos -
Ajuda num pequeno ajuste de um script
4sharedddd e um outro reagiu a zipter98 por uma questão
O seguinte escopo está sujeito a alguns erros: for id, count in pairs(c.checkItems) do if getTileItemById(c.checkPlace, id).count >= count then doRemoveItem(getTileItemById(c.checkPlace, id).uid, count) doSendMagicEffect(c.checkPlace, CONST_ME_POFF) doPlayerSetStorageValue(cid, c.storage, 1) doTeleportThing(cid, c.teleport) doSendMagicEffect(getThingPos(cid), 10) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce sacrificou o corpo de um belo jovem, uma pena... mas for preciso.") else PlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce precisa colocar corpo de alguem na chama roxa do inferno.") end end Se não se importa, aqui está a correção que escrevi: for id, count in pairs(c.checkItems) do local item = getTileItemById(c.checkPlace, id) if item.uid > 0 and item.type >= count then doRemoveItem(item.uid, count) doSendMagicEffect(c.checkPlace, CONST_ME_POFF) doPlayerSetStorageValue(cid, c.storage, 1) doTeleportThing(cid, c.teleport) doSendMagicEffect(getThingPos(cid), 10) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce sacrificou o corpo de um belo jovem, uma pena... mas for preciso.") return true end end doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce precisa colocar corpo de alguem na chama roxa do inferno.")2 pontos -
[Znote AAC] Layout FREE!
hoshik4ge reagiu a Administrador por um tópico no fórum
1 ponto -
getCreaturePathTo(cid, position, maxSearchDist)
Scizorgame reagiu a RigBy por um tópico no fórum
getCreaturePathTo(cid, position, maxSearchDist) Retornará uma tabela com as direções que o jogador deve seguir para chegar no ponto position. Não contem as posições que ele deve passar por. maxSearchDist é o valor máximo de passos que ele vai dar em direção à essa position e na via das dúvidas coloque o maior valor de distancia entre as duas posições. Ex: Da para fazer um npc anda até certo lugar e depois volta. Suporte para: TFS 0.4/0.3.6 e OTX2 Em luascript.h depois de: static int32_t luaGetCreatureName(lua_State* L); Adicionar: static int32_t luaGetCreaturePathTo(lua_State* L); Em luascript.cpp depois de: //getCreatureName(cid) lua_register(m_luaState, "getCreatureName", LuaInterface::luaGetCreatureName); Adicionar: //getCreaturePathTo(cid, pos, maxSearchDist) lua_register(m_luaState, "getCreaturePathTo", LuaInterface::luaGetCreaturePathTo); Depois de: int32_t LuaInterface::luaGetCreatureName(lua_State* L) { //getCreatureName(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushstring(L, creature->getName().c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Adicionar: int32_t LuaInterface::luaGetCreaturePathTo(lua_State* L) { //getCreaturePathTo(cid, pos, maxSearchDist) ScriptEnviroment* env = getEnv(); int32_t maxSearchDist = popNumber(L); PositionEx position; popPosition(L, position); Creature* creature = env->getCreatureByUID(popNumber(L)); if (!creature) { lua_pushnil(L); return 1; } std::list<Direction> dirList; lua_newtable(L); if (g_game.getPathTo(creature, position, dirList, maxSearchDist)) { std::list<Direction>::const_iterator it = dirList.begin(); for (int32_t index = 1; it != dirList.end(); ++it, ++index) { lua_pushnumber(L, index); lua_pushnumber(L, (*it)); pushTable(L); } } else { lua_pushboolean(L, false); } return 1; } Credito: Elwyn1 ponto -
4 horas http://celestia-realm.com/register.php1 ponto
-
1 ponto
-
[Znote AAC] Layout FREE!
Administrador reagiu a VictorWEBMaster por um tópico no fórum
Lindo layout, obrigado por compartilhar conosco!!!1 ponto -
Ajuda num pequeno ajuste de um script
4sharedddd reagiu a Caronte por uma questão
Eu fiz aqui, baseado nas coisas que você quer: local c = { checkItems = { [3058] = 1, [3065] = 100, }, checkPlace = {x= 934, y = 711, z = 7}, storage = 2306, level = 50, teleport = {x = 948, y = 716, z = 7}, } function onUse(cid) if getPlayerStorageValue(cid, c.storage) == -1 then if getPlayerLevel(cid) >= c.level then for id, count in pairs(c.checkItems) do if getTileItemById(c.checkPlace, id).count >= count then doRemoveItem(getTileItemById(c.checkPlace, id).uid, count) doSendMagicEffect(c.checkPlace, CONST_ME_POFF) doPlayerSetStorageValue(cid, c.storage, 1) doTeleportThing(cid, c.teleport) doSendMagicEffect(getThingPos(cid), 10) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce sacrificou o corpo de um belo jovem, uma pena... mas for preciso.") else PlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce precisa colocar corpo de alguem na chama roxa do inferno.") end end else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce precisa de level "..(c.level)..".") end else doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Voce ja fez este sacrificio.") end return true end Só agora que vi isso: "Voce sacrificou o corpo de um belo jovem, uma pena... mas foi preciso." kkkkkkkkkk1 ponto -
1 ponto
-
1 ponto
-
Site nao fica online
Spring Trap reagiu a Yan Liima por uma questão
Cara, tem skype? seria melhor eu te ajudar por lá add yan.brendo1 ponto -
Site nao fica online
Spring Trap reagiu a Yan Liima por uma questão
Se usa no-ip? otimo cria um link por lá exemplo: yanlima.hopto.org e usa este no seu servidor, se não der certo deve ser porcausa que você usa net compartilhada... Neste caso o hamachi resolveria, com IP dele iria dboa, porém os players teria que entrar na sua rede do hamachi.1 ponto -
Que bom que ainda existe membros assim, dispostos a aprender e compartilhar... Bom, eu recomendo você pegar um servidor bem limpo para você ir colocando suas coisas e incrementando. O que seria um servidor limpo? Seria um servidor com mapa pequeno (assim é mais rápido de abrir a distro/executável) Com poucos ou nenhum sistema. Organizado. Com source de preferência. Porém, para você aprender a incrementar, você tem que baixar servidores já incrementados, então baixe uma pilha de servidores, vá editando, e faça merda neles, use CTRL + Z para eliminar as merdas que você faz, ou poste aqui o erro que gerou para ajudarmos. Conforme você vai aprendendo para que servem as coisas, tente aplicar sem erros no seu servidor base... Eu recomendo você começar por tibia normal mesmo! porque os Derivados/ATS (Altered Tibia Server) são bem desorganizados, e tem funções que são feitas de funções do tibia, isso poderia te dar dor de cabeça. Primeiro aprenda um pouco de LUA, veja como funciona o datapack do tibia, para que serve cada arquivo. Qualquer dúvida estamos aí...1 ponto
-
Evento de Scripting?
Administrador reagiu a Caronte por um tópico no fórum
Sim, eu também pensei em ver o consumo de memória. coisas como um return no lugar certo faz o script parar de rodar se não necessário e economiza um pouquinho, mesmo que não tão notável... Gostaria muito de que você fosse um dos avaliadores, sem compromisso (você pode dar o fora quando quiser). e vou gostar muito se ver bastante gente participando e que o concurso gere conteúdo para o fórum. por isso, estou sendo bastante democrático. Post Scriptum: Esse não tão notável, pode ser notado a longo prazo1 ponto -
[Pedido] monstro que se multiplica com x de vida
4sharedddd reagiu a zipter98 por uma questão
data/creaturescripts/scripts Código: local health_to_multiple = 500 --Vida que, quando o monstro chegar, será replicado. function onStatsChange(cid, attacker, type, combat, value) if isMonster(cid) and getCreatureHealth(cid) <= health_to_multiple and getPlayerStorageValue(cid, 4911) < 1 and type == STATSCHANGE_HEALTHLOSS then local new_monster = doCreateMonster(getCreatureName(cid), getThingPos(cid)) doCreatureAddHealth(new_monster, -(getCreatureMaxHealth(new_monster) - health_to_multiple)) setPlayerStorageValue(cid, 4911, 1) setPlayerStorageValue(new_monster, 4911, 1) end return true end Tag: <event type="statschange" name="multiple_monster" event="script" value="nome_do_arquivo.lua"/> No arquivo .xml do(s) monstro(s): <script> <event name="multiple_monster"/> </script>1 ponto -
Dê mais detalhes sobre o ocorrido, o que foi feito para o erro ocorrer? Como está tentando compilar? Qual compilador está usado? posta o código completo, com todos os arquivos.1 ponto
-
[Resolvido] Remover Créditos estranhos no Console
Spring Trap reagiu a Yan Liima por uma questão
Ok estarei mudando para você. Sobre as sources não tem como eu pegar as sorces ou tentar achar essa rsrs mais tem varias na internet. Siga mais detalhes no Imbox. Estarei mudando para você aqui sem problema. Topico resolvido obrigado por escolher o Xtibia1 ponto -
Function onGainExp(cid, value)
Luga03 reagiu a BananaFight por um tópico no fórum
Function onGainExp(cid, value) Criador: knightxd Descrição: Esta função é ativada quando uma criatura ganha EXP. E você pode retornar falso (return false) para que está criatura não ganhe EXP. Instalação: Creatureevent.h procure por : CREATURE_EVENT_OUTFIT, e adicione embaixo : CREATURE_EVENT_GAINEXP, Novamente, Procure por uint32_t executeOutfit(Creature* creature, const Outfit_t& old, const Outfit_t& current); e adicione embaixo: uint32_t executeGainExp(Player* player, int32_t value); Agora, Abra creatureevent.cpp e Procure por : else if(tmpStr == "outfit") m_type = CREATURE_EVENT_OUTFIT; e adicione embaixo: else if(tmpStr == "gainexp") m_type = CREATURE_EVENT_GAINEXP; Procure por: case CREATURE_EVENT_OUTFIT: return "onOutfit"; e adicione embaixo: case CREATURE_EVENT_GAINEXP: return "onGainExp"; Agora, Procure por: case CREATURE_EVENT_OUTFIT: return "cid, old, current";~ e adicione embaixo: case CREATURE_EVENT_GAINEXP: return "cid, value"; Agora, Procure por: std::cout << "[Error - CreatureEvent::executeStatsChange] Call stack overflow." << std::endl; return 0; } } embaixo adicione: uint32_t CreatureEvent::executeGainExp(Player* player, int32_t value) { //onGainExp(cid, value) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; scriptstream << "local value = " << value << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushnumber(L, value); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeGainExp] Call stack overflow." << std::endl; return 0; } } Agora em Player.cpp procure por bool Player::gainExperience(double& gainExp e embaixo adicione: if(gainExp >= 1) { bool deny = false; CreatureEventList gainExpEvents = this->getCreatureEvents(CREATURE_EVENT_GAINEXP); for(CreatureEventList::iterator it = gainExpEvents.begin(); it != gainExpEvents.end(); ++it) { if(!(*it)->executeGainExp(this, gainExp)) deny = true; } if(deny) return false; } Exemplo de uso: function onGainExp(cid, value) print(value) end Não esqueça de registrar o evento no onlogin Considerações finais: Sim eu sei que já existe um sistema igual no xtibia, porem ele esta errado, este funciona em qualquer source. Desculpem pessoal, mais o xtibia tinha cortado um pedaço do tutorial, e ele estava incompleto, Agora ja foi corrigido.1 ponto -
Monster Level Boa noite, Você deve ter visto este tópico e ficado interessado na feature, afinal, seria legal monstros terem também level, não é? O sistema que desenvolvi é bem funcional, o monstro passa a ter level e ganha mais HP, dá mais dano, tem mais defesa, dependendo dele. Como é feito em C++, a configuração é feita totalmente no XML do monstro, ficando tudo mais organizado. Há um extra no código, onde você pode manipular o level do summon do jogador, alterando o valor do storage 'monster_level'. Bom, é isso aí, para instalar, siga os passos a seguir atentamente. O sistema foi desenvolvido com base no The Forgotten Server 0.4_SVN r3777, não testei na versão 0.3.6, você tem a total liberdade para fazer isso. monsters.h Procure por: bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth; Substitua por: bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth, hideLevel; Procure por: int32_t defense, armor, health, healthMax, baseSpeed, lookCorpse, corpseUnique, corpseAction, maxSummons, targetDistance, runAwayHealth, conditionImmunities, damageImmunities, lightLevel, lightColor, changeTargetSpeed, changeTargetChance; Substitua por: int32_t defense, armor, health, healthMax, baseSpeed, lookCorpse, corpseUnique, corpseAction, maxSummons, targetDistance, runAwayHealth, conditionImmunities, damageImmunities, lightLevel, lightColor, changeTargetSpeed, changeTargetChance, levelMin, levelMax; monsters.cpp Procure por: canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = false; Substitua por: canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = hideLevel = false; Procure por: baseSpeed = 200; Logo abaixo, adicione: levelMin = levelMax = 1; Localize: bool Monsters::loadMonster Dentro da função, procure por: for(xmlNodePtr p = root->children; p; p = p->next) { if(p->type != XML_ELEMENT_NODE) continue; if(!xmlStrcmp(p->name, (const xmlChar*)"health")) { if(!readXMLInteger(p, "max", intValue)) { SHOW_XML_ERROR("Missing health.max"); monsterLoad = false; break; } mType->healthMax = intValue; if(!readXMLInteger(p, "now", intValue)) mType->health = mType->healthMax; else mType->health = intValue; } Logo abaixo, adicione: else if(!xmlStrcmp(p->name, (const xmlChar*)"level")) { if(!readXMLInteger(p, "max", intValue)) mType->levelMax = 1; else mType->levelMax = intValue; if(!readXMLInteger(p, "min", intValue)) mType->levelMin = mType->levelMax; else mType->levelMin = intValue; } Procure por: if(readXMLString(tmpNode, "emblem", strValue)) mType->guildEmblem = getEmblems(strValue); Logo abaixo, adicione: if(readXMLString(tmpNode, "hidelevel", strValue)) mType->hideLevel = booleanString(strValue); monster.h Localize: class Monster : public Creature { Logo abaixo de: public: #ifdef __ENABLE_SERVER_DIAGNOSTIC__ static uint32_t monsterCount; #endif virtual ~Monster(); Adicione: std::string name, nameDescription; int32_t level; double bonusAttack, bonusDefense; Substitua: virtual const std::string& getName() const {return mType->name;} virtual const std::string& getNameDescription() const {return mType->nameDescription;} virtual std::string getDescription(int32_t) const {return mType->nameDescription + ".";} Por: virtual const std::string& getName() const {return name;} virtual const std::string& getNameDescription() const {return nameDescription;} virtual std::string getDescription(int32_t) const {return nameDescription + ".";} monster.cpp Procure por: Monster::Monster(MonsterType* _mType): Logo abaixo de: isIdle = true; Adicione: name = _mType->name; nameDescription = _mType->nameDescription; level = (int32_t)random_range(_mType->levelMin, _mType->levelMax, DISTRO_NORMAL); bonusAttack = 1.0; bonusDefense = 1.0; Procure por: Monster::onCreatureAppear Substitua toda a função por: void Monster::onCreatureAppear(const Creature* creature) { Creature::onCreatureAppear(creature); if(creature == this) { //We just spawned lets look around to see who is there. if(isSummon()) { std::string value; this->master->getStorage((std::string)"monster_level", value); uint8_t intValue = atoi(value.c_str()); if(intValue || value == "0") level = intValue; else level = 1; isMasterInRange = canSee(master->getPosition()); } if(g_config.getBool(ConfigManager::MONSTER_HAS_LEVEL)) { this->healthMax = std::floor(this->getMaxHealth() * (1. + (0.1 * (level - 1)))); this->health = this->healthMax; this->bonusAttack += (0.01 * (level - 1)); this->bonusDefense += (0.005 * (level - 1)); } updateTargetList(); updateIdleStatus(); } else onCreatureEnter(const_cast<Creature*>(creature)); } Substitua todos: g_config.getDouble(ConfigManager::RATE_MONSTER_DEFENSE) Por: g_config.getDouble(ConfigManager::RATE_MONSTER_DEFENSE) * bonusDefense Substitua todos: g_config.getDouble(ConfigManager::RATE_MONSTER_ATTACK) Por: g_config.getDouble(ConfigManager::RATE_MONSTER_ATTACK) * bonusAttack map.cpp Procure por: #include "game.h" Adicione: #include "configmanager.h" Procure por: extern Game g_game; Adicione abaixo: extern ConfigManager g_config; Procure pela função: bool Map::placeCreature { Adicione logo depois: Monster* monster = creature->getMonster(); if(monster && g_config.getBool(ConfigManager::MONSTER_HAS_LEVEL)) { uint8_t level; if(!monster->getMonsterType()->hideLevel) { if(monster->isSummon()) { std::string value; monster->getMaster()->getStorage((std::string)"monster_level", value); uint8_t intValue = atoi(value.c_str()); if(intValue || value == "0") level = intValue; else level = 1; } else level = monster->level; char buffer [10]; monster->name = monster->getName() + " [" + itoa(level, buffer, 10) + "]"; } } configmanager.h Procure por: MONSTER_SPAWN_WALKBACK, E adicione abaixo: MONSTER_HAS_LEVEL, configmanager.cpp Procure por: m_loaded = true; Adicione um pouco antes: m_confBool[MONSTER_HAS_LEVEL] = getGlobalBool("monsterHasLevel", true); config.lua monsterHasLevel = true Acabou, ufa, né? São muitas modificações para fazer, mas o resultado é garantido e é uma funcionalidade a mais para seu servidor. Como está programado, a cada level, monstros ganham 10% de HP, 1% de dano e 0.5% de defesa. Para configurar level mínimo e máximo, é só adicionar no XML do monstro: <level min="1" max="10"/> E alterar a seu gosto. trunk.r3777 (com Monster Level) Espero que gostem, qualquer erro, só postar no tópico. Grande abraço.1 ponto
-
Olá a todos, venho aqui lhes trazer o script de Zombie Event. Não tenho certeza se estou postando na areá correta, mais caso eu não esteja por favor movam o tópico. Mãos a obra. Zombie Events. Testado em: TFS 0.4 Se quiser testar em outro distro responsabilidade de vocês. Algumas informações sobre ele primeiramente, Quando o evento está começando você terá certos minutos em você para incorporar o teleport antes que desapareça. Quando o teleport desaparece mesmo acontece com zombie spawn após 20 segundos. Zombie iram aparece 1 de cada vez, a cada 20 segundos. Os players que morrerem no evento, serão teleportados para o templo. O vencedor do evento, recebe algumas recompensas e um cale-se dourado com seu nome. Lembrando a areá de evento tem que ser non-pvp para que os possam disputar la. Vamos la. Globalevents/scripts/zombie event.lua local config = {playerCount = 2001, -- Global storage for counting the players left/entered in the eventzombieCount = 2002, -- Global storage for counting the zombies in the eventteleportActionId = 2000, -- Action id of the teleport needed for the movement scriptteleportPosition = {x = 1135, y = 1077, z = 3, stackpos = 1}, -- Where the teleport will be createdteleportToPosition = {x = 1190, y = 1076, z = 7}, -- Where the teleport will take youteleportId = 1387, -- Id of the teleporttimeToStartEvent = 5, -- Minutes, after these minutes the teleport will be removed and the event will be declared startedtimeBetweenSpawns = 20, -- Seconds between each spawn of zombiezombieName = "event zombie", -- Name of the zombie that should be summonedplayersNeededToStartEvent = 5, -- Players needed before the zombies can spawn.-- Should be the same as in the creaturescript!-- The zombies will spawn randomly inside this areafromPosition = {x = 1186, y = 1072, z = 7}, -- top left cornor of the playgroundtoPosition = {x = 1195, y = 1081, z = 7}, -- bottom right cornor of the playground}function onTimer()local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)doItemSetAttribute(tp, "aid", config.teleportActionId)doBroadcastMessage("Zombie event starting in " .. config.timeToStartEvent .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)setGlobalStorageValue(config.playerCount, 0)setGlobalStorageValue(config.zombieCount, 0)addEvent(startEvent, config.timeToStartEvent * 1000 * 60)print(getGlobalStorageValue(2001))endfunction startEvent()local get = getThingfromPos(config.teleportPosition)if get.itemid == config.teleportId thendoRemoveItem(get.uid, 1)endlocal fromp, top = config.fromPosition, config.toPositionif getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent thenaddEvent(spawnZombie, config.timeBetweenSpawns * 1000)doBroadcastMessage("Good luck in the zombie event people! The teleport has closed!", MESSAGE_STATUS_WARNING)for x = fromp.x, top.x dofor y = fromp.y, top.y dofor z = fromp.z, top.z doareapos = {x = x, y = y, z = z, stackpos = 253}getPlayers = getThingfromPos(areapos)if isPlayer(getPlayers.uid) thendoPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. config.timeBetweenSpawns .. " seconds! Good luck!")endendendendelsedoBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)for x = fromp.x, top.x dofor y = fromp.y, top.y dofor z = fromp.z, top.z doareapos = {x = x, y = y, z = z, stackpos = 253}getPlayers = getThingfromPos(areapos)if isPlayer(getPlayers.uid) thendoTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)endendendendendendfunction spawnZombie()if getGlobalStorageValue(config.playerCount) >= 2 thenpos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z)}doSummonCreature(config.zombieName, pos)doSendMagicEffect(pos, CONST_ME_MORTAREA)setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(config.zombieCount) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED)addEvent(spawnZombie, config.timeBetweenSpawns * 1000)endend Movements/scripts/zombie event.lua local config = {playerCount = 2001, -- Global storage for counting the players in the eventmaxPlayers = 15, -- Max players who can participate}function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)if getGlobalStorageValue(config.playerCount) < config.maxPlayers thensetGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)+1)if getGlobalStorageValue(config.playerCount) == config.maxPlayers thendoBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(config.playerCount) .. " players]! The event will soon start.")elsedoBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(config.playerCount) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED)endelseaddEvent(tpBack, 1000, cid, fromPosition)doPlayerSendCancel(cid, "The event is full. There is already " .. config.maxPlayers .. " players participating in the quest.")return falseendprint(getStorage(config.playerCount) .. " Players in the zombie event.")return trueendfunction tpBack(cid, fromPosition)doTeleportThing(cid, fromPosition, true)doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT)end Creaturescripts/scripts/zombie event.lua local config = {playerCount = 2001, -- Global storage for counting the players left/entered in the eventgoblet = 5805, -- id of the gold goblet you'll get when finishing the event.rewards = {2195, 2152, 2160}, -- You will get this + a gold goblet with your name on.-- {moneyId, count, using? 1 for using moneyReward, 0 for not using.}moneyReward = {2160, 10, 1},-- Should be same as in the globalevent!-- The zombies will spawn randomly inside this areafromPosition = {x = 1186, y = 1072, z = 7}, -- top left cornor of the playgroundtoPosition = {x = 1195, y = 1081, z = 7}, -- bottom right cornor of the playground}function onStatsChange(cid, attacker, type, combat, value)if isPlayer(cid) and isMonster(attacker) thenif isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) thenif getGlobalStorageValue(config.playerCount) >= 2 thendoBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED)local corpse = doCreateItem(3058, 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)setGlobalStorageValue(config.playerCount, getGlobalStorageValue(config.playerCount)-1)elseif getGlobalStorageValue(config.playerCount) == 1 thenif isInArea(getPlayerPosition(cid), config.fromPosition, config.toPosition) thendoBroadcastMessage(getPlayerName(cid) .. " won the Zombie event! Congratulations!", MESSAGE_STATUS_WARNING)local goblet = doPlayerAddItem(cid, config.goblet, 1)doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(cid) .. " for winning the Zombie event.")local corpse = doCreateItem(3058, 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)for _,items in ipairs(config.rewards) dodoPlayerAddItem(cid, items, 1)endif config.moneyReward[3] == 1 thendoPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])endendfor x = config.fromPosition.x, config.toPosition.x dofor y = config.fromPosition.y, config.toPosition.y dofor z = config.fromPosition.z, config.toPosition.z doareapos = {x = x, y = y, z = z, stackpos = 253}getMonsters = getThingfromPos(areapos)if isMonster(getMonsters.uid) thendoRemoveCreature(getMonsters.uid)endendendendendreturn falseendendreturn trueend Creaturescripts/scripts/login.lua poste a seguinte função. registerCreatureEvent(cid, "zombieevent") Globalevents.xml insira: <globalevent name="zombieevent" time="15:00" event="script" value="zombie event.lua"/> Movements.xml insira: <movevent type="StepIn" actionid="2000" event="script" value="zombie event.lua"/> Creaturescripts.xml insira: <event type="statschange" name="zombieevent" event="script" value="zombie event.lua"/> Esta parte e de grande importância. Na pasta Monster crie um arquivo chamado Event zombie.xml e insira isto dentro: <?xml version="1.0" encoding="UTF-8"?><monster name="Event Zombie" nameDescription="an event zombie" 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="-350" max="-350"/></attacks><defenses armor="15" defense="10"/><immunities><immunity paralyze="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> Depois em monstros.xml adicione a seguinte linha: <monster name="Event zombie" file="event zombie.xml"/> Por pedidos vai ai uma pagina para seu website. Vá ate "C:/xampp/htdcos/" crie um arquivo chamado Zombieevent.php dentro coloque isso. <?PHP$main_content .= '<h4 style="" id="pt"><br><center><h2><b> Zombie Event</b></h2></center><br><br><center><object height="350" width="425"><imgsrc="http://i52.tinypic.com/wjdth1.jpg" height="700"width="525"></object></center><br><br><br> </h4><b></b><center><b>O que é o Zombie Event?</b><br><br>É um evento que acontece todos os dias as 12:00, 18:30 e 21:30 hr noservidor.<br><br><br><b>Como funciona?<br></b><br>Quando estiver na hora irá abrir um teleport no mesmo lugar onde aparece oteleport da WoE, basta você entrar e aguardar o tempo para inicio do Evento,o objetivo do jogo é correr dos zombies, a cada 20 segundos irá nascer um novo emalguma área randomica, você deve correr pois se eles te tocarem vocêautomaticamente é retirado do evento e volta para o seu temple.O ultimo jogador que sobrar vivo vence o evento.<br><br><br><b>Quais são os prêmios?<br></b><br>O ganhador irá ganhar<b> 100k</b>, uma <b>Boots of Haste</b> e um <b>Globet com onome dele</b>.<br><br></center>';?> Depois abra o index.php em "C:/xampp/htdcos/". Depois de: case "buypoints":$topic = "Buy Points";$subtopic = "buypoints";include("buypoints.php");break; Cole isso: case "zombieevent":$topic = "Zombie event";$subtopic = "zombieevent";include("zombieevent.php");break; Agora vá em "C:/xampp/htdcos/layout/tibiacom/" abra o arquivo layout.php. Depois de: <a href='?subtopic=highscores'><div id='submenu_highscores' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'><div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div><div id='ActiveSubmenuItemIcon_highscores' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div><div class='SubmenuitemLabel'>Highscores</div><div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div></div></a> Cole isso: <a href='?subtopic=zombieevent'><div id='submenu_zombieevent' class='Submenuitem'onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'><div class='LeftChain' style='background-image:url(<?PHP echo $layout_name;?>/images/general/chain.gif);'></div><div id='ActiveSubmenuItemIcon_highscores' class='ActiveSubmenuItemIcon'style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div><div class='SubmenuitemLabel'>Zombie Event</div><div class='RightChain' style='background-image:url(<?PHP echo $layout_name;?>/images/general/chain.gif);'></div></div></a> Agora clique aqui e confira seu zombie events. Aqui vocês podem baixar o mapa para se usar com este evento: Download: Click aqui Scan: Clique aqui Prontinho espero que gostem. Créditos: Gostou? REP+ Arrumado Monster. Site Adicionado.1 ponto
