Ir para conteúdo

Emersonssss

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    Emersonssss recebeu reputação de FeeTads em [SOURCE C++] Bunshin no Jutsu   
    Testado 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
  2. Obrigado
    Emersonssss recebeu reputação de koyotestark em [C++] Attack Speed   
    Salve 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
  3. Curtir
    Emersonssss recebeu reputação de kingdj22 em Trade OFF - Shop Offline   
    Segue 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
  4. Gostei
    Emersonssss recebeu reputação de Gabrielx17 em [C++] Attack Speed   
    Salve 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
  5. Gostei
    Emersonssss recebeu reputação de locauty em (Resolvido)[Ajuda] Script Evento Double Xp   
    Explicando 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
  6. Gostei
    Emersonssss recebeu reputação de Radke1 em Trade OFF - Shop Offline   
    Segue 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
  7. Curtir
    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
  8. Curtir
    Emersonssss recebeu reputação de Lurk em Trade OFF - Shop Offline   
    Segue 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
  9. Gostei
    Emersonssss recebeu reputação de adolfbig em Anti Clone System [GlobalEvents] Shop.lua[Gesior] / CheckItens.lua   
    Em 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
  10. Curtir
    Emersonssss recebeu reputação de EduardoDantas em [Pedido]Script que libera a porta apos o player matar o boss   
    em 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
  11. Gostei
    Emersonssss recebeu reputação de seminu em [C++] Attack Speed   
    Salve 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
  12. Gostei
    Emersonssss recebeu reputação de Shandow Exille em [Floresta Encantada] New Event - Exclusivo   
    E 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
  13. Gostei
    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).
  14. Gostei
    Emersonssss recebeu reputação de LeoTK em Double EXP com dia e horário!   
  15. Curtir
    Emersonssss recebeu reputação de Calidoress em [C++] Block Fast Anti-Push   
    Eae 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
  16. Gostei
    Emersonssss recebeu reputação de vanderley1234 em [C++] Attack Speed   
    Salve 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
  17. Gostei
    Emersonssss recebeu reputação de Bagon em [C++] Attack Speed   
    Salve 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
  18. Gostei
    Emersonssss recebeu reputação de Eduardo Dantas em [Floresta Encantada] New Event - Exclusivo   
    E 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
  19. Gostei
    Emersonssss recebeu reputação de AllanSilva em [C++] Attack Speed   
    Salve 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
  20. Gostei
    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
  21. Gostei
    Emersonssss recebeu reputação de Sanieg em [C++] Attack Speed   
    Salve 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
  22. Gostei
    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())
  23. Gostei
    Emersonssss recebeu reputação de Wake em [Battlefield Event New!] Exclusivo e mais legal ;p   
    Sistema 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) &gt;= 1 then

    function onPrepareDeath(cid, corpse, lastHitKiller, mostDamageKiller)
    if getPlayerStorageValue(cid, config_tvt.green_kills) &gt; 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.
  24. Gostei
    Emersonssss recebeu reputação de Magalhaes92 em [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
  25. Gostei
    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).

Informação Importante

Confirmação de Termo