-
Total de itens
86 -
Registro em
-
Última visita
Tudo que Fusion32 postou
-
pronto jackson zani agora vc nao pode fala nada nao que esse codigo é meu
-
vc eh malandrao mesmo hein e de qualquer jeito nem da pra faze melhor pq o codigo desse cara ai eh um so bobão
-
eu acho que é necessario sim declarar como float porque vamos supor que de um numero 132 ali no random ai ele dividido por 100 vai da 1,32 e se nao foce float daria um numero arredondado(acho eu né ehaUIeaHHaIEUH) nesse caso 1 ai nao ia se tao randomico o exp. eu ainda fiz um melhor aqui usando doubles e divido por 1000(oO) ai sim que o monstro nunca vai da a mesma exp aheuiaHEa
-
ola a todos de novo. hj eu venho trazer um codigo melhorado do "Jackson Zani"(mais um) configmanager.cpp acima de m_isLoaded = true; adicione m_confInteger[CRITICAL_HIT] = getGlobalNumber(L, "criticalhit", 10); agora em configmanager.h acima de LAST_INTEGER_CONFIG adicione CRITICAL_HIT, agora em weapons.cpp troque a funçao int32_t Weapons::getMaxWeaponDamage(int32_t attackSkill, int32_t attackValue) por int32_t Weapons::getMaxWeaponDamage(int32_t attackSkill, int32_t attackValue) { int32_t maxDamage = ((int32_t)std::ceil((attackSkill * (attackValue * 0.0425)) + (attackValue * 0.2)) * 2); if(random_range(0,100) < g_config.getNumber(ConfigManager::CRITICAL_HIT)){ if(attackSkill > 60){ maxDamage *= 2; } else if(attackSkill > 30){ maxDamage *= 3; } else { maxDamage *= 4; } } return maxDamage; } e pronto! config.lua -- chance to make a critical hit (1 = 1%) criticalhit = 10
-
na verdade eu ja tinha visto um igual que era do kremus ;S
-
ta legal sim mais vc podia faze assim oh if(item.itemid == 2193) then if(luck == x) then elseif(look ==x) then end end pra fica menos "poluido" o script mais mesmo assim fico show de bola
-
??? burro?? e tente adicionala pra 8.1 sim porem veja o q o player ve enquanto vc esta andando
-
eae pessoal eu venho aqui pra trazer um codigo meu ai pra vcs commands.cpp embaxo de {"/raid",&Commands::forceRaid}, {"/speed",&Commands::GMspeedChanger}, final do arquivo bool Commands::changeSpeed(Creature* creature, const std::string& cmd, const std::string& param) { boost::char_separator<char> sep(", "); tokenizer cmdtokens(param, sep); tokenizer::iterator cmdit = cmdtokens.begin(); std::stringstream msg; std::string name = parseParams(cmdit, cmdtokens.end()); int32_t speed = atoi(parseParams(cmdit, cmdtokens.end()).c_str()); Player* player = creature->getPlayer(); Player* targetPlayer = g_game.getPlayerByName(name); if(!player) return false; if(targetPlayer) { if(speed <= 1500 && speed >= 10) { targetPlayer->setBaseSpeed(speed); game->changeSpeed(targetPlayer, 0); msg << "Your speed was set to: " << player->baseSpeed << "." << std::endl; targetPlayer->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, msg.str().c_str()); player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "Speed changed with success."); return true; } else { player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "The speed should be between 10 and 1500."); return false; } } else if(player && !speed) { speed = atoi(name.c_str()); if(speed <= 1500 && speed >= 10) { player->setBaseSpeed(speed); g_game.changeSpeed(player, 0); msg << "Your speed was set to: " << player->baseSpeed << "." << std::endl; player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, msg.str().c_str()); return true; } else { player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "The speed should be between 10 and 1500."); return false; } } else { player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "Player is not online or doesnt exist."); } return true; } commands.h depois de bool forceRaid(Creature* creature, const std::string& cmd, const std::string& param); bool GMspeedChanger(Creature* creature, const std::string &cmd, const std::string ¶m); pronto flw ai qualquer duvida soh post ai funciona assim /speed <opcional Player>, velocidade caso vc nao bote o parametro do player a velocidade trocada sera a sua e agora o "Magnifico Jackson Zani" agora nem creditos vc vai recebe por ser otariao. agora eu postei a minha versao 10x mais facil de entende. a e tente por o seu codigozinho no ultimo svn (rev 3200) pra vc ve a surpresa q vc recebe quando poe velocidade alta
-
8.1 Devland Otserv 8.1 - Xml(com Sources)
tópico respondeu ao Jvchequer de Fusion32 em Lixeira Pública
meu deus do céu viu o pessoal tentando faze os cara para de usa xml e agora vem isso ai palhaçada mesmo -
isso sim que é magia e mta criatividade hein cara mtu boa
-
eae pessoal eu notei ja q o svn nao tem o comando preventLoss q eh necessario no amulet of loss entao vamos ao codigo em item.h abaixo de virtual void __startDecaying(); adicione #ifdef __PREVENT_LOSS__ bool isPreventLoss() const {return items[id].preventLoss != 0;} bool isPreventLossItemRemovable() const {return items[id].isPreventLossItemRemovable != 0;} #endif agora em items.cpp abaixo de replaceable = true; adicione #ifdef __PREVENT_LOSS__ preventLoss = 0; isPreventLossItemRemovable = false; #endif e abaixo de else if(strcasecmp(strValue.c_str(), "noSleeper") == 0) { if(readXMLInteger(itemAttributesNode, "value", intValue)) { it.noSleeperID = intValue; } } adicione #ifdef __PREVENT_LOSS__ else if(strcasecmp(strValue.c_str(), "preventLoss") == 0) { if(readXMLInteger(itemAttributesNode, "value", intValue)){ it.preventLoss = intValue; } if(readXMLInteger(itemAttributesNode, "remove", intValue)){ it.isPreventLossItemRemovable = intValue; } } #endif em items.h abaixo de bool replaceable; adicione #ifdef __PREVENT_LOSS__ int preventLoss; bool isPreventLossItemRemovable; #endif e pra termina em player.cpp na funçao void Player::dropLoot(Container* corpse) depois de if(corpse && lootDrop){ for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){ Item* item = inventory[i]; adicione #ifdef __PREVENT_LOSS__ if(item && item->isPreventLoss() && getSkull() != SKULL_RED){ if(item->isPreventLossItemRemovable()) g_game.internalRemoveItem(item, 1); return; } #endif Project >> Project Options >> Parameters >> C++ Compiler >> -D__PREVENT_LOSS__ REBUILD ALL Exemplo de como usar em items.xml <attribute key="preventLoss" value="1" <!-- QUALQUER VALOR DIFERENTE DE 0 SERA INTERPRETADO COMO ATIVADO --> remove="1" <!-- SE IRA REMOVER OU NAO O ITEM APOS A MORTE --> /> bom é isso ae pessoal qualquer duvidas ou bugs reportem aqui flw
-
Modificar Multiplicador De Xp Por Level
tópico respondeu ao Schiavinato de Fusion32 em Tutoriais de Scripting
e se o ot nao tive exp stage system? como q vai fica? e alem do mais vc esqueceu um ">" pra fecha as tags -
eae galera eu venho traze um comando que eu acho que pode ajudar mtu gm por ai server usado foi avesta revisão 3086 ai vai o code adicione em commands.cpp depois de {"/raid",&Commands::forceRaid}, adicione {"/skull",&Commands::changeSkull}, no final do arquivo adicione bool Commands::changeSkull(Creature* creature, const std::string& cmd, const std::string& param) { std::stringstream msg, param_stream(param); std::string name, skullType, skull; if(!getline(param_stream, name, ',')) { if(creature && creature->getPlayer()) creature->getPlayer()->sendCancel("No player specified."); return false; } Player* player = game->getPlayerByName(name); if(!player) { if(creature && creature->getPlayer()) creature->getPlayer()->sendCancel("Player is not online."); return false; } param_stream >> skullType; if(skullType == "white"){ Tile* tile = player->getTile(); if(!tile->hasFlag(TILESTATE_PROTECTIONZONE)){ player->pzLocked = true; player->addInFightTicks(); player->setSkull(SKULL_WHITE); player->sendTextMessage(MSG_INFO_DESCR, "You have a white skull now."); } else{ creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "This player is on a pz tile."); return false; } } else if(skullType == "red"){ player->redSkullTicks = 3 * 60 * 60 * 1000; player->setSkull(SKULL_RED); player->sendTextMessage(MSG_INFO_DESCR, "You have a red skull now."); } else if(skullType == "noskull"){ player->redSkullTicks = 0; player->setSkull(SKULL_NONE); player->sendTextMessage(MSG_INFO_DESCR, "Your skull has been removed."); } else{ creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "This isn\'t a valid skull type."); return false; } g_game.updateCreatureSkull(player); return true; } e agora pra finalizar em commands.h abaixo de bool forceRaid(Creature* creature, const std::string& cmd, const std::string& param); adicione bool changeSkull(Creature* creature, const std::string &cmd, const std::string ¶m); a e nao se esqueçam de por em commands.xml <command cmd="/skull" access="3"/> -- Change player skull example : "/skull Fusion, white" caso encontrem bugs por favor postem para eu poder corrigo-lo flw
-
ola pessoal eu vi o codigo q o nostra pois ai no forum e eu resolvi faze um q a experiencia sempre da diferente vamos ao codigo em configmanager.cpp depois de m_confInteger[STATUSQUERY_TIMEOUT] = getGlobalNumber(L, "statustimeout", 5 * 60 * 1000); adicione #ifdef __RANDOM_EXP__ m_confString[RANDOM_EXP] = getGlobalString(L, "random_exp", "no"); #endif e em configmanager.h depois de OTSERV_DB_HOST, adicione #ifdef __RANDOM_EXP__ RANDOM_EXP, #endif agora em criature.cpp na funçao Creature::getGainedExperience troque return (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)); por return (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)) * (randomExp/100)); e acima disso adicione #ifdef __RANDOM_EXP__ float randomExp = 1 * 100; if(g_config.getString(ConfigManager::RANDOM_EXP) == "yes") randomExp = player ? random_range(50, 300) : 1 * 100; #else float randomExp = 1 * 100; #endif Project >> Project Options >> Parameters >> C++ Compiler >> -D__RANDOM_EXP__ REBUILD ALL agora adicionem -- activate random exp? (yes/no) random_exp = "no" no config.lua O codigo é assim ele se vc ativa ele ele vai randomiza TOTAL e a cada veis q vc mata um monstro ele vai da diferente (entre x/2 e x*3) por exemplo uma rotworm pode da 20~120 podendo assim da 87, 73, 25, 36, etc... é isso pessoal qualquér duvidas/bugs podem posta ai flw
-
o codigo eh mtu bom mesmo soh que podia por um if(g_config.getString(ConfigManager::RANDOM_EXP) == "yes"){ heuiahuiaHeiuaehaUIeuia flw
-
Itens De Transformação! (vale A Pena Conferir)
tópico respondeu ao Skulls de Fusion32 em Actions e Talkactions
olha aqui um problema else doPlayerSendTextMessage(cid,22,"Você tem que esperar 5 minutos após o termino do efeito do bracelete para usá-lo novamente.") setPlayerStorageValue(cid,5556, -1) end vc usa o bracelete e tenta usar de novo ai aparece a mensagem q vc tem q esperar 5 min porem ele ja poe o storage value pra -1 o que significa que ao clicar de novo o player ja vai poder usar o bracelete -
Acenda Os "coal Basin" Ao Passar Por Entre Eles!
tópico respondeu ao Fusion32 de Fusion32 em Actions e Talkactions
opa vlw ai pela dica eu realmente tinha esquecido dessa possibilidade vlw -
Vizualize Pela Prompt Do Server Qm Sai E Entra No Serv!
tópico respondeu ao Fusion32 de Fusion32 em Linguagens de Programação
@cima para isso eu precisaria saber qual é o seu otserv pois algums server denominados "Open" nao divulgam as sources como o aries -
Acenda Os "coal Basin" Ao Passar Por Entre Eles!
um tópico no fórum postou Fusion32 Actions e Talkactions
ola pessoal ja vi alguns videos dessa action e por tanto resolvi faze-la e liberar aqui pro pessoal do xtibia! vamos ao que intereça CODIGO ATUALIZADO - 16/03/08 às 22:14 crie um arquivo coal_basin.lua em "data/moviments/scripts" e nele adicione o seguinte : local COAL_BASIN_I = 1485local COAL_BASIN_II = 1484 function onStepIn(cid, item, pos) if isPlayer(cid) == 1 then playerPos = getPlayerPosition(cid) tilepos1 = {x=playerPos.x+1, y=playerPos.y, z=playerPos.z, stackpos=1} tilepos2 = {x=playerPos.x-1, y=playerPos.y, z=playerPos.z, stackpos=1} tilepos3 = {x=playerPos.x, y=playerPos.y+1, z=playerPos.z, stackpos=1} tilepos4 = {x=playerPos.x, y=playerPos.y-1, z=playerPos.z, stackpos=1} flame1 = getThingfromPos(tilepos1) flame2 = getThingfromPos(tilepos2) flame3 = getThingfromPos(tilepos3) flame4 = getThingfromPos(tilepos4) if (flame1.itemid == COAL_BASIN_I) and (flame2.itemid == COAL_BASIN_I) then doTransformItem(flame1.uid, COAL_BASIN_II) doTransformItem(flame2.uid, COAL_BASIN_II) doDecayItem(flame1.uid) doDecayItem(flame2.uid) elseif (flame3.itemid == COAL_BASIN_I) and (flame4.itemid == COAL_BASIN_I) then doTransformItem(flame3.uid, COAL_BASIN_II) doTransformItem(flame4.uid, COAL_BASIN_II) doDecayItem(flame3.uid) doDecayItem(flame4.uid) end end return FALSE end agora em moviments.xml localizado em "data/moviments" acicione o seguinte : <movevent event="StepIn" actionid="10000" script="coal_basin.lua" /> agora em "data/items/items.xml" procurem por <item id="1484" article="a" name="coal basin"> </item> e substitua por <item id="1484" article="a" name="coal basin"> <attribute key="decayTo" value="1485"/> <attribute key="duration" value="3600"/> </item> e agora crie um arquivo coal_basin.lua em "data/actions/scripts" e nele adicione o seguinte : local COAL_BASIN_I = 1485local COAL_BASIN_II = 1484 function onUse(cid, item, frompos, item2, topos) if (item.itemid == COAL_BASIN_I) then doTransformItem(item.uid, COAL_BASIN_II) doDecayItem(item.uid) end return TRUE end e em "data/actions/actions.xml" adicione : <action itemid="1485" script="coal_basin.lua" /> E lembrem-se que para usar o script é necessario apenas colocar o action id do chao com 10000 e por coal basin de cada lado. TODOS os coal basin no mapa com o id 1484 vão apagar dps de 1 hr e para acender basta o player dar use nele. SS: qualquer duvidas podem posta aqui -
disso eu nao posso deixar de descordar porem vc sabe o quanto essa pessoa demorou para fazer a magia? sabe se é a primeira magia dela? se essa pessoa se dedicou e feis por ela mesmo pra mim é o suficiente mesmo não tendo utilidade
-
puxa vida esse tibia 8.1 mostra uma grande diverdade de efeitos o que melhora ainda mais a criatividade dos criadores de magia bom trabalho cara e eu gostei mesmo foi do earthquake
-
Primeiro gostaria de falar que apesar de o codigo não ser meu e sim do Umby porém eu o aperfeiçoei e qualquer duvida eu poderei responder Creditos: Umby - 95% Eu - 5% vamos ao que entereça! em player.cpp abaixo de MessageBufferCount = 0; adicione expRate = 0; então procure por isso return result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE); e modifique por return result * (g_config.getNumber(ConfigManager::RATE_EXPERIENCE) + expRate); e no final de players.cpp adicione void Player::changePlayerExpRate(uint32_t rate) { expRate = rate; } agora em player.h abaxo de void removeMessageBuffer(); adicione uint32_t getExpRate() const {return expRate;} void changePlayerExpRate(uint32_t rate); agora depois de int32_t MessageBufferCount; adicione uint32_t expRate; agora em creature.cpp procure na função int32_t Creature::getGainedExperience troque return (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)); por return attacker->getPlayer() ? (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * (g_config.getNumber(ConfigManager::RATE_EXPERIENCE) + attacker->getPlayer()->getExpRate())) : (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)); agora em luascript.cpp emcima de //getPlayerFood(cid) lua_register(m_luaState, "getPlayerFood", LuaScriptInterface::luaGetPlayerFood); adicione //setPlayerExpRate(cid, rate) lua_register(m_luaState, "setPlayerExpRate", LuaScriptInterface::luaSetPlayerExpRate); no final do arquivo adicione int LuaScriptInterface::luaSetPlayerExpRate(lua_State *L) { uint32_t rate = popNumber(L); uint32_t cid = popNumber(L); ScriptEnviroment* env = getScriptEnv(); Player* player = env->getPlayerByUID(cid); if(player){ player->changePlayerExpRate(rate); lua_pushnumber(L, LUA_ERROR); } else{ reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushnumber(L, LUA_ERROR); } return 1; } e em luascript.h antes de static int luaGetPlayerFood(lua_State *L); adicione static int luaSetPlayerExpRate(lua_State* L); agora como ele funciona em "data/movements/scripts" adicione o arquivo booster.lua e ponha o seguinte nele function onEquip(cid, item) setPlayerExpRate(cid, 1) end function onDeEquip(cid, item) setPlayerExpRate(cid, 0) end agora em "data/movements" ponha no arquivo movements.xml o seguinte <movevent event="Equip" itemid="2179" slot="ring" function="onEquipItem" script="booster.lua"/> <movevent event="DeEquip" itemid="2179" slot="ring" function="onDeEquipItem" script="booster.lua"/> agora o ID 2179 é o gold ring e quando um player poe ele um rato de 50 de exp(10x) passaria a ser de 55 de exp(11x) agora as diferenças entre a minha versão da função e da do umby a do Umby a funçao era vezes(*) portanto o exemplo seria o seguinte function onEquip(cid, item) setPlayerExpRate(cid, 4) end function onDeEquip(cid, item) setPlayerExpRate(cid, 1) end e passaria de 50 de exp(10x) para 200(40x) de exp enquanto o meu ele adiciona como no exemplo ja demonstrado SS: sem o anel com o anel qualquer duvida postem aqui que eu ajudarei o mais rapido possivel e reportem bugs pois posso por acaso ter esquecido de alguma parte do codigo
-
Vizualize Pela Prompt Do Server Qm Sai E Entra No Serv!
um tópico no fórum postou Fusion32 Linguagens de Programação
em game.cpp na função bool Game::placeCreature depois de int32_t newStackPos = creature->getParent()->__getIndexOfThing(creature); creature->getParent()->postAddNotification(creature, newStackPos); adicione if(Player* player = creature->getPlayer()) { std::cout << "- " << player->getName() << " logged in. " << (uint32_t)getPlayersOnline() << " players online." << std::endl; } em player.cpp na função void Player::onCreatureDisappear depois de if(!saved){ std::cout << "Error while saving player: " << getName() << std::endl; } adicione std::cout << "- " << getName() << " logged out. " << (uint32_t)g_game.getPlayersOnline() - 1 << " players online." << std::endl; e então pronto! quando alguem entrar em seu server vai aparecer - Cachero logged in. 57 players online. e quando sair - Cachero logged out. 56 players online. é bom lembrar q eu usei o nots 0.0.2b e tbm no svn. no svn é só seguir os passos acima mas se o caso for o nots 0.0.2b ja vai ter assim no game.cpp if(Player* player = creature->getPlayer()) { #ifdef __PVP_ARENA__ if(PvPArena* pvparena = creature->getTile()->pvparena) { if((internalTeleport(creature, creature->getMasterPos()) == RET_NOERROR)) { addMagicEffect(creature->getMasterPos(), NM_ME_ENERGY_AREA); } } #endif //__PVP_ARENA__ } else { // monsters and npcs #ifdef __PVP_ARENA__ if(PvPArena* pvparena = creature->getTile()->pvparena) { pvparena->addCreature(creature); } #endif //__PVP_ARENA__ } e então é só transformar em if(Player* player = creature->getPlayer()) { std::cout << "- " << player->getName() << " logged in. " << (uint32_t)getPlayersOnline() << " players online." << std::endl; #ifdef __PVP_ARENA__ if(PvPArena* pvparena = creature->getTile()->pvparena) { if((internalTeleport(creature, creature->getMasterPos()) == RET_NOERROR)) { addMagicEffect(creature->getMasterPos(), NM_ME_ENERGY_AREA); } } #endif //__PVP_ARENA__ } else { // monsters and npcs #ifdef __PVP_ARENA__ if(PvPArena* pvparena = creature->getTile()->pvparena) { pvparena->addCreature(creature); } #endif //__PVP_ARENA__ } Qualquer duvidas postem aqui que eu vou tentar ajuda-los.(o codigo não é mtu util porem mta gente gosta de ter em seu server) -
oloco o principio eu intendi mais agora pra que que serve esse tipo de numero?
-
se eu nao me engano é no global.lua ai vc adiciona no final de tudo
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.