Histórico de Curtidas
-
Emersonssss recebeu reputação de FeeTads em [SOURCE C++] Bunshin no JutsuTestado em 0.3.7 8.60
Creditos?
50% = Emerson Henrique ( EU )
50% = MeNi (OtLand)
Porq 50% para mim?
R:Quando ele Posto o Sistema não posto todas as funções para Adc e como eu fiz isso 50%.
Vamos A Magica ou Jutsu
em LuaScript.cpp
Procure Por :
//getPlayerBlessing(cid, blessing) Adicione Abaixo :
//doCreateCustomMonster(name, pos, outfit, health, spells, corpse, distance, experience ) lua_register(m_luaState, "doCreateCustomMonster", LuaInterface::luaDoCreateCustomMonster); Procure Por :
int32_t LuaInterface::luaGetPlayerBlessing(lua_State* L) Adicione Abaixo do Final dessa Função:
int32_t LuaInterface::luaDoCreateCustomMonster(lua_State* L) { //doCreateCustomMonster(name, pos, outfit, health, spells, corpse, distance, experience ) // created By MeNi for otland.net // uint64_t health,corpse,distance,experience; Outfit_t outfit; PositionEx pos; MonsterType* pobranyTyp = NULL; pobranyTyp = new MonsterType(); experience = popNumber(L); distance = popNumber(L); corpse = popNumber(L); std::string spells = popString(L); health = popNumber(L); outfit = popOutfit(L); popPosition(L, pos); std::string name = popString(L); Monster* monster; pobranyTyp->spellAttackList.clear(); pobranyTyp->health = health; pobranyTyp->healthMax = health; pobranyTyp->outfit = outfit; pobranyTyp->name = name; pobranyTyp->nameDescription = name; pobranyTyp->lookCorpse = corpse; pobranyTyp->targetDistance = distance; pobranyTyp->experience = experience; pobranyTyp->isSummonable = pobranyTyp->isIllusionable = pobranyTyp->isConvinceable = pobranyTyp->isWalkable = pobranyTyp->pushable = false; pobranyTyp->isAttackable = pobranyTyp->isHostile = pobranyTyp->canPushItems = pobranyTyp->canPushCreatures = true; pobranyTyp->defense = 50; pobranyTyp->armor = 80; pobranyTyp->baseSpeed = 200; pobranyTyp->changeTargetSpeed = pobranyTyp->changeTargetChance = 0; xmlDocPtr doc = xmlParseMemory(spells.c_str(), spells.length()); xmlNodePtr root = xmlDocGetRootElement(doc); xmlNodePtr tmpNode = root->children; while(tmpNode) { if(!xmlStrcmp(tmpNode->name, (const xmlChar*)"attack")) { spellBlock_t sb; if(g_monsters.deserializeSpell(tmpNode, sb, "doCreateCustomMonster")) pobranyTyp->spellAttackList.push_back(sb); } tmpNode = tmpNode->next; } monster = Monster::createMonster(pobranyTyp); if(!g_game.placeCreature(monster, pos, false, false)) { delete monster; lua_pushboolean(L, true); return 1; } ScriptEnviroment* env = getEnv(); lua_pushnumber(L, env->addThing((Thing*)monster)); return 1; } Em LuaScript.h
Procure Por :
static int32_t luaDoRemoveItem(lua_State* L); Adicione Abaixo :
static int32_t luaDoCreateCustomMonster(lua_State* L); Em monsters.h
Mude de Private para Public;
bool deserializeSpell(xmlNodePtr node, spellBlock_t& sb, const std::string& description = ""); Uma coisa que meu amigo e quase professor (Arthur Luna) me disse é
Arthur says : Source é source, a diferença é as modificações.
Então quase todos os sistemas são instalaveis o problema é saber oque adaptar!
Segue um Script Basico em TalkActions:
local text = '<attack name="melee" interval="2000" chance="100" range="5" radius="1" target="0"><attribute key="areaEffect" value="fire"/></attack>' function onSay(cid, words) local MaximoSummon = 10 --- Maximo de Monstros Sumonados!! No Caso So Posso Sumonar 5 Clones local summons = getCreatureSummons(cid) if(table.maxn(summons) < MaximoSummon) then -- no summons local clone = doCreateCustomMonster(getCreatureName(cid), getCreaturePosition(cid), getCreatureOutfit(cid), getCreatureMaxHealth(cid), text, 6324, 1, 100) doConvinceCreature(cid, clone) return true end return true end Criação do Script : Emerson Henrique
-
Emersonssss recebeu reputação de koyotestark em [C++] Attack SpeedSalve Galera, olhando em minhas libs achei um script muito bom !!
Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
Segue a Formula na source que faz essa magica :
Em Player.cpp Procure :
uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando :
Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
Simples e Facil !
Creditos ?
Emerson Henrique
-
Emersonssss recebeu reputação de kingdj22 em Trade OFF - Shop OfflineSegue um lista in-game para quem não usa gesior e queria o sistema !
local config = { levelRequiredToAdd = 20, maxOffersPerPlayer = 5, SendOffersOnlyInPZ = true, blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933} } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end local t = string.explode(param, ",") if(t[1] == "add") then if((not t[2]) or (not t[3]) or (not t[4])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end if(not tonumber(t[3]) or (not tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.") return true end if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.") return true end local item = getItemIdByName(t[2]) if(not item) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end if(getPlayerLevel(cid) < config.levelRequiredToAdd) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.") return true end if(isInArray(config.blocked_items, item)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.") return true end if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).") return true end local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";") if(check:getID() == -1) then elseif(check:getRows(true) >= config.maxOffersPerPlayer) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.") return true end end if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.") return true end local itemcount, costgp = math.floor(t[4]), math.floor(t[3]) doPlayerRemoveItem(cid, item, itemcount) db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.") end if(t[1] == "buy") then if(not tonumber(t[2])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(buy:getID() ~= -1) then if(getPlayerMoney(cid) < buy:getDataInt("cost")) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.") buy:free() return true end if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.") buy:free() return true end if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.") buy:free() return true end if(isItemStackable((buy:getDataString("item_id")))) then doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count")) else for i = 1, buy:getDataInt("count") do doPlayerAddItem(cid, buy:getDataString("item_id"), 1) end end doPlayerRemoveMoney(cid, buy:getDataInt("cost")) db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!") db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";") buy:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "remove") then if((not tonumber(t[2]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.") return true end end local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(delete:getID() ~= -1) then if(getPlayerGUID(cid) == delete:getDataInt("player")) then db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") if(isItemStackable(delete:getDataString("item_id"))) then doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count")) else for i = 1, delete:getDataInt("count") do doPlayerAddItem(cid, delete:getDataString("item_id"), 1) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!") end delete:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "withdraw") then local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";") if(balance:getDataInt("auction_balance") < 1) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.") balance:free() return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!") doPlayerAddMoney(cid, balance:getDataInt("auction_balance")) db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";") balance:free() end if(t[1] == "list") then local result = db.getResult("SELECT * FROM `auction_system` ORDER BY `auction_system`.`id` ASC") if result:getID() == -1 then return true end local msg = "Trade Offline:\n\n!offer buy, ID\n!offer remove, ID\n!offer add, ItemName, ItemPrice, ItemCount\n\n" while true do local id = result:getDataString("id") local name = getPlayerNameByGUID(result:getDataString("player")) local item_name = getItemNameById(result:getDataString("item_id")) local count = result:getDataString("count") local custo = result:getDataString("cost")/1000 local custo2 = result:getDataString("cost") if isPlayer(cid) then msg = ""..msg.."ID : "..id.."\nItem Name : "..item_name.." - Item Count : "..count.." - Item Cust : "..custo.."k("..custo2.."GP) - Dono : "..name.."\n" end if not result:next() then break end end doPlayerPopupFYI(cid, msg) return true end return true end -
Emersonssss recebeu reputação de Gabrielx17 em [C++] Attack SpeedSalve Galera, olhando em minhas libs achei um script muito bom !!
Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
Segue a Formula na source que faz essa magica :
Em Player.cpp Procure :
uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando :
Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
Simples e Facil !
Creditos ?
Emerson Henrique
-
Emersonssss recebeu reputação de locauty em (Resolvido)[Ajuda] Script Evento Double XpExplicando Em DoubleXP = {"Wednesday", "Sunday"} Coloque os dias que serão Double XP, será de 00:00 a 24:59 do dia escolhido, os dias tem que ser em ingles, quando o player logar e for o dia escolhido será modificado o rateXP dele para Double.
Segue :
function onLogin(cid) -- Monday = Segunda -- Tuesday = Terça -- Wednesday = Quarta -- Thursday = Quinta -- Friday = Sexta -- Saturday = Sabado -- Sunday = Domingo DoubleXP = {"Wednesday", "Sunday"} if isInArray(DoubleXP, os.date("%A")) then doPlayerSetRate(cid, SKILL__LEVEL, 2.0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "--[Double XP]--\nHoje Estamos em evento Double XP!!") end return true end Em CreatureScripts.xml
<event type="login" name="DoubleXP" event="script" value="DoubleXP.lua"/> Login.lua
registerCreatureEvent(cid, "DoubleXP") Creditos?
Emerson Henrique
-
Emersonssss recebeu reputação de Radke1 em Trade OFF - Shop OfflineSegue um lista in-game para quem não usa gesior e queria o sistema !
local config = { levelRequiredToAdd = 20, maxOffersPerPlayer = 5, SendOffersOnlyInPZ = true, blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933} } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end local t = string.explode(param, ",") if(t[1] == "add") then if((not t[2]) or (not t[3]) or (not t[4])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end if(not tonumber(t[3]) or (not tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.") return true end if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.") return true end local item = getItemIdByName(t[2]) if(not item) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end if(getPlayerLevel(cid) < config.levelRequiredToAdd) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.") return true end if(isInArray(config.blocked_items, item)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.") return true end if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).") return true end local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";") if(check:getID() == -1) then elseif(check:getRows(true) >= config.maxOffersPerPlayer) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.") return true end end if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.") return true end local itemcount, costgp = math.floor(t[4]), math.floor(t[3]) doPlayerRemoveItem(cid, item, itemcount) db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.") end if(t[1] == "buy") then if(not tonumber(t[2])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(buy:getID() ~= -1) then if(getPlayerMoney(cid) < buy:getDataInt("cost")) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.") buy:free() return true end if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.") buy:free() return true end if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.") buy:free() return true end if(isItemStackable((buy:getDataString("item_id")))) then doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count")) else for i = 1, buy:getDataInt("count") do doPlayerAddItem(cid, buy:getDataString("item_id"), 1) end end doPlayerRemoveMoney(cid, buy:getDataInt("cost")) db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!") db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";") buy:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "remove") then if((not tonumber(t[2]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.") return true end end local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(delete:getID() ~= -1) then if(getPlayerGUID(cid) == delete:getDataInt("player")) then db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") if(isItemStackable(delete:getDataString("item_id"))) then doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count")) else for i = 1, delete:getDataInt("count") do doPlayerAddItem(cid, delete:getDataString("item_id"), 1) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!") end delete:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "withdraw") then local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";") if(balance:getDataInt("auction_balance") < 1) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.") balance:free() return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!") doPlayerAddMoney(cid, balance:getDataInt("auction_balance")) db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";") balance:free() end if(t[1] == "list") then local result = db.getResult("SELECT * FROM `auction_system` ORDER BY `auction_system`.`id` ASC") if result:getID() == -1 then return true end local msg = "Trade Offline:\n\n!offer buy, ID\n!offer remove, ID\n!offer add, ItemName, ItemPrice, ItemCount\n\n" while true do local id = result:getDataString("id") local name = getPlayerNameByGUID(result:getDataString("player")) local item_name = getItemNameById(result:getDataString("item_id")) local count = result:getDataString("count") local custo = result:getDataString("cost")/1000 local custo2 = result:getDataString("cost") if isPlayer(cid) then msg = ""..msg.."ID : "..id.."\nItem Name : "..item_name.." - Item Count : "..count.." - Item Cust : "..custo.."k("..custo2.."GP) - Dono : "..name.."\n" end if not result:next() then break end end doPlayerPopupFYI(cid, msg) return true end return true end -
Emersonssss recebeu reputação de TheNorth em Ajuda Castle 24hrs absolute (exp bonus)Muito simples meu amigo, no seu sistema você não esta pegando o rate atual e adc mais....vc esta setando um novo rate do 0
Tente Assim.
Troque esses 2 Scripts por este :
function onLogin(cid) local rate = 1 local rate_premium = 0.35 local rate_castle = 0.10 local storage = 201320111714 local days = getPlayerPremiumDays(cid) local config = { yes_premium = "Você tem "..((rate - 1)*100).."% de EXP em vantagem, ainda lhe restam "..days.." dias de VIP!", not_premium = "Tornesse VIP e tenha "..((rate - 1)*100).."% a mais de EXP!", winCastle = "Você Tem "..((rate - 1)*100).."% De Experiencia A mais Agora.(Bonus Castle).", lostCastle = "A Sua Guild Nao Conquistou a Castle" } if isPremium(cid) and getGlobalStorageValue(storage) == getPlayerGuildName(cid) then doPlayerSetExperienceRate(cid, rate + rate_premium + rate_castle) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, config.yes_premium) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, config.winCastle) end if not isPremium(cid) and getGlobalStorageValue(storage) == getPlayerGuildName(cid) then doPlayerSetExperienceRate(cid, rate + rate_castle) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, config.not_premium) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, config.winCastle) end if not isPremium(cid) and not getGlobalStorageValue(storage) == getPlayerGuildName(cid) then doPlayerSetExperienceRate(cid, rate) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, config.not_premium) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, config.lostCastle) end return true end -
Emersonssss recebeu reputação de Lurk em Trade OFF - Shop OfflineSegue um lista in-game para quem não usa gesior e queria o sistema !
local config = { levelRequiredToAdd = 20, maxOffersPerPlayer = 5, SendOffersOnlyInPZ = true, blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933} } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end local t = string.explode(param, ",") if(t[1] == "add") then if((not t[2]) or (not t[3]) or (not t[4])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end if(not tonumber(t[3]) or (not tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.") return true end if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.") return true end local item = getItemIdByName(t[2]) if(not item) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end if(getPlayerLevel(cid) < config.levelRequiredToAdd) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.") return true end if(isInArray(config.blocked_items, item)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.") return true end if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).") return true end local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";") if(check:getID() == -1) then elseif(check:getRows(true) >= config.maxOffersPerPlayer) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.") return true end end if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.") return true end local itemcount, costgp = math.floor(t[4]), math.floor(t[3]) doPlayerRemoveItem(cid, item, itemcount) db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.") end if(t[1] == "buy") then if(not tonumber(t[2])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(buy:getID() ~= -1) then if(getPlayerMoney(cid) < buy:getDataInt("cost")) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.") buy:free() return true end if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.") buy:free() return true end if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.") buy:free() return true end if(isItemStackable((buy:getDataString("item_id")))) then doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count")) else for i = 1, buy:getDataInt("count") do doPlayerAddItem(cid, buy:getDataString("item_id"), 1) end end doPlayerRemoveMoney(cid, buy:getDataInt("cost")) db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!") db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";") buy:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "remove") then if((not tonumber(t[2]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.") return true end end local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(delete:getID() ~= -1) then if(getPlayerGUID(cid) == delete:getDataInt("player")) then db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") if(isItemStackable(delete:getDataString("item_id"))) then doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count")) else for i = 1, delete:getDataInt("count") do doPlayerAddItem(cid, delete:getDataString("item_id"), 1) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!") end delete:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "withdraw") then local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";") if(balance:getDataInt("auction_balance") < 1) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.") balance:free() return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!") doPlayerAddMoney(cid, balance:getDataInt("auction_balance")) db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";") balance:free() end if(t[1] == "list") then local result = db.getResult("SELECT * FROM `auction_system` ORDER BY `auction_system`.`id` ASC") if result:getID() == -1 then return true end local msg = "Trade Offline:\n\n!offer buy, ID\n!offer remove, ID\n!offer add, ItemName, ItemPrice, ItemCount\n\n" while true do local id = result:getDataString("id") local name = getPlayerNameByGUID(result:getDataString("player")) local item_name = getItemNameById(result:getDataString("item_id")) local count = result:getDataString("count") local custo = result:getDataString("cost")/1000 local custo2 = result:getDataString("cost") if isPlayer(cid) then msg = ""..msg.."ID : "..id.."\nItem Name : "..item_name.." - Item Count : "..count.." - Item Cust : "..custo.."k("..custo2.."GP) - Dono : "..name.."\n" end if not result:next() then break end end doPlayerPopupFYI(cid, msg) return true end return true end -
Emersonssss recebeu reputação de adolfbig em Anti Clone System [GlobalEvents] Shop.lua[Gesior] / CheckItens.luaEm GlobalEvents crie um Arquivo chamado Check.lua
local function CheckPlayer_Items() query = db.getResult("SELECT *, SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) AS 'serial' FROM player_items WHERE CONVERT( attributes USING latin1 ) LIKE '%description%' GROUP BY SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) having count(*) > 1") if (query:getID() == -1) then textquery = "\n Check Items : Nenhum item encontrado." print(textquery) return true end if (query:getID() ~= -1) then text = "\n[!] -> Deleting item player_items: [Player ID: " .. getPlayerNameByGUID(query:getDataInt("player_id")) .. " - Sid: "..(query:getDataInt("sid")).." - Pid: "..(query:getDataInt("pid")).." - Itemtype: "..(query:getDataInt("itemtype")).." - Serial: " .. query:getDataString("serial") .."" db.query("DELETE FROM `otservs`.`player_items` WHERE `player_items`.`player_id` =" .. (query:getDataInt("player_id")) .. " AND `player_items`.`sid` ="..(query:getDataInt("sid")).." AND `player_items`.`pid` ="..(query:getDataInt("pid"))..";") db.query("DELETE FROM `otservs`.`player_depotitems` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") db.query("DELETE FROM `otservs`.`tile_items` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") f = io.open("data/logs/AntiClone.txt", "a+") f:write("Player: "..text.." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n") f:close() print(text) if (query:getID() == -1) then textplayer_items = "\n Check Items : Todos os Items Foram Removidos." print(textplayer_items) return true end CheckPlayer_Items() end return true end local function CheckPlayer_DepotItems() query = db.getResult("SELECT *, SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) AS 'serial' FROM player_depotitems WHERE CONVERT( attributes USING latin1 ) LIKE '%description%' GROUP BY SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) having count(*) > 1") if (query:getID() == -1) then textquery = "\n Check Items : Nenhum item encontrado." print(textquery) return true end if (query:getID() ~= -1) then text = "\n[!] -> Deleting item player_depotitems: [Player ID: " .. getPlayerNameByGUID(query:getDataInt("player_id")) .. " - Sid: "..(query:getDataInt("sid")).." - Pid: "..(query:getDataInt("pid")).." - Itemtype: "..(query:getDataInt("itemtype")).." - Serial: " .. query:getDataString("serial") .."" db.query("DELETE FROM `otservs`.`player_items` WHERE `player_items`.`player_id` =" .. (query:getDataInt("player_id")) .. " AND `player_items`.`sid` ="..(query:getDataInt("sid")).." AND `player_items`.`pid` ="..(query:getDataInt("pid"))..";") db.query("DELETE FROM `otservs`.`player_depotitems` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") db.query("DELETE FROM `otservs`.`tile_items` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") f = io.open("data/logs/AntiClone.txt", "a+") f:write("Player: "..text.." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n") f:close() print(text) if (query:getID() == -1) then textplayer_items = "\n Check Items : Todos os Items Foram Removidos." print(textplayer_items) return true end CheckPlayer_DepotItems() end return true end function onStartup() CheckPlayer_Items() CheckPlayer_DepotItems() return true end em globalevents.xml Adicione
<globalevent name="AntiClone" type="start" event="script" value="Check.lua"/> Para Adicionar a Opção de Verificar itens Clonados Adicione um Serial em todos os Itens Vips :
em shop.lua Adicione ( Modern Acc )
function onThink(interval, lastExecution, thinkInterval) local result = db.getResult("SELECT * FROM shop_history WHERE `processed` = 0;") if(result:getID() ~= -1) then while(true) do cid = getCreatureByName(getPlayerNameByGUID(tonumber(result:getDataInt("player")))) product = tonumber(result:getDataInt("product")) itemr = db.getResult("SELECT * FROM shop_offer WHERE `id` = "..product..";") if isPlayer(cid) then local um_um = {1,2,3,4,5,6,7,8,9,0} um = um_um[math.random(1, #um_um)] local dois_dois = {1,2,3,4,5,6,7,8,9,0} dois = dois_dois[math.random(1, #dois_dois)] local tres_tres = {1,2,3,4,5,6,7,8,9,0} tres = tres_tres[math.random(1, #tres_tres)] local quatro_quatro = {1,2,3,4,5,6,7,8,9,0} quatro = quatro_quatro[math.random(1, #quatro_quatro)] local id = tonumber(itemr:getDataInt("item")) local tid = tonumber(result:getDataInt("id")) local count = tonumber(itemr:getDataInt("count")) local tipe = tonumber(itemr:getDataInt("type")) local productn = tostring(itemr:getDataString("name")) if isInArray({5,8},tipe) then if getPlayerFreeCap(cid) >= getItemWeightById(id, count) then if isContainer(getPlayerSlotItem(cid, 3).uid) then received = doPlayerAddItem(cid, id, count, false) if received then doItemSetAttribute(received, "description", ''.. productn ..' by ' .. getCreatureName(cid) .. ' [ID:' .. um .. '' .. dois .. '' .. tres .. '' .. quatro .. '].') doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system") db.query("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";") f = io.open("data/logs/Shop.txt", "a+") f:write("Player : '".. productn .." by ".. getCreatureName(cid) .." [ID: ".. um .."".. dois .."".. tres .."".. quatro .."] Item : "..productn.." - "..getCreatureName(cid).."- " .. os.date("%d %B %Y - %X.", os.time()) .."\n----------------------------------------------------------\n") f:close() else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space on container to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have a container to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)") end elseif isInArray({6,7},tipe) then if tipe == 6 then bcap = 8 bid = 1987 elseif tipe == 7 then bcap = 20 bid = 1988 end if isItemRune(id) then count = 1 end if getPlayerFreeCap(cid) >= (getItemWeightById(1987, 1) + getItemWeightById(id,count * bcap)) then local bag = doCreateItemEx(bid, 1) for i = 1,bcap do doAddContainerItem(bag, id, count) end received = doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, bag) if received == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system") db.query("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";") else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)") end end end itemr:free() if not(result:next()) then break end end result:free() end return true end Tag :
<globalevent name="shop" interval="3000" event="script" value="shop.lua"/> Creditos : Emerson Henrique < DBO INFINITY>
Comandos e Codigos Adaptados de varios sistemas
Ajuda : Arthur Luna (Ajudou no limite de Caracteres)
PS : Meu Shop salva na db. apenas o ID do player e não o nome essa Adaptação não vou disponibilizar.
http://otsbrasil.com/dbo Servidor Derivado Dragon Ball Online 8.6 + Cast System + War System entre outros sistemas.
[ADM] Aaron
Autorizo modificações e Postar em Qualquer Forum, esse codigo é meu e fiz de graça e forneço de Graça.
PS2 : Se Possivel mudar o Titulo para
Anti Clone System [GlobalEvents] Shop.lua[Modern Acc] / CheckItens.lua -
Emersonssss recebeu reputação de EduardoDantas em [Pedido]Script que libera a porta apos o player matar o bossem creaturescripts/scripts :
function onKill(cid, target, lastHit) config = { NickBoss = "Rat", StoragePorta = 666 } if isMonster(target) then if getCreatureName(target) == config.NickBoss then setPlayerStorageValue(cid, config.StoragePorta, 1) doPlayerSendTextMessage(cid, 18, "Parabens voce matou o Boss Super Fodao como recompensa podera passar na Porta") return true end end return true end creaturescripts.xml :
<event type="combat" name="Porta" event="script" value="NOMEDOARQUIVO.lua"/> login.lua :
registerCreatureEvent(cid, "Porta") em Actions/scripts :
function onUse(cid, item, fromPosition, itemEx, toPosition) if item.actionid == 666 then if getPlayerStorageValue(cid, 666) ~= 1 then return doPlayerSendTextMessage(cid, 27, "Voce precisa matar o Boss Super Fodao!") end return true end em actions.xml :
<action actionid = "666" event="script" value="NOMEDOARQUIVO.lua"/> no map usando seu Editor map selecione a porta escolhida e em propriedade da porta ActionID coloque 666 salve e seja feliz com seu BOSS super fodão
-
Emersonssss recebeu reputação de seminu em [C++] Attack SpeedSalve Galera, olhando em minhas libs achei um script muito bom !!
Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
Segue a Formula na source que faz essa magica :
Em Player.cpp Procure :
uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando :
Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
Simples e Facil !
Creditos ?
Emerson Henrique
-
Emersonssss recebeu reputação de Shandow Exille em [Floresta Encantada] New Event - ExclusivoE Papai Absulute como sempre posta o script faltando funções e ainda manda o player se vira para cria-la e o mais engraçado é que me fala para adicionar a função na source ! kkkkkkkkkk
Troque:
E para finalizar crie um arquivo com o nome de florestaabsolute.lua em data/libs e dentro adicione:
Adicione este :
configExf = { teleportPos = {x = 32341,y = 32213, z = 7}, -- aonde aparecerá o teleport teleportPla = {x=32622, y=31699, z=7}, -- para onde o teleport levará stats = 201201180701, timetostart = 300, -- tempo para iniciar topleftPos = {x = 32589, y = 31662, z = 7}, -- canto esquerdo superior botrightPos = {x = 32631, y = 31693, z = 7}, -- canto direito inferior prize = 6571, -- recompensa templepos = {x=32369, y=32241, z=7}, -- posição do templo randpos = {{x=32625,y=31692,z=7},{x=32621,y=31692,z=7},{x=32617,y=31692,z=7},{x=32619,y=31687,z=7},{x=32624,y=31681,z=7},{x=32630,y=31668,z=7},{x=32627,y=31668,z=7},{x=32617,y=31672,z=7},{x=32613,y=31677,z=7},{x=32608,y=31665,z=7},{x=32610,y=31688,z=7},{x=32598,y=31684,z=7},{x=32596,y=31684,z=7},{x=32597,y=31668,z=7}} } -- O PAPAI ABSOLUTE EXPLICARÁ NAS IMAGENS ESSAS POSIÇÕES function doStartExf() doCreateTeleport(1387, configExf.teleportPla, configExf.teleportPos) setGlobalStorageValue(configExf.stats, 0) doBroadcastMessage("The Exchanted Forest event will open in " .. configExf.timetostart .. " seconds.") addEvent(doInitExf, configExf.timetostart*1000) end function doInitExf() if getGlobalStorageValue(configExf.stats) == 0 then doBroadcastMessage("The Exchanted Forest event is starting...") setGlobalStorageValue(configExf.stats, 1) end end function doCloseExf() setGlobalStorageValue(configExf.stats, -1) local item = getTileItemById(configExf.teleportPos, 1387) if(item.uid ~= 0) then doRemoveItem(item.uid) end for index, creature in ipairs(doGetPlayersFromArea()) do doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature))) end end function doGetPlayersFromArea() local players = {} for index, creature in ipairs(getPlayersOnline()) do if isInArea(getThingPos(creature), configExf.topleftPos, configExf.botrightPos) then table.insert(players, creature) end end return players or #players end "Ai tu tem que adicionar a função na source brother, na 0.3.6 tem..."
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
Modificações by Emerson Henrique
Oque eu Alterei ?
for index, creature in ipairs(doGetPlayersFromArea()) do doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature))) end end function doGetPlayersFromArea() local players = {} for index, creature in ipairs(getPlayersOnline()) do if isInArea(getThingPos(creature), configExf.topleftPos, configExf.botrightPos) then table.insert(players, creature) end end return players or #players end Resumindo ele vai pegar qualquer player que esteja nessa Area e vai Teleportar pra o *Town do Player
Town = Cidade Main do Player,
Isso :
templepos = {x=32369, y=32241, z=7}, -- posição do templo é Igual a Isso :
getTownTemplePosition(getPlayerTown(creature)) Porem não é necessario variavel.
Mine Tutorial de como fazer uma função que teleport o player para seu templo sem nenhuma variavel.
Até o Proximo Check's Script's of Absulute
-
Emersonssss recebeu reputação de Orionx em [Talk][AntiBot]function TeleportBot(cid) if getPlayerStorageValue(cid, 934563) ~= -1 then doPlayerPopupFYI(cid, "Seu personagem foi teleportado para Templo, por uso de Bot 100% AFK") doTeleportThing(cid, getPlayerMasterPos(cid)) setPlayerStorageValue(cid, 934563, -1) end return true end function CheckBot(cid) local numer = math.random(2, 999) if isPlayer(cid) then doPlayerPopupFYI(cid, "Seu personagem esta sendo verificado por Bot AFK!\n\nVocê tem 1 minutos para responder.\n\nPor favor digite\n\n!check info, "..numer.."") setPlayerStorageValue(cid, 934563, numer) addEvent(TeleportBot, 60000, cid) end return true end function onSay(cid, words, param, channel) local param = param:lower() local t = string.explode(param, ",") local Numero = tonumber(t[2]) if (t[1] == "add") then if getPlayerGroupId(cid) < 2 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem permissão para fazer Verificações!") else doBroadcastMessage(""..getCreatureName(cid).." envio uma verificação de BOT para o player "..getCreatureName(getPlayerByName(t[2]))..".") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foi enviado uma verificação para o player : "..getCreatureName(getPlayerByName(t[2])).."") CheckBot(getPlayerByName(t[2])) return true end elseif (t[1] == "info") then if Numero == nil then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa digitar o valor.") end if getPlayerStorageValue(cid, 934563) == -1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem verificações pendentes.") end if getPlayerStorageValue(cid, 934563) ~= -1 and getPlayerStorageValue(cid, 934563) == Numero then setPlayerStorageValue(cid, 934563, -1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Obrigado por fazer a verificação, Bom jogo!!") end end return true end Sistema Bem simples:
Oque acontece você ADM está la ocupado arrumando algum bug e vem um player e fala "ADM o cara ta de bot" ai vai vc la fica falando "tae?tae?tae?".....Seus problemas acabaram.
O sistema manda um POPUP (Qual o elfbot não é capaz de reconhecer) e manda 1 sequencia de numero e da 1 minuto para o player falar os numeros, caso não? será teleportado para o templo padrão.
<talkaction log="yes" words="!check" event="script" value="CheckBot.lua"/> Comando :
!check add, NICK --Adc o player para Checar se esta de bot ! !check info, NUMERO --Comando que o player precisa informar para não ser teleportado. O sistema é simples e não faz verificação de pzLocked ele solicita apenas o valor.
Sempre de esse comando a player que realmente confia fazer a verificação, para que não tenha Power Abuses.
Somente Tutor + pode executa-lo.
Desculpe ficar fora do TK, não tenho muito tempo para programar(pois sou iniciante).
-
Emersonssss recebeu reputação de LeoTK em Double EXP com dia e horário!
-
Emersonssss recebeu reputação de Calidoress em [C++] Block Fast Anti-PushEae Galera faz tempo que não posto nada...Tentei postar na área certa mais o button ta desabilitado, então segue aqui mesmo, mover para area de programaçao depois...
Simples esse code em c++ bloqueia movimentos muito rapidos (BOT), assim evita qualquer tipo de bug.
Sem mais...
em Game.cpp
Procure por :
if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } Abaixo Adicione :
f (player->hasCondition(CONDITION_EXHAUST, EXHAUST_MOVE_ITEMS)){ player->sendTextMessage(MSG_STATUS_SMALL, "You cannot move this object.\nAnti-Push prevention."); return false; } player->addExhaust(500, EXHAUST_MOVE_ITEMS); Tempo do exaust = player->addExhaust(500, EXHAUST_MOVE_ITEMS);
Simples rapido e facil
Créditos: Desconhecido / Edição & Aperfeiçoamento: Emerson Henrique -
Emersonssss recebeu reputação de vanderley1234 em [C++] Attack SpeedSalve Galera, olhando em minhas libs achei um script muito bom !!
Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
Segue a Formula na source que faz essa magica :
Em Player.cpp Procure :
uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando :
Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
Simples e Facil !
Creditos ?
Emerson Henrique
-
Emersonssss recebeu reputação de Bagon em [C++] Attack SpeedSalve Galera, olhando em minhas libs achei um script muito bom !!
Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
Segue a Formula na source que faz essa magica :
Em Player.cpp Procure :
uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando :
Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
Simples e Facil !
Creditos ?
Emerson Henrique
-
Emersonssss recebeu reputação de Eduardo Dantas em [Floresta Encantada] New Event - ExclusivoE Papai Absulute como sempre posta o script faltando funções e ainda manda o player se vira para cria-la e o mais engraçado é que me fala para adicionar a função na source ! kkkkkkkkkk
Troque:
E para finalizar crie um arquivo com o nome de florestaabsolute.lua em data/libs e dentro adicione:
Adicione este :
configExf = { teleportPos = {x = 32341,y = 32213, z = 7}, -- aonde aparecerá o teleport teleportPla = {x=32622, y=31699, z=7}, -- para onde o teleport levará stats = 201201180701, timetostart = 300, -- tempo para iniciar topleftPos = {x = 32589, y = 31662, z = 7}, -- canto esquerdo superior botrightPos = {x = 32631, y = 31693, z = 7}, -- canto direito inferior prize = 6571, -- recompensa templepos = {x=32369, y=32241, z=7}, -- posição do templo randpos = {{x=32625,y=31692,z=7},{x=32621,y=31692,z=7},{x=32617,y=31692,z=7},{x=32619,y=31687,z=7},{x=32624,y=31681,z=7},{x=32630,y=31668,z=7},{x=32627,y=31668,z=7},{x=32617,y=31672,z=7},{x=32613,y=31677,z=7},{x=32608,y=31665,z=7},{x=32610,y=31688,z=7},{x=32598,y=31684,z=7},{x=32596,y=31684,z=7},{x=32597,y=31668,z=7}} } -- O PAPAI ABSOLUTE EXPLICARÁ NAS IMAGENS ESSAS POSIÇÕES function doStartExf() doCreateTeleport(1387, configExf.teleportPla, configExf.teleportPos) setGlobalStorageValue(configExf.stats, 0) doBroadcastMessage("The Exchanted Forest event will open in " .. configExf.timetostart .. " seconds.") addEvent(doInitExf, configExf.timetostart*1000) end function doInitExf() if getGlobalStorageValue(configExf.stats) == 0 then doBroadcastMessage("The Exchanted Forest event is starting...") setGlobalStorageValue(configExf.stats, 1) end end function doCloseExf() setGlobalStorageValue(configExf.stats, -1) local item = getTileItemById(configExf.teleportPos, 1387) if(item.uid ~= 0) then doRemoveItem(item.uid) end for index, creature in ipairs(doGetPlayersFromArea()) do doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature))) end end function doGetPlayersFromArea() local players = {} for index, creature in ipairs(getPlayersOnline()) do if isInArea(getThingPos(creature), configExf.topleftPos, configExf.botrightPos) then table.insert(players, creature) end end return players or #players end "Ai tu tem que adicionar a função na source brother, na 0.3.6 tem..."
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
Modificações by Emerson Henrique
Oque eu Alterei ?
for index, creature in ipairs(doGetPlayersFromArea()) do doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature))) end end function doGetPlayersFromArea() local players = {} for index, creature in ipairs(getPlayersOnline()) do if isInArea(getThingPos(creature), configExf.topleftPos, configExf.botrightPos) then table.insert(players, creature) end end return players or #players end Resumindo ele vai pegar qualquer player que esteja nessa Area e vai Teleportar pra o *Town do Player
Town = Cidade Main do Player,
Isso :
templepos = {x=32369, y=32241, z=7}, -- posição do templo é Igual a Isso :
getTownTemplePosition(getPlayerTown(creature)) Porem não é necessario variavel.
Mine Tutorial de como fazer uma função que teleport o player para seu templo sem nenhuma variavel.
Até o Proximo Check's Script's of Absulute
-
Emersonssss recebeu reputação de AllanSilva em [C++] Attack SpeedSalve Galera, olhando em minhas libs achei um script muito bom !!
Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
Segue a Formula na source que faz essa magica :
Em Player.cpp Procure :
uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando :
Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
Simples e Facil !
Creditos ?
Emerson Henrique
-
Emersonssss recebeu reputação de Sanieg em [Registre IP]Um Sistema Beem Util para mim, posso localizar qualquer Char que algum dia um Certo IP ou Char Logou, Porem cria varios arquivos por causa de Ips Dinamicos, mas a função é perfeita e Sempre que preciso localizar algum engraçadinho utilizo ela.
lib/050-function.lua
function RegistrarIP(cid) if isPlayer(cid) or isCreature(cid) then f = io.open("data/logs/IP/IpNumero/"..doConvertIntegerToIp(getPlayerIp(cid))..".txt", "a+") f:write("Player : "..getCreatureName(cid).." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n----------------------------------------------------------\n") f:close() end if isPlayer(cid) or isCreature(cid) then f = io.open("data/logs/IP/IpName/"..getCreatureName(cid)..".txt", "a+") f:write("Player : "..doConvertIntegerToIp(getPlayerIp(cid)).." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n----------------------------------------------------------\n") f:close() end if isPlayer(cid) or isCreature(cid) then f = io.open("data/logs/IP/IpAccount/"..getPlayerAccount(cid)..".txt", "a+") f:write("Player : "..getCreatureName(cid).." - "..doConvertIntegerToIp(getPlayerIp(cid)).." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n----------------------------------------------------------\n") f:close() end return true end em login.lua
antes do Ultimo return true
if isPlayer(cid) then RegistrarIP(cid) end Lembrando de Criar os Diretorios
logs/IP/IpNumero/
logs/IP/IpName/
logs/IP/IpAccount/
Creditos?
Emerson Henrique
-
Emersonssss recebeu reputação de Sanieg em [C++] Attack SpeedSalve Galera, olhando em minhas libs achei um script muito bom !!
Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então ....
Segue a Formula na source que faz essa magica :
Em Player.cpp Procure :
uint32_t Player::getAttackSpeed() const Mude Atualize para esse função :
uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando :
Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros.
Simples e Facil !
Creditos ?
Emerson Henrique
-
Emersonssss recebeu reputação de Wesleyvvv em [Pedido] NPC Que Vende Item com Moeda Diferente!local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local MoedaVip = 2160 -- Id da MoedaVip local shopWindow = {} local t = { [2457] = {price = 200}, -- [id do item] e em price qnto honor points vai custar [2458] = {price = 200}, [2459] = {price = 200}, [8931] = {price = 200}, [2422] = {price = 200} } local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks) if t[item] and doPlayerRemoveItem(cid, MoedaVip, t[item].price) then doPlayerAddItem(cid, item, 1, false) selfSay("Aqui esta o Item", cid) else selfSay("Voce nao tem "..t[item].price.." gold vip suficiente", cid) end return true end if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then for var, ret in pairs(t) do table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)}) end openShopWindow(cid, shopWindow, onBuy, onSell) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
Emersonssss recebeu reputação de Wake em [Battlefield Event New!] Exclusivo e mais legal ;pSistema inteiramente mal "editado" 2 creaturescrips com a mesma função PrepareDeath, dando conflito, Libs inexistentes e entre outros, script de péssima qualidade, não era de ser espera Feito por nada menos que o Luuki, aconselho o criado desse Tópico editar e arrumar os bugs.
Vou citar alguns já que sei que ele não sabe nem oq fez :
function onPrepareDeath(cid, deathList, lastHitKiller, mostDamageKiller)
if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage) >= 1 then
function onPrepareDeath(cid, corpse, lastHitKiller, mostDamageKiller)
if getPlayerStorageValue(cid, config_tvt.green_kills) > 0 then
Aqui vemos 2 scripts(arquivos) com a mesma função e o mais engraçado é que se vc pesquisar na LIB _Lib_Battle_Info.TeamOne.storage e config_tvt.green_kills não existe. Acredito que ele copio e nem se deu ao trabalho de Testar. Criou Atalhos sem nenhuma referencia de numero assim fazendo o sistema ficar inútil.
Em TalkActions fez um sistema de verificar se esta aberto, e abri-lo, não fez um sistema de RESET em caso de bugs e que com certeza teve, provavelmente nem saiba como fazer.
Criei esse post não para critica-lo, só para avisar que o seu Grande "Suporte" ao meu ver e ao ver esse script é inexperiente e não sabe nem oque esta postando e aos que curtiram sem nem ao menos testar, meu pêsames vcs somente estão dando créditos a alguém iniciante.
-
Emersonssss recebeu reputação de
Magalhaes92em [creaturescripts] Aparecer OwNeD! ao matar player.Melhorando o Script
function onKill(cid, target, lastHit) local morreu = {"VixiMorri", "OwNeD!", "TaEditado", "QeSoninho", "Af Travei", "Laaag", "Gezuis"} -- 10 letras no max local mato = {"Proximo?", "Cade?", "Sem Dedo", "Eu Manjo", "Esse éMeu", "Parei KKK", "Jogo D+"} quemmato = mato[math.random(1, #mato)] quemmorreu = morreu[math.random(1, #morreu)] if isCreature(cid) == TRUE and isCreature(target) == TRUE then doSendAnimatedText(getCreaturePosition(target), ""..quemmorreu.."", 210) doSendAnimatedText(getCreaturePosition(cid), ""..quemmato.."", 210) end return true end em isCreature pode muda isPlayer ou isMonster use a imaginação esse script qualquer monstro ou player que você mata sai uma msg diferente, ae fica na imaginação de vcs
-
Emersonssss recebeu reputação de Japoneeiiz em [Talk][AntiBot]function TeleportBot(cid) if getPlayerStorageValue(cid, 934563) ~= -1 then doPlayerPopupFYI(cid, "Seu personagem foi teleportado para Templo, por uso de Bot 100% AFK") doTeleportThing(cid, getPlayerMasterPos(cid)) setPlayerStorageValue(cid, 934563, -1) end return true end function CheckBot(cid) local numer = math.random(2, 999) if isPlayer(cid) then doPlayerPopupFYI(cid, "Seu personagem esta sendo verificado por Bot AFK!\n\nVocê tem 1 minutos para responder.\n\nPor favor digite\n\n!check info, "..numer.."") setPlayerStorageValue(cid, 934563, numer) addEvent(TeleportBot, 60000, cid) end return true end function onSay(cid, words, param, channel) local param = param:lower() local t = string.explode(param, ",") local Numero = tonumber(t[2]) if (t[1] == "add") then if getPlayerGroupId(cid) < 2 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem permissão para fazer Verificações!") else doBroadcastMessage(""..getCreatureName(cid).." envio uma verificação de BOT para o player "..getCreatureName(getPlayerByName(t[2]))..".") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foi enviado uma verificação para o player : "..getCreatureName(getPlayerByName(t[2])).."") CheckBot(getPlayerByName(t[2])) return true end elseif (t[1] == "info") then if Numero == nil then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa digitar o valor.") end if getPlayerStorageValue(cid, 934563) == -1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem verificações pendentes.") end if getPlayerStorageValue(cid, 934563) ~= -1 and getPlayerStorageValue(cid, 934563) == Numero then setPlayerStorageValue(cid, 934563, -1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Obrigado por fazer a verificação, Bom jogo!!") end end return true end Sistema Bem simples:
Oque acontece você ADM está la ocupado arrumando algum bug e vem um player e fala "ADM o cara ta de bot" ai vai vc la fica falando "tae?tae?tae?".....Seus problemas acabaram.
O sistema manda um POPUP (Qual o elfbot não é capaz de reconhecer) e manda 1 sequencia de numero e da 1 minuto para o player falar os numeros, caso não? será teleportado para o templo padrão.
<talkaction log="yes" words="!check" event="script" value="CheckBot.lua"/> Comando :
!check add, NICK --Adc o player para Checar se esta de bot ! !check info, NUMERO --Comando que o player precisa informar para não ser teleportado. O sistema é simples e não faz verificação de pzLocked ele solicita apenas o valor.
Sempre de esse comando a player que realmente confia fazer a verificação, para que não tenha Power Abuses.
Somente Tutor + pode executa-lo.
Desculpe ficar fora do TK, não tenho muito tempo para programar(pois sou iniciante).