Tudo que FeeTads postou
-
Remover battle ao entrar em PZ
boa, o meu é assim a função: void Player::onChangeZone(ZoneType_t zone) { if(!hasFlag(PlayerFlag_IgnoreProtectionZone)) { if(zone == ZONE_PROTECTION) { if(attackedCreature) { setAttackedCreature(NULL); onTargetDisappear(false); } removeCondition(CONDITION_INFIGHT); } } g_game.updateCreatureWalkthrough(this); sendIcons(); }
-
Remover battle ao entrar em PZ
há algum monstro/treiner etc.. dentro do PZ ou perto do player? o battle pode contar até com monstros a 15 SQM do player.
-
(Resolvido)effect com storage
o efeito tem que ser colocado em creatureScripts creaturescripts = coisas que acontecem nos players globalEvents = coisas que acontecem no OT em GERAL então: data > creaturescripts > scripts > effectStorage.lua function sendVipEffect(cid) if not isCreature(cid) then return true end if getPlayerStorageValue(cid, 19332) > 0 then doSendMagicEffect(getThingPos(cid), 66) addEvent(sendVipEffect, 200, cid) end end function onLogin(cid) sendVipEffect(cid) return true end
-
Item que ao ser equipado da dano a uma arma.
acho que esse erro ai é de outro script, não foi mexido nada nele. function isWeapon(uid) -- By Killua return getItemWeaponType(uid) ~= 0 end local itemDeDano = 1522 -- ID do item que irá no slot function onStatsChange(cid, attacker, type, combat, value) if not isPlayer(cid) then return false end if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) and (combat ~= COMBAT_HEALING and value > 0) then local itemEquipado = getPlayerSlotItem(cid, CONST_SLOT_AMMO).itemid -- pega o ID do ring no slot local armaEquipadaEsquerda = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid -- pega uid doq ta na mão esquerda local armaEquipadaDireita = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid -- pega uid doq ta na mão direita if isWeapon(armaEquipadaEsquerda) or isWeapon(armaEquipadaDireita) then -- se tiver arma na mão direita ou esquerda if itemEquipado and itemEquipado == ringDeDano then -- se tiver ring equipado E o ring for o escolhido local dano = value*0.5 -- 0.5 = 50% a mais de dano, 1 = 100% a mais.... local target = getCreatureTarget(cid) doTargetCombatHealth(cid, target, combat, -dano, -dano, 255) -- função de dar dano end end end return true end
-
Efetividade nos Pokémon (não funciona)
Este tópico foi movido para a seção de Suporte Otserv Alternativo consegue postar os scripts que puxam essas funções? vai ser mais facil pra averiguar
-
Item que ao ser equipado da dano a uma arma.
funfou? algum erro no console?
-
Item que ao ser equipado da dano a uma arma.
ai regista no XML <event type="statschange" name="RingMaisDano" event="script" value="NOME-DO-SCRIPT.lua"/> E registrar ele la no login.lua registerCreatureEvent(cid, "RingMaisDano") creatureScripts
-
Item que ao ser equipado da dano a uma arma.
Este tópico foi movido para a seção de Suporte Otserv. pra isso seria necessário talvez uma modificação na source, mas acho que da pra fazer com movements de Equip item, ou um creatureScripts de StatsChange, mas stats change é meio "pesadinho" pro servidor. function isWeapon(uid) -- By Killua return getItemWeaponType(uid) ~= 0 end local ringDeDano = 1522 -- ID do ring function onStatsChange(cid, attacker, type, combat, value) if not isPlayer(cid) then return false end if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) and (combat ~= COMBAT_HEALING and value > 0) then local ringEquipado = getPlayerSlotItem(cid, CONST_SLOT_RING).itemid -- pega o ID do ring no slot local armaEquipadaEsquerda = getPlayerSlotItem(cid, CONST_SLOT_LEFT).uid -- pega uid doq ta na mão esquerda local armaEquipadaDireita = getPlayerSlotItem(cid, CONST_SLOT_RIGHT).uid -- pega uid doq ta na mão direita if isWeapon(armaEquipadaEsquerda) or isWeapon(armaEquipadaDireita) then -- se tiver arma na mão direita ou esquerda if ringEquipado and ringEquipado == ringDeDano then -- se tiver ring equipado E o ring for o escolhido local dano = value*0.5 -- 0.5 = 50% a mais de dano, 1 = 100% a mais.... local target = getCreatureTarget(cid) doTargetCombatHealth(cid, target, combat, -dano, -dano, 255) -- função de dar dano end end end return true end
-
Alguem ajuda pra comprar items
você tem essa modificação na source? caso não tenha, faz uma busca no teu OT por "getPlayerBalance" E "doPlayerSetBalance" ve se existe essas funções na em alguma LIB sua, ou na sua source. obs: getPlayerBalance e setBalance são funções da source, tenta ver se existem na sua source. caso não tenha, procura por "doPlayerRemoveMoney" caso tenha essas funções, fazer um script é bem simples, PORÉM é necessário ter elas
-
Erro cmaker
Este tópico foi movido para a seção de Suporte Otserv. veja o tutorial do luan luciano CLICANDO AQUI, tenta ver se o make list que ele passou do github funciona. se não der certo, tenta esse: CMakeLists.txt eu uso esse num server global, de ubuntu 20, não sei se ira funcionar, e não sei como funciona pra ubuntu 16. outra, pq não atualiza sua source pra funcionar em ubuntu 20?
-
Alguém me ajuda script bônus online
tenho um script que funciona, porém eh necessário vc criar uma coluna na DB chamada "online_bonus", pq ele checa no máximo 4 por IP. O que acho valido pois a otservList só aceita 4 IP's validos, e não deixa que abram varios MC's no mesmo PC, isso meio que vai ajudar o servidor. local reward = 2157 --id do item que vai dar local quantidade = 1 -- quantidade de item (isso só serve pra item stackavel, se o item não for stackavel tipo armadura, não vai adiantar colocar numeros maiores) function addOnlineBonus(cid, horas, bonus_contador, bonus_max) if not isPlayer(cid) then return false end if getPlayerIp(cid) == 0 or not isCreature(cid) then return true end setPlayerStorageValue(cid, bonus_contador, getPlayerStorageValue(cid, bonus_contador) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Por completar uma hora online sem deslogar, você ganhou 1 Online Bônus. Total: ".. getPlayerStorageValue(cid,bonus_contador) .. ".") if getPlayerStorageValue(cid, bonus_contador) >= bonus_max then doPlayerSendTextMessage(cid, 19, "Seus ".. bonus_max .." Online Bônus foram convertidos em 1 Premium Account!") doPlayerAddItem(cid, reward, quantidade) -- ITEM QUE VAI DAR AO COMPLETAR A QUANTIDADE DE HORAS setPlayerStorageValue(cid, bonus_contador, 0) end addEvent(addOnlineBonus, horas * 3600 * 1000, cid, horas, bonus_contador, bonus_max) end function onLogin(cid) registerCreatureEvent(cid, "onlinebonuslogout") local checkIP = getPlayerIp(cid) local players = {} for _, pid in pairs (getPlayersOnline()) do if getPlayerIp(pid) == checkIP then table.insert(players, pid) end end if #players < 5 then local func = db.query or db.executeQuery func('UPDATE players set online_bonus = 1 where id = '..getPlayerID(cid)) end local result = db.getResult('SELECT `online_bonus` FROM `players` WHERE `id` = ' ..getPlayerID(cid)) local online = 0 if result:getID() ~= -1 then online = tonumber(result:getDataInt('online_bonus')) result:free() end if online == 0 then addEvent(function() doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "[Online Bonus]: Você já tem 4 chares logados com o mesmo IP, este não irá contar!") return true end, 1100) else local bonus_contador = 72702 -- Storage que vai guardar quantos online bonus o char possui. local horas = 1 -- Quantidade de horas o char precisa ficar logado pra receber cada online bonus. local bonus_max = 24 -- HORAS ONLINE Quantidade de bonus que o char precisa atingir para ganhar 1 dia de premium account, zerando o contador. if getPlayerStorageValue(cid, bonus_contador) > 0 then doPlayerSendTextMessage(cid,22,"Você está com: " .. getPlayerStorageValue(cid,bonus_contador) .. " Online Bônus. Ao completar 24 você ganhará 1 premium points!") else setPlayerStorageValue(cid, bonus_contador, 0) addEvent(function() doPlayerSendTextMessage(cid,19,"Você está com: 0 Online Bônus. Ao completar 24h online você ganhará 1 premium points!") end, 1000) end addEvent(addOnlineBonus, horas * 3600 * 1000, cid, horas, bonus_contador, bonus_max) end return true end function onLogout(cid) local result = db.getResult('SELECT `online_bonus` FROM `players` WHERE `id` = ' ..getPlayerID(cid)) local online = 0 if result:getID() ~= -1 then online = tonumber(result:getDataInt('online_bonus')) result:free() end local func = db.query or db.executeQuery func('UPDATE players set online_bonus = 0 where id = '..getPlayerID(cid)) return true end adicionar as tags no creaturescripts.xml <!-- Online Bonus --> <event type="login" name="onlinebonus" event="script" value="onlinebonus.lua"/> <event type="logout" name="onlinebonuslogout" event="script" value="onlinebonus.lua"/>
-
Lifesteal em attack onHealthChange
mas isso é literalmente o life leech, life leech retorna vida em todo hit que vc acerta, mais facil doq fazer por onHealthChange mas caso queira fazer por isso coloca pra diferenciar creature ~= attacker, e ve se o type é ~= lifeLoss
-
(Resolvido)Script de patente help me
-
(Resolvido)Script de patente help me
provavelmente vc tem outro script de "look" ja funcionando, e está sobscrevendo após esse
-
NPC ALL Bless com Stages
Este tópico foi movido para a seção de Suporte Otserv. eu uso o comando bless da pra vc tentar modificar pra NPC cada bless, ou um que de todas: local bless = {1, 2, 3, 4, 5} local cost = 80000 function onSay(cid, words, param) for i = 1, table.maxn(bless) do if(getPlayerBlessing(cid, bless[i])) then doPlayerSendCancel(cid, "Voce ja tem todas as bless.") return TRUE end end if(getPlayerMoney(cid) >= cost and doPlayerRemoveMoney(cid, cost) == TRUE) then for i = 1, table.maxn(bless) do doPlayerAddBlessing(cid, bless[i]) end doCreatureSay(cid, "You are now blessed!" ,19) doSendMagicEffect(getPlayerPosition(cid), 49) else doPlayerSendCancel(cid, "Voce precisa de 80k NA BACKPACK para a bless.") end return TRUE end
-
não contar frag em determinada area (Source otx)
seria o ideal, fiz fixo, pq adicionar no configManager ou luaScript pra add por comando, ou ate no config.lua mesmo, MASSSSS como isso daria um trabalho mais chato, fiz fixo mesmo. então, basicamente duplicar a função tipo assim: lugar 1: int x1 = //POSIÇÃO X SUPERIOR ESQUERDA int y1 = 1000//POSIÇÃO Y SUPERIOR ESQUERDA int x2 = 1000//POSIÇÃO X INFERIOR DIREITA int y2 = 1000//POSIÇÃO Y INFERIOR DIREITA //essas 4 posições formam o quadrado int z = 7//POS EM Z; for(int i = x1; i <= x2; i++){ for(int j = y1; j <= y2; j++){ if (posi.x == i && posi.y == j && posi.z == z){ return true; } } } ai pra nova area, add um lugar 2 assim: int novox1 = //POSIÇÃO X SUPERIOR ESQUERDA int novoy1 = 3000//POSIÇÃO Y SUPERIOR ESQUERDA int novox2 = 3000//POSIÇÃO X INFERIOR DIREITA int novoy2 = 3000//POSIÇÃO Y INFERIOR DIREITA //essas 4 posições formam o quadrado int novoz = 7//POS EM Z; for(int i = novox1; i <= novox2; i++){ for(int j = novoy1; j <= novoy2; j++){ if (posi.x == i && posi.y == j && posi.z == z){ return true; } } } você pode fazer o "int x1 = " ser um vetor tbm, ai da pra add varias posições em apenas uma variavel, massss ai precisa de outro for pra checar kkkkkkk
- Erro ao atacar player
-
(Resolvido)Script de patente help me
cria um arquivo ou coloca dentro de algum que ja exista, EXEMPLO: data > creaturescripts > scripts > onLook.lua Cola esse código dentro do arquivo. depois vai em creaturescripts.xml data > creaturescripts > creaturescripts.xml cola essa tag: <event type="look" name="newOnLook" script="onLook.lua"/> <event type="login" name="newlook" event="script" value="onLook.lua" /> ai da /reload creature e reloga, que ja vai aparecer. OBS: CHECA se já não existe algum arquivo de "look", pq pode sobescrever e tirar algo que vc ja usa. onde ta isso ^ bota isso: function onLogin(cid) registerCreatureEvent(cid, "newOnLook") registerCreatureEvent(cid, "newlook") return true end
-
(Resolvido)menssagem no defalt e nao no server log
testou esse script que fiz e deu reload talk? local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*10)) local pid = getPlayersOnline() for i=1, #pid do doPlayerSendTextMessage(pid[i], MESSAGE_STATUS_CONSOLE_RED, "[/all]: ["..getCreatureName(cid).."]: "..param.."") end else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end return true end
-
(Resolvido)menssagem no defalt e nao no server log
sua source nao deve ter a função de mandar no default então, vai ter que fazer isso de outra forma Tenta assim: local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*10)) local pid = getPlayersOnline() for i=1, #pid do doPlayerSendTextMessage(pid[i], MESSAGE_STATUS_CONSOLE_RED, "[/all]: ["..getCreatureName(cid).."]: "..param.."") end else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end return true end
- (Resolvido)menssagem no defalt e nao no server log
- (Resolvido)menssagem no defalt e nao no server log
-
(Resolvido)menssagem no defalt e nao no server log
Tenta assim: local config = { storage = 19400, -- storage em que será salvo o tempo cor = "red", -- de acordo com o constant.lua da lib tempo = 3, -- em minutos price = 20000, -- quantidade de dinheiro que irá custar level = 10 -- level pra poder utilizar o broadcast } function onSay(cid, words, param) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getPlayerLevel(cid) >= config.level then if getPlayerStorageValue(cid, config.storage) - os.time() <= 0 then if doPlayerRemoveMoney(cid, config.price) then setPlayerStorageValue(cid, config.storage, os.time() + (config.tempo*10)) doBroadcastMessage("[/all]: ["..getCreatureName(cid).."]: "..param.."", MESSAGE_STATUS_CONSOLE_RED) --pra mostrar em VERMELHO pra todos no default --doBroadcastMessage("[/all]: ["..getCreatureName(cid).."]: "..param.."", MESSAGE_STATUS_CONSOLE_ORANGE) --pra mostrar em LARANJA pra todos no default --doBroadcastMessage("[/all]: ["..getCreatureName(cid).."]: "..param.."", MESSAGE_STATUS_CONSOLE_BLUE) --pra mostrar em AZUL pra todos no default else doPlayerSendCancel(cid, "You don't have " ..config.price.. " gp's for broadcasting.") return true end else doPlayerSendCancel(cid, "You have to wait " ..(getPlayerStorageValue(cid, config.storage) - os.time()).. " seconds until you can broadcast again.") return true end else doPlayerSendCancel(cid, "You have to be level " ..config.level.. " or more in order to use broadcast.") end end
- (Resolvido)0 [AJUDA] Remover tag de desconto da aba donate do site.
-
(Resolvido)Gesior Bug
funcionou 100%?