Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 08/07/10 em todas áreas
-
Passando Um Otserv Para 8.60
lucastiond reagiu a comedinhasss por um tópico no fórum
Fala ae galerinha do xtibia... Bom vejo que muitos programadores ainda estão em dúvida para passar o seu ot para 8.6 ... Bom então estou fazendo um tutorial... Testado em tfs 0.3.6pl1 Sources: Em House.cpp: Procure: std::string metachars = ".[{}()\\+|^{:content:}quot;; Substitua por: std::string metachars = ".[{}()\\+|^$*?"; Procure: if(metachars.find(*it) != std::string::npos) outExp += "\\"; Subistitua por: if(metachars.find(*it) != std::string::npos) outExp += ""; Procure: replaceString(outExp, "*", ".*"); replaceString(outExp, "?", ".?"); Subistitua por: replaceString(outExp, "*", ""); replaceString(outExp, "?", ""); Em resources.h: Procure: #define CLIENT_VERSION_MIN 854 #define CLIENT_VERSION_MAX 854 #define CLIENT_VERSION_STRING "Only clients with protocol 8.54 are allowed!" #define STATUS_SERVER_NAME "TheForgottenServer" #define STATUS_SERVER_VERSION "0.3.6" #define STATUS_SERVER_CODENAME "Crying Damson" #define STATUS_SERVER_PROTOCOL "8.54" Substitua por: #define CLIENT_VERSION_MIN 860 #define CLIENT_VERSION_MAX 860 #define CLIENT_VERSION_STRING "Only clients with protocol 8.60 are allowed!" #define STATUS_SERVER_NAME "TheForgottenServer" #define STATUS_SERVER_VERSION "0.3.6" #define STATUS_SERVER_CODENAME "Crying Damson" #define STATUS_SERVER_PROTOCOL "8.60" Em itemloader.h: Procure: CLIENT_VERSION_854 = 16 Substitua e adicione por: CLIENT_VERSION_854 = 16, CLIENT_VERSION_855 = 17, CLIENT_VERSION_856 = 18, CLIENT_VERSION_857 = 19, CLIENT_VERSION_860 = 20 Em items.cpp: Procure: else if(Items::dwMinorVersion != CLIENT_VERSION_854) Substitua e adicione por: else if(Items::dwMinorVersion != 19) Em protocolgame.cpp: Procure: void ProtocolGame::parseAttack(NetworkMessage& msg) { uint32_t creatureId = msg.GetU32(); addGameTask(&Game::playerSetAttackedCreature, player->getID(), creatureId); } Substitua por: void ProtocolGame::parseAttack(NetworkMessage& msg) { uint32_t creatureId = msg.GetU32(); msg.GetU32(); msg.GetU32(); addGameTask(&Game::playerSetAttackedCreature, player->getID(), creatureId); } Também procure: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0xA3); } } Substitua por: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0xA3); msg->AddU32(0); } } Em spells.cpp (somente em spells.cpp) Procure: g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getCharges()) - 1)); Substitua por: g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getItemCount()) - 1)); Em tools.cpp: Procure: {"insects", MAGIC_EFFECT_INSECTS} Substitua por: {"insects", MAGIC_EFFECT_INSECTS}, {"dragonhead", MAGIC_EFFECT_DRAGONHEAD} Em const.h: Procure: MAGIC_EFFECT_INSECTS = 0x44, //68 MAGIC_EFFECT_LAST = MAGIC_EFFECT_INSECTS, Substitua por: MAGIC_EFFECT_INSECTS = 0x44, //68, MAGIC_EFFECT_DRAGONHEAD = 0x45, //69 MAGIC_EFFECT_LAST = MAGIC_EFFECT_DRAGONHEAD, Em game.cpp: Procure: void Game::showHotkeyUseMessage(Player* player, Item* item) { int32_t subType = -1; if(item->hasSubType() && !item->hasCharges()) subType = item->getSubType(); const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), subType, false); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } Substitua por: void Game::showHotkeyUseMessage(Player* player, Item* item) { const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), -1); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } Em npc.cpp: Procure: li.itemId = intValue; Embaixo adicione: const ItemType& it = Item::items[li.itemId]; Também procure: if(readXMLInteger(tmpNode, "subtype", intValue)) li.subType = intValue; Embaixo adicione: else { if(it.stackable) li.subType = 1; else if(it.isFluidContainer() || it.isSplash()) li.subType = 0; } Em item.cpp: Procure: s << "("; if(!it.runeSpellName.empty()) s << "\"" << it.runeSpellName << "\", "; s << "Charges:" << subType <<")"; Embaixo adicione: if(!it.runeSpellName.empty()) s << "(\"" << it.runeSpellName << "\")"; Em luascript.cpp: Procure por: //getCreatureHealth(cid) lua_register(m_luaState, "getCreatureHealth", LuaScriptInterface::luaGetCreatureHealth); Embaixo adicione: //getItemParent(uid) lua_register(m_luaState, "getItemParent", LuaScriptInterface::luaGetItemParent); Também procure por: int32_t LuaScriptInterface::luaGetCreatureHealth(lua_State* L) { //getCreatureHealth(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushnumber(L, creature->getHealth()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Substitua por: int32_t LuaScriptInterface::luaGetItemParent(lua_State* L) { //getItemParent(uid) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushnil(L); return 1; } Item* container = item->getParent()->getItem(); pushThing(L, container, env->addThing(container)); return 1; } Em luascript.h: Procure por: static int32_t luaDoRemoveItem(lua_State* L); Embaixo adicione: static int32_t luaGetItemParent(lua_State* L); Pasta Data: Na pasta data\actions\scripts\liquids\potions.lua: Delete tudo e adicione: local config = { removeOnUse = "no", usableOnTarget = "yes", -- can be used on target? (fe. healing friend) splashable = "no", realAnimation = "no", -- make text effect visible only for players in range 1x1 healthMultiplier = 1.0, manaMultiplier = 1.0 } config.removeOnUse = getBooleanFromString(config.removeOnUse) config.usableOnTarget = getBooleanFromString(config.usableOnTarget) config.splashable = getBooleanFromString(config.splashable) config.realAnimation = getBooleanFromString(config.realAnimation) local POTIONS = { [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion [7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion [7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion [7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion [8473] = {empty = 7635, splash = 2, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion [7620] = {empty = 7636, splash = 7, mana = {70, 130}}, -- mana potion [7589] = {empty = 7634, splash = 7, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion [7590] = {empty = 7635, splash = 7, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion [8472] = {empty = 7635, splash = 3, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion } local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) local potion = POTIONS[item.itemid] if(not potion) then return false end if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then if(not config.splashable) then return false end if(toPosition.x == CONTAINER_POSITION) then toPosition = getThingPos(item.uid) end doDecayItem(doCreateItem(2016, potion.splash, toPosition)) doTransformItem(item.uid, potion.empty) return true end if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1) return true end local health = potion.health if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then return false end local mana = potion.mana if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then return false end doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) if(not realAnimation) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) else for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do if(isPlayer(tid)) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid) end end end doAddCondition(cid, exhaust) local v = getItemParent(item.uid) if(not potion.empty or config.removeOnUse) then return true end if fromPosition.x == CONTAINER_POSITION then for _, slot in ipairs({CONST_SLOT_LEFT, CONST_SLOT_RIGHT, CONST_SLOT_AMMO}) do local tmp = getPlayerSlotItem(cid, slot) if tmp.itemid == potion.empty and tmp.type < 100 then doChangeTypeItem(item.uid, item.type - 1) return getPlayerFreeCap(cid) >= getItemInfo(potion.empty).weight and doChangeTypeItem(tmp.uid, tmp.type + 1) or doPlayerAddItem(cid, potion.empty, 1) end end else doChangeTypeItem(item.uid, item.type - 1) doCreateItem(potion.empty, 1, fromPosition) return true end if v.uid == 0 then if item.type == 1 and isInArray({CONST_SLOT_LEFT, CONST_SLOT_RIGHT, CONST_SLOT_AMMO}, fromPosition.y) then doTransformItem(item.uid, potion.empty) else -- serversided autostack should take care of this doPlayerAddItem(cid, potion.empty, 1) doChangeTypeItem(item.uid, item.type - 1) end return true else doChangeTypeItem(item.uid, item.type - 1) local size = getContainerSize(v.uid) for i = 0, size-1 do local tmp = getContainerItem(v.uid, i) if tmp.itemid == potion.empty and tmp.type < 100 then return getPlayerFreeCap(cid) >= getItemInfo(potion.empty).weight and doChangeTypeItem(tmp.uid, tmp.type + 1) or doPlayerAddItem(cid, potion.empty, 1) end end if getContainerSize(v.uid) < getContainerCap(v.uid) then doAddContainerItem(v.uid, potion.empty) else doPlayerAddItem(cid, potion.empty, 1) end end return true end Na pasta data\lib\000-constant.lua: Procure maleOutfits = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325, 328, 335} femaleOutfits = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324, 329, 336} Subistitua por: maleOutfits = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325, 328, 335, 367} femaleOutfits = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324, 329, 336, 366} Em Data\xml\outfit.xml: Delete tudo e Adicione <?xml version="1.0"?> <outfits> <outfit id="1"> <list gender="0" lookType="136" name="Citizen"/> <list gender="1" lookType="128" name="Citizen"/> </outfit> <outfit id="2"> <list gender="0" lookType="137" name="Hunter"/> <list gender="1" lookType="129" name="Hunter"/> </outfit> <outfit id="3"> <list gender="0" lookType="138" name="Mage"/> <list gender="1" lookType="130" name="Mage"/> </outfit> <outfit id="4"> <list gender="0" lookType="139" name="Knight"/> <list gender="1" lookType="131" name="Knight"/> </outfit> <outfit id="5" premium="yes"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> <outfit id="6" premium="yes"> <list gender="0" lookType="141" name="Summoner"/> <list gender="1" lookType="133" name="Summoner"/> </outfit> <outfit id="7" premium="yes"> <list gender="0" lookType="142" name="Warrior"/> <list gender="1" lookType="134" name="Warrior"/> </outfit> <outfit id="8" premium="yes"> <list gender="0" lookType="147" name="Barbarian"/> <list gender="1" lookType="143" name="Barbarian"/> </outfit> <outfit id="9" premium="yes"> <list gender="0" lookType="148" name="Druid"/> <list gender="1" lookType="144" name="Druid"/> </outfit> <outfit id="10" premium="yes"> <list gender="0" lookType="149" name="Wizard"/> <list gender="1" lookType="145" name="Wizard"/> </outfit> <outfit id="11" premium="yes"> <list gender="0" lookType="150" name="Oriental"/> <list gender="1" lookType="146" name="Oriental"/> </outfit> <outfit id="12" premium="yes"> <list gender="0" lookType="155" name="Pirate"/> <list gender="1" lookType="151" name="Pirate"/> </outfit> <outfit id="13" premium="yes"> <list gender="0" lookType="156" name="Assassin"/> <list gender="1" lookType="152" name="Assassin"/> </outfit> <outfit id="14" premium="yes"> <list gender="0" lookType="157" name="Beggar"/> <list gender="1" lookType="153" name="Beggar"/> </outfit> <outfit id="15" premium="yes"> <list gender="0" lookType="158" name="Shaman"/> <list gender="1" lookType="154" name="Shaman"/> </outfit> <outfit id="16" premium="yes"> <list gender="0" lookType="252" name="Norsewoman"/> <list gender="1" lookType="251" name="Norseman"/> </outfit> <outfit id="17" premium="yes"> <list gender="0" lookType="269" name="Nightmare"/> <list gender="1" lookType="268" name="Nightmare"/> </outfit> <outfit id="18" premium="yes"> <list gender="0" lookType="270" name="Jester"/> <list gender="1" lookType="273" name="Jester"/> </outfit> <outfit id="19" premium="yes"> <list gender="0" lookType="279" name="Brotherhood"/> <list gender="1" lookType="278" name="Brotherhood"/> </outfit> <outfit id="20" premium="yes"> <list gender="0" lookType="288" name="Demonhunter"/> <list gender="1" lookType="289" name="Demonhunter"/> </outfit> <outfit id="21" premium="yes"> <list gender="0" lookType="324" name="Yalaharian"/> <list gender="1" lookType="325" name="Yalaharian"/> </outfit> <outfit id="22" premium="yes"> <list gender="0" lookType="336" name="Warmaster"/> <list gender="1" lookType="335" name="Warmaster"/> </outfit> <outfit id="23" default="0"> <list gender="0" lookType="329" name="Wife"/> <list gender="1" lookType="328" name="Husband"/> </outfit> <outfit id="24" premium="yes"> <list gender="0" lookType="366" name="Wayfarer"/> <list gender="1" lookType="367" name="Wayfarer"/> </outfit> </outfits> Em data\items\items.xml: Delete onde estão configurada as runas a seguinte linha (Em Todas) <attribute key="charges" value="x" /> X: Qualquer numero Arquivos para procurar e repassar: Bom gente eu não gravei como era o antigo desse então procure uma frase e repasse Em container.cpp: Procure e repasse: Cylinder* Container::__queryDestination(int32_t& index, const Thing* thing, Item** destItem, uint32_t&) { if(index == 254 /*move up*/) { index = INDEX_WHEREEVER; *destItem = NULL; Container* parentContainer = dynamic_cast<Container*>(getParent()); if(parentContainer) return parentContainer; return this; } else if(index == 255 /*add wherever*/){ index = INDEX_WHEREEVER; *destItem = NULL; } else if(index >= (int32_t)capacity()){ /* if you have a container, maximize it to show all 20 slots then you open a bag that is inside the container you will have a bag with 8 slots and a "grey" area where the other 12 slots where from the container if you drop the item on that grey area the client calculates the slot position as if the bag has 20 slots */ index = INDEX_WHEREEVER; *destItem = NULL; } const Item* item = thing->getItem(); if(item == NULL){ return this; } if(item->isStackable()){ if(item->getParent() != this){ //try find a suitable item to stack with uint32_t n = 0; for(ItemList::iterator cit = itemlist.begin(); cit != itemlist.end(); ++cit){ if((*cit) != item && (*cit)->getID() == item->getID() && (*cit)->getItemCount() < 100){ *destItem = (*cit); index = n; return this; } ++n; } } } if(index != INDEX_WHEREEVER){ Thing* destThing = __getThing(index); if(destThing) *destItem = destThing->getItem(); Cylinder* subCylinder = dynamic_cast<Cylinder*>(*destItem); if(subCylinder){ index = INDEX_WHEREEVER; *destItem = NULL; return subCylinder; } } return this; } Em item.cpp: Procure e repasse: void Item::setDefaultSubtype() { setItemCount(1); const ItemType& it = items[id]; if(it.charges) setCharges(it.charges); } Em player.cpp: Procure e repasse: Cylinder* Player::__queryDestination(int32_t& index, const Thing* thing, Item** destItem, uint32_t& flags) { if(index == 0 /*drop to capacity window*/ || index == INDEX_WHEREEVER){ *destItem = NULL; const Item* item = thing->getItem(); if(item == NULL){ return this; } //find an appropiate slot std::list<Container*> containerList; for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){ Item* inventoryItem = inventory[i]; if(inventoryItem == tradeItem){ continue; } if(inventoryItem == tradeItem){ continue; } if(inventoryItem){ //try find an already existing item to stack with if(inventoryItem != item && item->isStackable() && inventoryItem->getID() == item->getID() && inventoryItem->getItemCount() < 100){ *destItem = inventoryItem; index = i; return this; } //check sub-containers else if(Container* subContainer = inventoryItem->getContainer()){ Cylinder* tmpCylinder = NULL; int32_t tmpIndex = INDEX_WHEREEVER; Item* tmpDestItem = NULL; tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags); if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){ index = tmpIndex; *destItem = tmpDestItem; return tmpCylinder; } containerList.push_back(subContainer); } } //empty slot else if(__queryAdd(i, item, item->getItemCount(), flags) == RET_NOERROR){ index = i; *destItem = NULL; return this; } } //check deeper in the containers for(std::list<Container*>::iterator it = containerList.begin(); it != containerList.end(); ++it){ for(ContainerIterator iit = (*it)->begin(); iit != (*it)->end(); ++iit){ if(Container* subContainer = (*iit)->getContainer()){ if(subContainer == tradeItem){ continue; } Cylinder* tmpCylinder = NULL; int32_t tmpIndex = INDEX_WHEREEVER; Item* tmpDestItem = NULL; tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags); if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){ index = tmpIndex; *destItem = tmpDestItem; return tmpCylinder; } } } } return this; } Thing* destThing = __getThing(index); if(destThing) *destItem = destThing->getItem(); Cylinder* subCylinder = dynamic_cast<Cylinder*>(destThing); if(subCylinder){ index = INDEX_WHEREEVER; *destItem = NULL; return subCylinder; } else return this; } Downloads: Items.otb (8.6): Clique Aqui Items.xml (8.6): Clique aqui Creditos á: darkhaos - Sources Tauku - Sources BlueSilver - Sources Doidin - Data Cykotitan (O do xtibia) - Sources/Data Eu - Data/Sources Outros - Data/Sources Tutorial atualizado: 24/09/2010 Agora Funciona 99,9% perfeito (deve estar faltando um detalhe ou outro) Recomendo fazer tudo o que está mandando para não ocorrer erros1 ponto -
Fala Éks Tibianos... Neste tutorial veremos como criar letras com aspecto de gelatina para o photoshop. • Letras de Gelatina • 01. Pressione Ctrl+N par criar uma novo documento, defina um tamanho qualquer, modo de cor em RGB com 72 dpi's, pressione Ok, pressione a letra G do teclado para selecionar a Gradient Tool, defina o gradiente com as cores #e1ff01 e #95ec00, escolha o modo Radial e aplique o gradiente como na foto abaixo. 02. Pressione Ctrl+Shift+Alt+N para criar uma nova layer, escolha a cor #F3FF8D, pressione a letra B do teclado para selecionar a Brush Tool, escolha um brush de tamanho médio e pontas duras, variandos o tamanho crie diversos pontos como na foto abaixo. 03. Agora vá em Filter> Blur> Gaussian Blur, defina os valores abaixo e pressione Ok. 04. Pressione Ctrl+J para duplicar a layer, reduza a opacidade da layer para 20%, pressione a letra V do teclado para selecionar a Move Tool, mova a layer para baixo e depois cerca de 20 pixels para a esquerda. 05. Pressione a letra D do teclado para resetar as cores de Foreground e Background para preto e branco, pressione a letra T do teclado para selecionar a Horizontal Type Tool e escreva um texto qualquer como na foto abaixo. 06. Defina o Fill da layer em 0%, vá em Layer> Layer Style> Drop Shadow, Layer> Layer Style> Gradient Overlay, Layer> Layer Style> Stroke e defina os valores abaixo. 07. Sua palavra deverá ficar como a da foto abaixo. 08. Agora pressione Ctrl+J para duplicar a layer, clique com o botão direito do mouse sobre a layer e escolha a opção Clear Layer Styles, vá em Layer> Layer Style> Bevel and Emboss e defina os valores abaixo. 09. Sua imagem deverá ficar como a da foto abaixo. 10. (Opcional) Pressione a letra T do teclado para selecionar a Horizontal Type Tool novamente e escreva outra palavra, aplique os mesmos procedimentos usados anteriormente mas desta vez mude a cor do gradiente usado para vermelho. 11. Com a tecla Ctrl pressionada clique sobre a miniatura da layer das duas layers de texto para ativar a seleção ao redor das palavras. 12. Pressione a letra L do teclado para selecionar a Lasso Tool, marque a opção Subtract from Selection, crie uma seleção nas partes que você deseja eliminar da seleção e vá moldando de acordo como desejar, tente deixar a seleção como na foto abaixo. 13. Pressione Ctrl+Shift+Alt+N para criar uma nova layer, pressione a letra D do teclado para resetar as cores de Foreground e Background para preto e branco, pressione a letra X do teclado para alternar as cores de Foreground e Background, sua cor de Foreground deve ser a branca, pressione Alt+Backspace (a tecla acima do Enter) ou pressione a letra G do teclado para selecionar a Paint Bucket Tool e clique dentro da seleção para preencher com a seleção com a cor branca, defina a opacidade da layer em 20% e no final sua palavra estará como a da foto abaixo. Créditos luisfe23 TutoriaisPhotoshop Stunningmesh Gostou? REP+++ Abraços e até o próximo tutorial.1 ponto
-
Aprendendo A Modificar Extensions
RulezKnight reagiu a Koddy por um tópico no fórum
Saudações XTibianos! Bom, depois de muitos pedirem, insistirem, e beijarem meus pés; cá estou eu. Mas não para lhe dar uma extension de mão beijada, e sim para lhe ensinar a como fazer a sua própria. É isso mesmo! Agora você vai aprender a customizar seu Palette, criar um novo Palette; enfim, colocar os atalhos para os itens que você quiser, onde você quiser e na ordem que você quiser. Sem contar também que agora os novos itens da versão 8.6 poderão ser juntados aos diferentes pisos/paredes para facilitar na hora de mappear. Espero que ajude muita gente, e que todos possam entender com clareza. Lembrando que eu ainda não aprendi todos as funções de cada palavra, mas independente delas, consegui fazer o que quis, então vamos lá (se conserguir fazer de um jeito melhor, fique a vontade para fazer, e se quiser poste aqui sua sugestão). Aprendendo a modificar extensions Índice/Partes: •Introdução •Alterando posições de itens no Palette •Criando seu próprio Piso, com direito a borda •Criando sua própria parede, com todos os 'quatro cantos' •Criando Doodads 'Espaçosos' (estilo Fontes) •Criando Doodads 'Aleatórios' (estilo Flores) •Frequently Asked Questions - FAQ Introdução A. Alterando posições de itens no Palette B. Criando seu próprio Piso, com direito a borda C. Criando sua própria parede, com todos os 'quatro cantos' D. Criando Doodads 'Espaçosos' (estilo Fontes) E. Criando Doodads 'Aleatórios' (estilo Flores) --- Obs: Não sabe o que significa uma opção? Tente alterá-la e veja no que dá (mas por favor, não esqueça do 'BackUp'). (: --- Dicionário: 'AB' = Auto Border --- Frequently Asked Questions - FAQ (Leia antes de postar uma Dúvida): --- No mais, desejo boa sorte para o que quer que você faça modificando suas "Extensions". Ensinei tudo que eu sei, e espero continuar aprendendo para que eu possa compartilhar com vocês. Acho que este foi o tutorial mais cansativo longo (que levou alguns dias) que já fiz até hoje. Espero que tenham gostado, e por favor, agradeçam para que eu possa continuar fazendo meus tutoriais ver que meu esforço valeu a pena. Obrigado por lerem até aqui. Não deixem de continuar visitando o XTibia. Atenciosamente, Koddy.1 ponto -
[8.60] War On Rookgaard 2 Team
ibne reagiu a Toridox4ever por um tópico no fórum
Rookwar - V.0.2 Based on TFS 0.3.6 Client 8.60 2 Teams Red Team Green Team Content: Creating your own accounts 1 / 1, You begin to level 100, Entering receives your skills, you do not lose items to die only in Red and black skull, By killing a player receives 500gps, Automatic broadcast, Map Rookgaard (edited), Red team temple, Green team temple, Global Temple, Trainers, Depot, Shops. Depot, Shops. Npcs: Npc Skuller sell Sacred skull for remove skulls and frags, Npc Varkhal sell first and secconds addons, Npc Amuletero sell amulets, Npc Donal sell food, Npc Pancho the seller of loot. Scripts: mods/remove_skulls.xml, creaturescripts/deathBroadcast.lua, creaturescripts/onkill.lua, creaturescripts/skills.lua, creaturescripts/onlogout.lua, creaturescripts/firstitems.lua, movements/Green.lua, movements/Red.lua. Screens Shots: Account god: Acc: god Pass: god Download::up: 4Shared :up: Scan Rook: :up: Virus Total :up: Download Dlls: :up: 4Shared :up: Creditos: Morrison (ajudante) Toridox4ever Pela Editação ! Luiziin@reggae.com (Msn) Este Poste de Ajudo ? Aperte no1 ponto -
A partir de agora não é mais Real Server e sim We Do OTS, para você conferir mais clique aqui. Até mais, Doidin.1 ponto
-
Ml Ring, Agora Em Seu Ot!
Vodkart reagiu a victorhugomartins28 por um tópico no fórum
Esté script é muito louco, agora você terá um ml ring em seu ot, uma coisa bem diferente, é um bom script pra você por pra vender por cash. Vamos lá: Va em arquivo items.xml(data/item/item.xml) e procure a id "2123" você encontrará algo assim: Subistitua por: Agora procure o id "6093", e você irá encontrar algo assim: Subistitua por: Salve e feche. Explicando: em vermelho é o tanto de ml que vai dar quando estiver usando o anel, em laranja, é o tanto de tempo que vai ter o anel em segundos, no caso 480 segundos, e se você quiser deixar seu ml ring infinito, é só tirar as linhas em verde. Agora terminamos de fazer as mudanças, vamos para o próximo passo tem que adicionar as tags em data/movements/movements.xml: E esse é o fim do script.Aqui no meu ot funcionou certinho, se não funcionou no seu, mande uma mensagem de toque. xD OBS: Não se esqueça de tirar o item dos monstros que os dropam.^^ ML RING SEM EQUIPAR: ML RING EQUIPADO:1 ponto -
1 ponto
-
Registrando sua Conta e Algumas Dicas de Cuidado Bom, continuando com a “saga” de tutoriais a pedido do Pain (Carlos Pain). Hoje irei ensinar vocês a registrarem sua conta. Esse registro irá manter uma maior segurança e proteção para sua conta. Além disso, ele disponibilizará uma Recovery Key (para o português, Chave de Recuperação) que você poderá usa-la caso você simplesmente esqueça/perca seus dados/senhas, ou então o famoso “hacked”, que acontece com descuidos do próprio jogador, usando programas ilegais ou então passando senhas para outras pessoas, entre outros. Então agora chega de “blá, blá, blá” e vamos ao tutorial. Para registrar sua conta, você precisa acessar o site principal, que é www.tibia.com, a seguir você verá uma página como esta da imagem: Agora você terá que clicar no “Login” (circulado em vermelho), que se encontra a esquerda da página. Depois de clicar, irá carregar uma nova página como a seguinte: Ok, agora você terá que adicionar seus dados ali, primeiro o Account Name (Nome da Conta) e por segundo Password (Senha). Depois de adicionado você terá que clicar em submit (submeter) e então abrirá a página da sua conta, com informações da mesma. Então você clica no Regiter Account (Registrar a Conta) que está circulado em vermelho. Agora, carregará outra página com o seguinte conteúdo: Que significa: Agora, você tem que preencher os dados corretamente ali, abaixo segue apenas um exemplo para modelo, onde você no lugar do que foi usado terá que usar suas informações: Depois de preencher com suas informações e clicar no Continue (Continuar), carregará uma nova página, observe a imagem: Que significa: E agora para finalizar o Registro, você tem que colocar sua senha ali no espaço em branco, como mostra a última imagem e clicar em Submit (Submeter), então carregará uma nova página com a sua Chave de Recuperação, ANOTE EM ALGUM LUGAR SEGURO SUA CHAVE DE RECUPERAÇÃO, POIS SERÁ DE MUITA IMPORTÂNCIA PARA A SEGURANÇA E PROTEÇÃO DE SUA CONTA. Dicas para prevenir-se Para prevenir-se de que alguém entre em sua conta e a roube, nunca dê suas senhas para ninguém, não importa quem que seja ou o porquê. Outra dica é que você tenha absoluta certeza de que você seja o único visitante do email de cadastro. Acontece também do uso de programas ilegais, que podem vir com vírus e outras coisas indesejadas, que registram os dados digitados para entrar no jogo e as enviam para o Hacker. Existem maneiras como quando você está jogando bem tranquilo e de repente aparece uma mensagem privada com um link semelhante ao oficial, prometendo itens, dizendo que você deve entrar para não perder a conta, entre outras, nunca entre... O único site que você deve entrar com sua senha é o oficial que é o www.tibia.com. Outros cuidados que se devem ter são em LAN Houses, semelhantes ou então se o computador não é seu próprio, pois você não sabe os programas/arquivos que estão instalados, se são maliciosos ou não, se são perigosos ou não, e que podem roubar seus dados assim que digitados. Cuidando do seu computador agora, é para ter muito cuidado nos programas baixados/instalados no seu computador, nada deve ser baixado além do cliente oficial que se pode conseguir no site oficial ou então de algum dos fansites de suportes. Atualize sempre seu anti-vírus e/ou anti-malware! Tutorial feito por mim, especialmente para o XTibia.1 ponto
-
Pedra Que Teleporta Conforme Seu Lvl E Voc
Vodkart reagiu a victorhugomartins28 por um tópico no fórum
Nome: Pedra que teleporta conforme seu lvl e voc Autor: Morvy Servidor testado: tfs 0.3.5 (8.5) Comentario: apos você usar uma pedra, ou uma estatua, ela ira checar seu lvl, e sua voc para ativa-la.[/code] crie um arquivo chamado pedratel.lua em ...\data\actions\scripts\ function onUse(cid, item, frompos, item2, topos) local teleport = {x=160, y=57, z=7} local level = getPlayerLevel(cid) local pos = getCreaturePosition(cid) local reqvoc = getPlayerVocation(cid) if item.itemid == 4842 then if reqvoc == 5 or reqvoc == 6 or reqvoc == 7 or reqvoc == 8 then if level >= 250 then doTeleportThing(cid,teleport) doSendMagicEffect(topos,12) doRemoveItem(item.uid,1) doPlayerSendTextMessage(cid,22,"Você foi teleportado para o templo.") else doPlayerSendTextMessage(cid,22,'Somente lvl 250 podem usar a pedra.') end else doPlayerSendTextMessage(cid,22,'Somente promotions pode usar a pedra.') end end return TRUE end Explicando: {x=160, y=57, z=7} --> É aonde o player vai ser teleportado. 4842 --> É o id do item a ser usado. 5 or reqvoc == 6 or reqvoc == 7 or reqvoc == 8 then --> As vocações que poderá usar. 250 --> level que poderá usar. doRemoveItem(item.uid,1) --> não retire isso, ao menos que deseje deixa a "pedra de teleport" infinita. Agora tag em ...\data\actions\actions.xml <action itemid="4842" script="pedratel.lua" /> id: 4842 <-- eu acho que esse id deve ser uma estátua, meu ot da com uns id diferente. Resolvi começar a visitar este forum também de otserv, meu primeiro post, e logo to postando mais1 ponto -
Erro De Character [Gesior 0.3.6]
Henrique Moura reagiu a tyuahoi por um tópico no fórum
Duvida Senada. Topico Reportado.1 ponto -
[Official] The Diamond Server 1.0.6 Beta
sharematrix reagiu a fsg por um tópico no fórum
Muito bom, simplesmente Perfeito. REP+... Abraços.1 ponto -
Comando !buyvip (Plz Gente)
Henrique Moura reagiu a Vodkart por uma questão
isso é em talkactions/script1 ponto -
Problemas Rme
Temperance reagiu a Exseven por uma questão
ja tentasse usar o revo unistaller ?? , é um dos melhores desintaladores ... tipo, o RME deve ter dado algum erro e uma desintalação simples as vezes não funciona ... entra no baixaki, faz o download do revo uninstaller e remove o RME, quando tu tiver desinstalando ñ tenha medo de sair marcando tudo pois a intenção é remover ele todo (até aquelas sobrinhas que os programas dexam no registro do windows) , se num der certo ai ... ai agente vÊ abrass flw!1 ponto -
jesteraddon.lua function onSay(cid, words, param, channel) local cfg = { ["first nightmare addon"] = { outfit = { male = 273, female = 270, addon = 1, storage = 11018 }, items = { {9693,1} } }, ["second nightmare addon"] = { outfit = { male = 273, female = 270, addon = 2, storage = 11019 }, items = { {9693,1} } } } local v, removeItems = cfg[param], 0, 0 if(param == "") then doPlayerSendCancel(cid, "Command requires param.") return TRUE end if (not isPremium(cid)) then doPlayerSendCancel(cid, "Você nao tem premium account.") return TRUE end if(getPlayerStorageValue(cid, v.outfit.storage) == -1) then for i = 1, #v.items do if(getPlayerItemCount(cid, v.items[i][1]) >= v.items[i][2]) then removeItems = removeItems+1 end end if(removeItems == #v.items) then if(getPlayerSex(cid) == 1) then doPlayerAddOutfit(cid, v.outfit.male, v.outfit.addon) elseif(getPlayerSex(cid) == 0) then doPlayerAddOutfit(cid, v.outfit.female, v.outfit.addon) end for i = 1, #v.items do doPlayerRemoveItem(cid, v.items[i][1], v.items[i][2]) end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu uma nova outfit!") doSendMagicEffect(getThingPos(cid), CONST_ME_FIREWORK_YELLOW) setPlayerStorageValue(cid, v.outfit.storage, 1) else for i = 1, #v.items do doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "você precisa " .. v.items[i][2] .. "x " .. getItemNameById(v.items[i][1]) .. " para comprar a outfit.") end end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Você ja tem está outfit.") end return TRUE end talkactions.xml <talkaction words="!buy" event="script" value="jesteraddon.lua"/> comandos:1 ponto