Ir para conteúdo

Featured Replies

Postado

Olá Tudo bem? Então eu estou usando esse script para cada lvl que upa ganha "Skills Points" estou com 2 dúvida. 

 

1º Queria que quando o personagem upa aparecesse uma mensagem na tela alguma coisa do tipo "+1 Skill Points!" Vi que no Script tem uma area de mensagem, porém não está funcioando. 

self:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "New skill points available. Type " .. skillPointsTalkaction .. " to open character mastery window.")

2° Queria criar mais um botão de "Reset" que precisaria de um ITEM, Ai quando clicasse no botão o player ganharia todos os pontos gastos novamente e resetaria os status do mesmo. mantendo lvl ganho ao upar, queria que só resetasse os Skills que ele distribuiu. Tipo se o player colocou 5 pontos em vida, o player tem 100 de vida, com esses 5 pontos, ficou com 150, ai ao usar o botao de reset ele receberia os 5 pontos perderia esses 50 de vida extra e voltaria com os 100 de vida normal. Segue o script a baixo. MUITO OBRIGADO A QUEM PUDER ME AJUDAR.  Peguei esse script em outro fórum ( https://otland.net/threads/tfs-1-1-skill-points-modalwindow.229280/ ) , Desculpa se não pode postar link de outros fóruns aqui.

 

DF4hMqN.jpg.f6f424241a380cf97107e98605b575d5.jpg

 

creaturescripts.xml:

Spoiler

    <event type="modalwindow" name="skillPoints_modal" script="sp.lua"/>
    <event type="advance" name="skillPoints_advance" script="sp.lua"/>
    <event type="login" name="skillPoints_register" script="sp.lua"/>

 

sp.lua Creaturescript

Spoiler

function onModalWindow(player, modalWindowId, buttonId, choiceId)
    player:skillWindowChoice(modalWindowId, buttonId, choiceId)
    return true
end

function onAdvance(player, skill, oldLevel, newLevel)
    if skill == SKILL_LEVEL then
        player:skillPointsAdvance(newLevel)
    end
    return true
end

function onLogin(player)
    player:registerEvent("skillPoints_advance")
    player:registerEvent("skillPoints_modal")
    return true
end

 

talkactions.xml:

Spoiler

 <talkaction words="!points" script="sp.lua"/>

 

sp.lua Talkaction

Spoiler

function onSay(player, words, param)
    player:sendSkillPointsWindow()
    return false
end

 

dofile('data/sp.lua')

Spoiler

-- config
--promoted vocations included in function
local gainVoc = {
	[0] = {health = 10, mana = 10, magic = 1, skill = 1, cap = 10},
	[1] = {health = 10, mana = 10, magic = 1, skill = 1, cap = 10},
	[2] = {health = 10, mana = 10, magic = 1, skill = 1, cap = 10},
	[3] = {health = 10, mana = 10, magic = 1, skill = 1, cap = 10},
	[4] = {health = 10, mana = 10, magic = 1, skill = 1, cap = 10}
}

local skillStorage = 62490
local modalId = 4869
local TextModalId = 4870 -- so player may return to skill window
local skillPointsPerLevel = 3 -- points per level
local skillPointsAdvanceStorage = 62491 -- storage to avoid giving points twice for same level
local skillPointsTalkaction = "!points" -- so player knows command when he gets level up

local skills = {
-- name, get value, set value
	[1] = {'Health', function(player) return player:getMaxHealth() end, function(player) local gain = gainVoc[player:getBaseVocId()].health player:setMaxHealth(player:getMaxHealth() + gain) return gain end, 10},
	[2] = {'Mana', function(player) return player:getMaxMana() end, function(player) local gain = gainVoc[player:getBaseVocId()].mana player:setMaxMana(player:getMaxMana() + gain) return gain end, 10},
	[3] = {'Capacity', function(player) return player:getCapacity() / 100 end, function(player) local gain = gainVoc[player:getBaseVocId()].cap player:setCapacity(player:getCapacity() + (gain * 100)) return gain end, 10},
	[4] = {'Magic', function(player) return player:getBaseMagicLevel() end, function(player) local gain = gainVoc[player:getBaseVocId()].magic player:addSkillLevels(SKILL_MAGLEVEL, gain) return gain end, 10},
	[5] = {'Fist', function(player) return player:getSkillLevel(SKILL_FIST) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_FIST, gain) return gain end, 10},
	[6] = {'Club', function(player) return player:getSkillLevel(SKILL_CLUB) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_CLUB, gain) return gain end, 10},
	[7] = {'Sword', function(player) return player:getSkillLevel(SKILL_SWORD) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_SWORD, gain) return gain end, 10},
	[8] = {'Axe', function(player) return player:getSkillLevel(SKILL_AXE) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_AXE, gain) return gain end, 10},
	[9] = {'Distance', function(player) return player:getSkillLevel(SKILL_DISTANCE) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_DISTANCE, gain) return gain end, 10},
	[10] = {'Shielding', function(player) return player:getSkillLevel(SKILL_SHIELD) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_SHIELD, gain) return gain end, 10},
	[11] = {'Fishing', function(player) return player:getSkillLevel(SKILL_FISHING) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_FISHING, gain) return gain end, 10}
}

local skillForVoc = {
	[1] = {1, 2, 3, 4, 10, 11}, -- sorcerer
	[2] = {1, 2, 3, 4, 10, 11}, -- druid
	[3] = {1, 2, 3, 4, 9, 10, 11}, -- paladin
	[4] = {1, 2, 3, 5, 6, 7, 8, 10, 11}, -- knight
}

function Player:getBaseVocId()
	local basevoc = self:getVocation():getDemotion()
	if basevoc then
		return basevoc:getId()
	end
	return self:getVocation():getId()
end

function getExpForLevel(level)
	level = level - 1
	return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3
end

function Player:addSkillLevels(skill, count)
	count = math.max(1, count or 1)
	
	if isInArray({SKILL_FIST, SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE, SKILL_SHIELD, SKILL_FISHING}, skill) then
		for i = 1, count do
			local xp = math.ceil(self:getVocation():getRequiredSkillTries(skill, self:getSkillLevel(skill) + 1) / configManager.getNumber(configKeys.RATE_SKILL))
			self:addSkillTries(skill, xp)
		end
		return true
	end

	if skill == SKILL_MAGLEVEL then
		for i = 1, count do
			local xp = math.ceil(self:getVocation():getRequiredManaSpent(self:getBaseMagicLevel() + 1) / configManager.getNumber(configKeys.RATE_MAGIC))
			self:addManaSpent(xp)
		end
		return true
	end

	if skill == SKILL_LEVEL then
		for i = 1, count do
			local lv = self:getLevel()
			local xp = getExpForLevel(lv + 1) - getExpForLevel(lv)
			self:addExperience(xp, false)
		end
		return true
	end
	return false
end

function Player:sendSkillPointsWindow()
	local pts = self:getStorageValue(skillStorage)
	if pts < 0 then
		self:setStorageValue(skillStorage, 0)
		pts = 0
	end

	local window = ModalWindow(modalId, "Character Mastery", "Available points: [" .. pts .. "]")
	window:addButton(1, "Assign")
	window:addButton(2, "Exit")

	for i = 1, #skills do
		if isInArray(skillForVoc[self:getBaseVocId()], i) then
			window:addChoice(i, skills[i][1] .. ": [" .. skills[i][2](self) .. "][cost: " .. skills[i][4] .. "]")
		end
	end
	
	window:setDefaultEnterButton(1)
	window:setDefaultEscapeButton(2)
	window:sendToPlayer(self)
	return true
end

function Player:skillWindowChoice(windowId, buttonId, choiceId)
	if windowId == modalId then
		if buttonId == 1 then
			if not skills[choiceId] then
				local textWindow = ModalWindow(TextModalId, "Error", "No skill selected.")
				textWindow:addButton(1, "Ok")
				textWindow:setDefaultEnterButton(1)
				textWindow:setDefaultEscapeButton(1)
				textWindow:sendToPlayer(self)
				return true
			end
			local pts = self:getStorageValue(skillStorage)
			if pts < 0 then
				self:setStorageValue(skillStorage, 0)
				pts = 0
			end
			
			if pts - skills[choiceId][4] >= 0 then
				local textWindow = ModalWindow(TextModalId, "Point assigned.", skills[choiceId][1] .. " +" .. skills[choiceId][3](self))
				textWindow:addButton(1, "Ok")
				textWindow:setDefaultEnterButton(1)
				textWindow:setDefaultEscapeButton(1)
				textWindow:sendToPlayer(self)
				self:setStorageValue(skillStorage, pts - skills[choiceId][4])
				return true
			end

			local textWindow = ModalWindow(TextModalId, "Error", "Not enough points")
			textWindow:addButton(1, "Ok")
			textWindow:setDefaultEnterButton(1)
			textWindow:setDefaultEscapeButton(1)
			textWindow:sendToPlayer(self)
			return true
		end
		return false
	end
	
	if not (windowId == TextModalId) then
		return false
	end
		
	self:sendSkillPointsWindow()
	return false
end

function Player:addSkillPoints(count)
	count = math.max(1, count or 1)
	
	local pts = self:getStorageValue(skillStorage)
	if pts < 0 then
		self:setStorageValue(skillStorage, 0)
		pts = 0
	end
	
	return self:setStorageValue(skillStorage, pts + count)
end

function Player:skillPointsAdvance(nlevel)
	if self:getStorageValue(skillPointsAdvanceStorage) < nlevel then
		self:addSkillPoints(skillPointsPerLevel)
		self:setStorageValue(skillPointsAdvanceStorage, nlevel)
		self:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "New skill points available. Type " .. skillPointsTalkaction .. " to open character mastery window.")
	end
	return true
end

 

Editado por hacuna matata (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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo