-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
<?xml version="1.0" encoding="UTF-8"?> <npc name="NPC" script="default.lua" walkinterval="2000" floorchange="0"> <health now="150" max="150"/> <look type="128" head="0" body="74" legs="25" feet="107"/> <parameters> <parameter key="module_shop" value="1"/> <parameter key="message_greet" value="Hello |PLAYERNAME|. I buy and sell items, just say {trade}."/> <parameter key="shop_buyable" value="axe,2386,20;battle axe,2378,235;battle hammer,2417,350;bone sword,2450,75;brass armor,2465,450;brass helmet,2460,120;brass legs,2478,195;brass shield,2511,65;carlin sword,2395,473;chain armor,2464,200;chain helmet,2458,52;chain legs,2648,80;club,2382,5;coat,2651,8;crowbar,2416,260;dagger,2379,5;doublet,2485,16;dwarven shield,2525,500;hand axe,2380,8;iron helmet,2459,390;jacket,2650,12;leather armor,2467,35;leather boots,2643,10;leather helmet,2461,12;leather legs,2649,10;longsword,2397,160;mace,2398,90;morning star,2394,430;plate armor,2463,1200;plate shield,2510,125;rapier,2384,15;sabre,2385,35;scale armor,2483,260;short sword,2406,26;sickle,2405,7;soldier helmet,2481,110;spike sword,2383,8000;steel helmet,2457,580;steel shield,2509,240;studded armor,2484,90;studded helmet,2482,63;studded legs,2468,50;studded shield,2526,50;sword,2376,85;throwing knife,2410,25;two handed sword,2377,950;viking helmet,2473,265;viking shield,2531,260;war hammer,2391,10000;wooden shield,2512,15;" /> <parameter key="shop_sellable" value="axe,2386,7;battle axe,2378,80;battle hammer,2417,120;battle shield,2513,95;bone club,2449,5;bone sword,2450,20;brass armor,2465,150;brass helmet,2460,30;brass legs,2478,49;brass shield,2511,25;carlin sword,2395,118;chain armor,2464,70;chain helmet,2458,17;chain legs,2648,25;club,2382,1;coat,2651,1;copper shield,2530,50;crowbar,2416,50;dagger,2379,2;double axe,2387,260;doublet,2485,3;dwarven shield,2525,100;fire sword,2392,1000;halberd,2381,400;hand axe,2380,4;hatchet,2388,25;iron helmet,2459,150;jacket,2650,1;katana,2412,35;leather armor,2467,12;leather boots,2643,2;leather helmet,2461,4;leather legs,2649,9;legion helmet,2480,22;longsword,2397,51;mace,2398,30;magic plate armor,2472,6400;morning star,2394,100;orcish axe,2428,350;plate armor,2463,400;plate legs,2647,115;plate shield,2510,45;rapier,2384,5;sabre,2385,12;scale armor,2483,75;short sword,2406,10;sickle,2405,3;small axe,2559,5;soldier helmet,2481,16;spike sword,2383,240;steel helmet,2457,293;steel shield,2509,80;studded armor,2484,25;studded club,2448,10;studded helmet,2482,20;studded legs,2468,15;studded shield,2526,16;sword,2376,25;throwing knife,2410,2;two handed sword,2377,450;viking helmet,2473,66;viking shield,2531,85;war hammer,2391,470;wooden shield,2512,5;" /> </parameters> </npc>
-
Trade NPC Creator Este é um executável simples, criado por mim, que gera XMLs de NPCs feitos para vender ou comprar itens. Todas as instruções de uso estão no arquivo readme.txt da pasta do programa. trade npc creator.tar.gz
-
Falha minha, eu achei que existia um SLOT_SHIELD. Existe apenas para mãos SLOT_LEFT e SLOT_RIGHT. Tente um desses. Abraços.
-
Isso.
-
Sources. Item* Player::getWeapon(bool ignoreAmmo) { if(weapon) return weapon; Item* item = NULL; for(int32_t slot = SLOT_RIGHT; slot <= SLOT_LEFT; ++slot) { if(!(item = getEquippedItem((slots_t)slot)) || item->getWeaponType() != WEAPON_DIST) continue; if(!ignoreAmmo && item->getAmmoType() != AMMO_NONE) { Item* ammoItem = getInventoryItem(SLOT_AMMO); if(ammoItem && ammoItem->getAmmoType() == item->getAmmoType()) { if(g_weapons->getWeapon(ammoItem)) { shootRange = item->getShootRange(); return ammoItem; } } } else if(g_weapons->getWeapon(item)) { shootRange = item->getShootRange(); return item; } } return NULL; } Só editar essa linha. Item* ammoItem = getInventoryItem(SLOT_AMMO); Por essa: Item* ammoItem = (getInventoryItem(SLOT_AMMO) || getInventoryItem(SLOT_SHIELD)); Não testado. Abraços.
-
retireCharactersInArrayString(string, array)
tópico respondeu ao caotic de Oneshot em Mods, funções e outros
Legalzinha, mas dá pra fazer tudo isso com um string.gsub, caotic. function removeCharInString(str, pat) pat = table.concat(pat) str = str:gsub("[".. pat .."]", "") return str end Abração. -
Legalzinha a tua função, SmiX. Não vejo muita aplicações dela em scripts, mas é bom para aprendizado. Abraços. Obs: Teria como parar de usar a descrição do Mock no seu nick?
-
Cara, Barzinho do Éks. "Tudo que não é ligado ao Tibia ou ao OTServ pode ser postado aqui. Compre uma cerveja pelo preço de duas e ganhe a segunda de graça!" E depois quer ficar irritadinho porque está sendo zuado? Poste isso na Discussões, Matérias e Entrevistas que você terá um feedback melhor por lá.
-
Se a sua é funcional, não importa o tamanho. Eu fiz a minha meio gambiarra para só quebrar espaços de strings, ou seja uma string gigante de 30 caracteres sem espaços não quebraria.
-
string.skipline = function(s, l) if string.len(s) > l then local x = string.sub(s, 1, l) local y = string.sub(s, (l + 1), string.len(s)) if string.len(y) > l then y = string.skipline(y, l) end s = x .. string.gsub(y, "%s", "\n", 1) end return s end Vê se funciona legal aí. Abraços.
-
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -8100, 0, -8300, 0) function onCastSpell(cid, var) for i = 1, 2 do doCombat(cid, combat, var) end return true end
-
Olá, DoGoZ. As sources do OtClient vem com o parâmetro CMAKE_BUILD_TYPE configurado como Debug por padrão e é por isso que ele fica com um tamanho de cerca de 70MB. Para que seu cliente fique com um tamanho de 10MB, você precisa configurar como Release no CMake. Abraços.
-
Olá, XTibiano. Utilize com maior frequência a barra de pesquisa do fórum. http://www.xtibia.com/forum/topic/137748-tutorialadicionando-efeitos/ Um grande abraço.
-
Account Manager - Adicionando Escolha de Cidade
tópico respondeu ao Oneshot de Oneshot em Linguagens de Programação
Vou fazer algo sobre as cidades premium assim que eu puder. Abraços. -
Olá, XTibiano. Não trabalhamos com conteúdo relacionado a bots, essa área é apenas para pedidos de scripts Lua para Open Tibia. Seu tópico foi fechado.
- 2 respostas
-
- pedido
- tibiabot ng
-
(e 3 mais)
Tags:
-
Mas você está falando o quê para o Account Manager? 'warlord' ou 'a warlord'? Você tem que falar para o account manager, o que estiver no 'name' da vocação.
-
O account manager só lista vocações onde o id seja igual ao fromvoc. Ou seja se o id da vocação 'warlord' é 13, seu fromvoc também tem que ser 13, e, no arquivo, ele está 9. Abraços.
-
Account Manager - Adicionando Escolha de Cidade
tópico respondeu ao Oneshot de Oneshot em Linguagens de Programação
Este é o problema, não existe uma função nos headers para diferir entre uma cidade premium e uma cidade free. Mas irei desenvolver algo assim que puder sobre isso. Abraços. -
Account Manager - Adicionando Escolha de Cidade
um tópico no fórum postou Oneshot Linguagens de Programação
Account Manager Adicionando "Escolha de Cidade" Fala, minha galera do Éks. Vocês sabem que é minoria servidores que possuem site, uma vez que quando queremos criar um servidor (mais por lazer), é meio que inviável hostear um site junto. Os account makers, assim como são chamados os sites de servidores, dão ao jogador a opção de escolher a cidade que ele vai morar. Já o Account Manager, aquele sistema interno de administração da conta de um jogador, não possue uma opção de escolha de cidade, o que o deixa muito limitado. Principalmente para servidores derivados, onde é quase que necessário, que o jogador possa escolher sua cidade. Pensando nisso, desenvolvi uma série de modificações que irão adicionar ao seu servidor, a opção de "escolher uma cidade" no sistema do Account Manager. Instalação Você precisa seguir todos os passos abaixo com atenção o bastante para não pular nenhum, senão poderá ocorrer algum erro na compilação. Vale lembrar que não basta modificar os arquivos passados, você precisa re-compilar seu servidor e, após, substituir o executável. Vamos começar. No arquivo config.lua de seu servidor, procure por: newPlayerSpawnPosX = 95 newPlayerSpawnPosY = 117 newPlayerSpawnPosZ = 7 newPlayerTownId = 1 Apague, substituindo pelas linhas abaixo: newPlayerChooseTown = true newPlayerDefaultTownId = 1 A partir daqui, você irá precisar das sources de seu servidor. No arquivo configmanager.h e procure pelas seguintes linhas: SPAWNPOS_X, SPAWNPOS_Y, SPAWNPOS_Z, SPAWNTOWN_ID, Substitua por: DEFAULT_TOWN_ID, Procure por: START_CHOOSEVOC, Logo abaixo adicione: START_CHOOSETOWN, No arquivo configmanager.cpp, procure por: m_confNumber[sPAWNPOS_X] = getGlobalNumber("newPlayerSpawnPosX", 100); m_confNumber[sPAWNPOS_Y] = getGlobalNumber("newPlayerSpawnPosY", 100); m_confNumber[sPAWNPOS_Z] = getGlobalNumber("newPlayerSpawnPosZ", 7); m_confNumber[sPAWNTOWN_ID] = getGlobalNumber("newPlayerTownId", 1); Substitua por: m_confNumber[DEFAULT_TOWN_ID] = getGlobalNumber("newPlayerDefaultTownId", 1); Procure por: m_confBool[sTART_CHOOSEVOC] = getGlobalBool("newPlayerChooseVoc", false); Adicione logo abaixo: m_confBool[sTART_CHOOSETOWN] = getGlobalBool("newPlayerChooseTown", true); No arquivo iologindata.h, procure por: bool createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex); Substitua por: bool createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex, uint32_t townId); No arquivo iologindata.cpp, procure por: bool IOLoginData::createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex) { if(playerExists(characterName)) return false; Vocation* vocation = Vocations::getInstance()->getVocation(vocationId); Vocation* rookVoc = Vocations::getInstance()->getVocation(0); uint16_t healthMax = 150, manaMax = 0, capMax = 400, lookType = 136; if(sex % 2) lookType = 128; uint32_t level = g_config.getNumber(ConfigManager::START_LEVEL), tmpLevel = std::min((uint32_t)7, (level - 1)); uint64_t exp = 0; if(level > 1) exp = Player::getExpForLevel(level); if(tmpLevel > 0) { healthMax += rookVoc->getGain(GAIN_HEALTH) * tmpLevel; manaMax += rookVoc->getGain(GAIN_MANA) * tmpLevel; capMax += rookVoc->getGainCap() * tmpLevel; if(level > 8) { tmpLevel = level - 8; healthMax += vocation->getGain(GAIN_HEALTH) * tmpLevel; manaMax += vocation->getGain(GAIN_MANA) * tmpLevel; capMax += vocation->getGainCap() * tmpLevel; } } Database* db = Database::getInstance(); DBQuery query; query << "INSERT INTO `players` (`id`, `name`, `world_id`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `skull`, `skulltime`, `save`, `rank_id`, `guildnick`, `lastlogout`, `blessings`, `online`) VALUES (NULL, " << db->escapeString(characterName) << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", 1, " << accountId << ", " << level << ", " << vocationId << ", " << healthMax << ", " << healthMax << ", " << exp << ", 68, 76, 78, 39, " << lookType << ", 0, " << g_config.getNumber(ConfigManager::START_MAGICLEVEL) << ", " << manaMax << ", " << manaMax << ", 0, 100, " << g_config.getNumber(ConfigManager::SPAWNTOWN_ID) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_X) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_Y) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_Z) << ", 0, " << capMax << ", " << sex << ", 0, 0, 0, 0, 1, 0, '', 0, 0, 0)"; return db->query(query.str()); } Substitua por: bool IOLoginData::createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex, uint32_t townId) { if(playerExists(characterName)) return false; Vocation* vocation = Vocations::getInstance()->getVocation(vocationId); Vocation* rookVoc = Vocations::getInstance()->getVocation(0); Town* town = Towns::getInstance()->getTown(townId); uint16_t healthMax = 150, manaMax = 0, capMax = 400, lookType = 136; if(sex % 2) lookType = 128; uint32_t level = g_config.getNumber(ConfigManager::START_LEVEL), tmpLevel = std::min((uint32_t)7, (level - 1)); uint64_t exp = 0; if(level > 1) exp = Player::getExpForLevel(level); if(tmpLevel > 0) { healthMax += rookVoc->getGain(GAIN_HEALTH) * tmpLevel; manaMax += rookVoc->getGain(GAIN_MANA) * tmpLevel; capMax += rookVoc->getGainCap() * tmpLevel; if(level > 8) { tmpLevel = level - 8; healthMax += vocation->getGain(GAIN_HEALTH) * tmpLevel; manaMax += vocation->getGain(GAIN_MANA) * tmpLevel; capMax += vocation->getGainCap() * tmpLevel; } } Database* db = Database::getInstance(); DBQuery query; query << "INSERT INTO `players` (`id`, `name`, `world_id`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `skull`, `skulltime`, `save`, `rank_id`, `guildnick`, `lastlogout`, `blessings`, `online`) VALUES (NULL, " << db->escapeString(characterName) << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", 1, " << accountId << ", " << level << ", " << vocationId << ", " << healthMax << ", " << healthMax << ", " << exp << ", 68, 76, 78, 39, " << lookType << ", 0, " << g_config.getNumber(ConfigManager::START_MAGICLEVEL) << ", " << manaMax << ", " << manaMax << ", 0, 100, " << townId << ", " << town->getPosition().x << ", " << town->getPosition().y << ", " << town->getPosition().z << ", 0, " << capMax << ", " << sex << ", 0, 0, 0, 0, 1, 0, '', 0, 0, 0)"; return db->query(query.str()); } No arquivo player.h, procure por: int32_t managerNumber, managerNumber2; Substitua por: int32_t managerNumber, managerNumber2, managerNumber3; No arquivo player.cpp, procure por: editListId = maxWriteLen = windowTextId = rankId = 0; Adicione logo abaixo: managerNumber3 = g_config.getNumber(ConfigManager::DEFAULT_TOWN_ID); Procure por: case MANAGER_ACCOUNT: Muita atenção neste passo. Você precisará substituir todo o conteúdo do case pelo conteúdo abaixo, ou seja: Substitua isso: case MANAGER_ACCOUNT: { ... } Por isso: ZD3xYbg4[/pastebin] Demonstração Testado em The Forgotten Server 0.4 rev3884. Pode não funcionar em versões anteriores. -
Adeus, caro contemporâneo.
-
Realmente Modern Warfare você vai achar por esse preço mesmo, principalmente por que é o primeiro de três jogos, ou seja bem old já. Se você usar o Buscapé, dá até para achar umas boas ofertas, o problema é a confiança na loja em questão.
-
Bom e barato na categoria de FPS são duas palavras opostas.
-
Certo, depois poste a sua resolução aqui. Abraços.
-
não vlw, e eu tenho permição de moderar o forum todo, se eu ver uma irregularidade ou poder mover uma duvida sanada, e etc. eu posso e isso é sinal que vocês não estão fazendo os seus devidos trabalhos! Bju gato! permição permição permição permição permição permição permição permição A parte mais engraçada é que como Coordenador de Websites, você devia concentrar a maioria dos seus esforços lá, e não deixar aquela área fraca e praticamente abandonada como está atualmente. Além de analfabeto, belo coordenador, você hein? Não vem se achar o foda em cima dos outros, quando você é um bosta inútil atrás de um nick verde. Mas não vou levar pro lado pessoal não. Estamos no Barzinho para descontrair. "Bjo gato"
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.