Postado Novembro 12, 2019 5 anos Alguém poderia, porfavor, me ajudar a colocar os traning monk para dar 1 de stamina a cada 2 minutos pro tsf 1.2? Já existe em outros ots esse sistema.
Postado Novembro 12, 2019 5 anos Em data/events/scripts/creature.lua procure por function Creature:onTargetCombat(target), a cima adicione o seguinte codigo: -- Increase Stamina when Attacking Trainer local staminaBonus = { target = 'Training Monk', period = 120000, -- time on miliseconds bonus = 1, -- gain stamina events = {} } local function addStamina(name) local player = Player(name) if not player then staminaBonus.events[name] = nil else local target = player:getTarget() if not target or target:getName() ~= staminaBonus.target then staminaBonus.events[name] = nil else player:setStamina(player:getStamina() + staminaBonus.bonus) staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name) end end end No mesmo arquivo procure por function Creature:onTargetCombat(target) e adicione o seguinte codigo a cima de return true if self:isPlayer() then if target and target:getName() == staminaBonus.target then local name = self:getName() if not staminaBonus.events[name] then staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name) end end end
Postado Novembro 12, 2019 5 anos Autor __picif = {} function Creature:onChangeOutfit(outfit) return true end function Creature:onAreaCombat(tile, isAggressive) return true end -- Prey slots consumption local function preyTimeLeft(player, slot) local timeLeft = player:getPreyTimeLeft(slot) / 60 local monster = player:getPreyCurrentMonster(slot) if (timeLeft > 0) then local playerId = player:getId() local currentTime = os.time() local timePassed = currentTime - nextPreyTime[playerId][slot] if timePassed > 59 then timeLeft = timeLeft - 1 nextPreyTime[playerId][slot] = currentTime + 60 else timeLeft = 0 end -- Expiring prey as there's no timeLeft if (timeLeft == 0) then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("Your %s's prey has expired.", monster:lower())) player:setPreyCurrentMonster(slot, "") end -- Setting new timeLeft player:setPreyTimeLeft(slot, timeLeft * 60) else -- Expiring prey as there's no timeLeft player:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("Your %s's prey has expired.", monster:lower())) player:setPreyCurrentMonster(slot, "") end return player:sendPreyData(slot) end local function removeCombatProtection(cid) local player = Player(cid) if not player then return true end local time = 0 if player:isMage() then time = 10 elseif player:isPaladin() then time = 20 else time = 30 end player:setStorageValue(Storage.combatProtectionStorage, 2) addEvent(function(cid) local player = Player(cid) if not player then return end player:setStorageValue(Storage.combatProtectionStorage, 0) player:remove() end, time * 1000, cid) end -- Increase Stamina when Attacking Trainer local staminaBonus = { target = 'Training Monk', period = 120000, -- time on miliseconds bonus = 1, -- gain stamina events = {} } local function addStamina(name) local player = Player(name) if not player then staminaBonus.events[name] = nil else local target = player:getTarget() if not target or target:getName() ~= staminaBonus.target then staminaBonus.events[name] = nil else player:setStamina(player:getStamina() + staminaBonus.bonus) staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name) end end end function Creature:onTargetCombat(target) if not self then if self:isPlayer() then if target and target:getName() == staminaBonus.target then local name = self:getName() if not staminaBonus.events[name] then staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name) end end end return true end if not __picif[target.uid] then if target:isMonster() then target:registerEvent("RewardSystemSlogan") __picif[target.uid] = {} end end if target:isPlayer() then if self:isMonster() then local protectionStorage = target:getStorageValue(Storage.combatProtectionStorage) if target:getIp() == 0 then -- If player is disconnected, monster shall ignore to attack the player if target:isPzLocked() then end if protectionStorage <= 0 then addEvent(removeCombatProtection, 30 * 1000, target.uid) target:setStorageValue(Storage.combatProtectionStorage, 1) elseif protectionStorage == 1 then self:searchTarget() return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end return true end if protectionStorage >= os.time() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end if ((target:isMonster() and self:isPlayer() and target:getType():isPet() and target:getMaster() == self) or (self:isMonster() and target:isPlayer() and self:getType():isPet() and self:getMaster() == target)) then return RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE end if PARTY_PROTECTION ~= 0 then if self:isPlayer() and target:isPlayer() then local party = self:getParty() if party then local targetParty = target:getParty() if targetParty and targetParty == party then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end end if ADVANCED_SECURE_MODE ~= 0 then if self:isPlayer() and target:isPlayer() then if self:hasSecureMode() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end return true end function Creature:onDrainHealth(attacker, typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary) if (not self) then return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary end if (not attacker) then return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary end -- New prey => Bonus damage if (attacker:isPlayer()) then if (self:isMonster() and not self:getMaster()) then for slot = CONST_PREY_SLOT_FIRST, CONST_PREY_SLOT_THIRD do if (attacker:getPreyCurrentMonster(slot) == self:getName() and attacker:getPreyBonusType(slot) == CONST_BONUS_DAMAGE_BOOST) then damagePrimary = damagePrimary + math.floor(damagePrimary * (attacker:getPreyBonusValue(slot) / 100)) break end end end -- New prey => Damage reduction elseif (attacker:isMonster()) then if (self:isPlayer()) then for slot = CONST_PREY_SLOT_FIRST, CONST_PREY_SLOT_THIRD do if (self:getPreyCurrentMonster(slot) == attacker:getName() and self:getPreyBonusType(slot) == CONST_BONUS_DAMAGE_REDUCTION) then damagePrimary = damagePrimary - math.floor(damagePrimary * (self:getPreyBonusValue(slot) / 100)) break end end end end return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary end Apareceu esse erro Lua Script Error: [Event Interface] data/events/scripts/creature.lua:Creature@onTargetCombat data/events/scripts/creature.lua:92: attempt to index local 'self' (a nil value) stack traceback: [C]: in function '__index' data/events/scripts/creature.lua:92: in function [C]: in function 'doTargetCombatHealth'
Postado Novembro 12, 2019 5 anos Substitua sua função por: function Creature:onTargetCombat(target) if not self then return true end if not __picif[target.uid] then if target:isMonster() then target:registerEvent("RewardSystemSlogan") __picif[target.uid] = {} end end if target:isPlayer() then if self:isMonster() then local protectionStorage = target:getStorageValue(Storage.combatProtectionStorage) if target:getIp() == 0 then -- If player is disconnected, monster shall ignore to attack the player if target:isPzLocked() then end if protectionStorage <= 0 then addEvent(removeCombatProtection, 30 * 1000, target.uid) target:setStorageValue(Storage.combatProtectionStorage, 1) elseif protectionStorage == 1 then self:searchTarget() return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end return true end if protectionStorage >= os.time() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end if ((target:isMonster() and self:isPlayer() and target:getType():isPet() and target:getMaster() == self) or (self:isMonster() and target:isPlayer() and self:getType():isPet() and self:getMaster() == target)) then return RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE end if PARTY_PROTECTION ~= 0 then if self:isPlayer() and target:isPlayer() then local party = self:getParty() if party then local targetParty = target:getParty() if targetParty and targetParty == party then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end end if ADVANCED_SECURE_MODE ~= 0 then if self:isPlayer() and target:isPlayer() then if self:hasSecureMode() then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end if self:isPlayer() then if target and target:getName() == staminaBonus.target then local name = self:getName() if not staminaBonus.events[name] then staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name) end end end return true end Editado Novembro 12, 2019 5 anos por Marco Oliveira (veja o histórico de edições)
Postado Novembro 12, 2019 5 anos Autor Eu tinha substituído errado, funcionou 100%. Obrigado!! Editado Novembro 12, 2019 5 anos por luciano01 (veja o histórico de edições)
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.