Unmantained Guida Ayuda con un error en el questlib.lua

Una guida contrassegnata come Unmantained contiene informazioni su un argomento obsoleto, non più utile o files non aggiornati da parte del creatore.
Stato
Discussione chiusa ad ulteriori risposte.

tazbunny

Utente Bronze
26 Gennaio 2013
4
1
0
43
Ultima modifica da un moderatore:
I need a little help with a problem I have in questlib.lua fails, and I think it's because I have tucked functions .. but as I say I think that's


could you tell me where you put the lua functions?


because I get this error:
locale / germany / quest / questlib.lua: 1558: attempt to index field '?' (a nil value)


and the line to which it refers is:
{['type'] = apply.MAX_HP, ['name'] = "Sangue Vitale", ['max_points'] = 30, ['min_level'] = PetSystem [1]. StartingLevel, ['desc'] = "HP +100 ", ['mult'] = 100, ['tag'] =" HP "},


can you tell me how I can fix?

hola
necesito una ayudita con un problema que tengo en el questlib.lua que me da error y creo que es porque no tengo metida las funciones.. pero como te digo creo que es eso


me podrías decir donde se ponen las funciones de los lua?

porque me sale este error:
locale/germany/quest/questlib.lua:1558: attempt to index field `?' (a nil value)

y la linea a la que se refiere es:
{['type']=apply.MAX_HP,['name']="Sangue Vitale",['max_points']=30,['min_level']=PetSystem[1].StartingLevel,['desc']="+100 HP",['mult']=100,['tag']=" HP"},

me pueden decir como lo puedo solucionar?


 
I need a little help with a problem I have in questlib.lua fails, and I think it's because I have tucked functions .. but as I say I think that's


could you tell me where you put the lua functions?


because I get this error:
locale / germany / quest / questlib.lua: 1558: attempt to index field '?' (a nil value)


and the line to which it refers is:
{['type'] = apply.MAX_HP, ['name'] = "Sangue Vitale", ['max_points'] = 30, ['min_level'] = PetSystem [1]. StartingLevel, ['desc'] = "HP +100 ", ['mult'] = 100, ['tag'] =" HP "},


can you tell me how I can fix?

- - - Updated - - -

ok man
 
I need a little help with a problem I have in questlib.lua fails, and I think it's because I have tucked functions .. but as I say I think that's


could you tell me where you put the lua functions?



because I get this error:
locale / germany / quest / questlib.lua: 1558: attempt to index field '?' (a nil value)


and the line to which it refers is:
{['type'] = apply.MAX_HP, ['name'] = "Sangue Vitale", ['max_points'] = 30, ['min_level'] = PetSystem [1]. StartingLevel, ['desc'] = "HP +100 ", ['mult'] = 100, ['tag'] =" HP "},


can you tell me how I can fix?

hola
necesito una ayudita con un problema que tengo en el questlib.lua que me da error y creo que es porque no tengo metida las funciones.. pero como te digo creo que es eso


me podrías decir donde se ponen las funciones de los lua?

porque me sale este error:
locale/germany/quest/questlib.lua:1558: attempt to index field `?' (a nil value)

y la linea a la que se refiere es:
{['type']=apply.MAX_HP,['name']="Sangue Vitale",['max_points']=30,['min_level']=PetSystem[1].StartingLevel,['desc']="+100 HP",['mult']=100,['tag']=" HP"},

me pueden decir como lo puedo solucionar?


Io non capire tua lingua tu andare su tuo forum talebano-cinese-marocchino o cosa sei.
 
Ma chi se ne frega. È l'intervento razzista che rappresentava perfettamente gli italiani medi.

Li ho solo detto nel mio solito modo volgare di andarsene su un forum da dove proviene perché qui non lo capisce nessuno (perlomeno io).
E io non sono italiano. il mio paese ha subito gli atti del razzismo molto più di voi quindi shut up.
 
Li ho solo detto nel mio solito modo volgare di andarsene su un forum da dove proviene perché qui non lo capisce nessuno (perlomeno io).
E io non sono italiano. il mio paese ha subito gli atti del razzismo molto più di voi quindi shut up.
Spagnolo. Ha parlato in fottuto spagnolo (o portoghese, non conosco le due lingue). Trovami un nesso tra lo spagnolo/portoghese e la battuta dei "talebani, marocchini e cinesi" e magari posso capire cosa intendeva il tuo neurone solitario.
 
  • Mi piace
Reazioni: Ryosaku
Spagnolo. Ha parlato in fottuto spagnolo (o portoghese, non conosco le due lingue). Trovami un nesso tra lo spagnolo/portoghese e la battuta dei "talebani, marocchini e cinesi" e magari posso capire cosa intendeva il tuo neurone solitario.

Non e una battuta ho solo sparato a caso dei paesi perché non riuscivo a capire la lingua.
 
I have your problem tazbunny, but there isn't solution in this forum :omfg:

- - - Updated - - -

Paste it into your questlib.lua
Codice:
QuestFolder = get_locale_base_path().."/quest/"

--**
--** Funzioni pet system base
--** by  BlackYuko 
--** Skype: manu___88
--**




-- Classe
PetSystem = {['Folder'] = QuestFolder.."io/pet/", ['Flag'] = "active_pet"}
-- Pet 1
PetSystem[1] = {['Name'] = "Fenice Rossa", ['Level'] = 22, ['Item'] = 50512, ['StartingLevel'] = 50, ['FinalLevel'] = 210}
PetSystem[1].Skill = 	{
						{['type']=apply.MAX_HP,['name']="Sangue Vitale",['max_points']=30,['min_level']=PetSystem[1].StartingLevel,['desc']="+100HP",['mult']=100,['tag']=" HP"},
						{['type']=apply.INT,['name']="Luce Divina",['max_points']=15,['min_level']=PetSystem[1].StartingLevel,['desc']="+1 INT",['mult']=1,['tag']=" intelligenza"},
						{['type']=apply.STR,['name']="Forza Celeste",['max_points']=15,['min_level']=PetSystem[1].StartingLevel,['desc']="+1 STR",['mult']=1,['tag']=" forza"},
						{['type']=apply.DEX,['name']="Astuzia",['max_points']=15,['min_level']=PetSystem[1].StartingLevel,['desc']="+1 DEX",['mult']=1,['tag']=" destrezza"},
						{['type']=apply.STEAL_HP,['name']="Assorbimento",['max_points']=15,['min_level']=PetSystem[1].StartingLevel+25,['desc']="+1% ass. HP",['mult']=1,['tag']="% assorbimento HP"},
						{['type']=apply.ATT_GRADE_BONUS,['name']="Furia",['max_points']=20,['min_level']=PetSystem[1].StartingLevel+50,['desc']="+10 valore attacco",['mult']=20,['tag']=" valore di attacco"},
						{['type']=apply.CRITICAL_PCT,['name']="Precisione Mortale",['max_points']=20,['min_level']=PetSystem[1].StartingLevel+75,['desc']="+1% possibilita' sui colpi critici",['mult']=1,['tag']="% critici"},
						{['type']=apply.ATTBONUS_MONSTER,['name']="Frenesia",['max_points']=20,['min_level']=PetSystem[1].StartingLevel+100,['desc']="+1% forte contro mob",['mult']=1,['tag']="% forte contro mob"},
						{['type']=apply.BLOCK,['name']="Tattica",['max_points']=10,['min_level']=PetSystem[1].StartingLevel+125,['desc']="+1% blocco corporale",['mult']=1,['tag']="% blocco corporale"}
						}
-- Pet 2
PetSystem[2] = {['Name'] = "Fenice Blu", ['Level'] = 23, ['Item'] = 50513, ['StartingLevel'] = 50, ['FinalLevel'] = 205}
PetSystem[2].Skill = 	{
						{['type']=apply.MAX_HP,['name']="Sangue Vitale",['max_points']=30,['min_level']=PetSystem[2].StartingLevel,['desc']="+100HP",['mult']=100,['tag']=" HP"},
						{['type']=apply.INT,['name']="Luce Divina",['max_points']=20,['min_level']=PetSystem[2].StartingLevel,['desc']="+1 INT",['mult']=1,['tag']=" intelligenza"},
						{['type']=apply.STR,['name']="Forza Celeste",['max_points']=20,['min_level']=PetSystem[2].StartingLevel,['desc']="+1 STR",['mult']=1,['tag']=" forza"},
						{['type']=apply.DEX,['name']="Astuzia",['max_points']=20,['min_level']=PetSystem[2].StartingLevel,['desc']="+1 DEX",['mult']=1,['tag']=" destrezza"},
						{['type']=apply.RESIST_SWORD,['name']="Protezione Spada",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+25,['desc']="+1% difesa spada",['mult']=1,['tag']="% dif. spada"},
						{['type']=apply.RESIST_TWOHAND,['name']="Protezione Spadone",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+50,['desc']="+1% difesa spadone",['mult']=1,['tag']="% d. spadone"},
						{['type']=apply.RESIST_DAGGER,['name']="Protezione Pugnale",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+75,['desc']="+1% difesa pugnale",['mult']=1,['tag']="% dif. pugnale"},
						{['type']=apply.RESIST_BOW,['name']="Protezione Arco",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+100,['desc']="+1% difesa freccia",['mult']=1,['tag']="% dif. freccia"},
						{['type']=apply.RESIST_MAGIC,['name']="Protezione Magia",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+125,['desc']="+1% difesa magia",['mult']=1,['tag']="% dif. magia"},
						{['type']=apply.ATTBONUS_HUMAN,['name']="Frenesia Mortale",['max_points']=15,['min_level']=PetSystem[2].StartingLevel+150,['desc']="+1% mezziuomini",['mult']=1,['tag']="% mezziuomini"}
						}


--**
--** Menu Pet
--**
function PetSystem.ShowMenu(PetIndex)
	if horse.is_mine() then
		say_title("Pet "..PetSystem[PetIndex].Name) 
		local skill_points = PetSystem.GetSkillPoints(PetIndex)
		say_light_yellow("Punti abilita': "..skill_points)
		say("Seleziona l'operazione:[ENTER]")
		local s = select("Informazioni","Gestisci Abilita'","Stato Abilita'","Manda Via","Chiudi")
----------********** Informazioni ***********----------		
		if s == 1 then
			say_title("Informazioni")
			say("Il Pet e' un piccolo animale che accompagnera' il")
			say("personaggio durante le sue avventure. Il suo")
			say("comportamento e' simile a quello del cavallo,")
			say("ma una volta evocato, il Pet dara' al personaggio")
			say("dei bonus a seconda dei punti abilita' che gli")
			say("sono assegnati. Puoi assegnare i punti abilita'")
			say("dal menu '' Gestici Abilita' ''. A seconda del Pet,")
			say("in una certa fascia di livelli ti verrà dato 1 punto")
			say("abilita' per livello da assegnare al Pet.[ENTER]")
			wait()
			say_title("Informazioni")
			say("Ogni abilita' ti dara' un certo bonus, che")
			say("aumentera' ad ogni punto che le assegnerai.")
			say("Il massimo numero di punti assegnabile varia")
			say("da un'abilita' all'altra. Puoi assegnare e togliere")
			say("punti alle abilita' come preferisci.[ENTER]")
----------********** Gestisci Abilita' ***********----------			
		elseif s == 2 then
			say_title("Gestici Abilita' - Pet "..PetSystem[PetIndex].Name.."")
			local skill_value = {}
			local skill_menu = {}
			local skill_indexes = {}
			skill_value = PetSystem.LoadSkill(PetIndex)
			if table.getn(skill_value) == 0 then
				say("Il tuo pet non possiede abilita'.[ENTER]")
				return
			end
			for i = 1, table.getn(PetSystem[PetIndex].Skill) do
				if pc.get_level() >= PetSystem[PetIndex].Skill[i].min_level then
					table.insert(skill_menu, PetSystem[PetIndex].Skill[i].name..": "..skill_value[i].." punti")
					table.insert(skill_indexes, i)
				end
			end					
			table.insert(skill_menu, "Annulla")
			if table.getn(skill_menu) > 7 then
				window_height = (table.getn(skill_menu)-7)*30+300
			else
				window_height = 300
			end							
			say("Seleziona l'abilita':")
			say_size(350, window_height)	
			local s = select_table(skill_menu)
			if s == table.getn(skill_menu) then
				return			
			end			
			local skill_idx = skill_indexes[s]
			say_title(PetSystem[PetIndex].Skill[skill_idx].name)
			say_orange("Punti attuali abilita': "..skill_value[skill_idx].." [ENTER]")
			say_light_blue("A ogni punto: "..PetSystem[PetIndex].Skill[skill_idx].desc.."")
			say_light_blue("Massimo numero di punti: "..PetSystem[PetIndex].Skill[skill_idx].max_points.."[ENTER]")
			say("Seleziona l'operazione:[ENTER]")
			local s = select("Aumenta Abilita'","Diminuisci Abilita'","Annulla")
			if s == 3 then 
				return
			----------********** Aumenta Abilita' ***********----------
			elseif s == 1 then	
				say_title(PetSystem[PetIndex].Skill[skill_idx].name)
				if skill_points == 0 then
					say("Non possiedi punti abilita', non puoi aumentarla.[ENTER]")
					return
				elseif skill_value[skill_idx] == PetSystem[PetIndex].Skill[skill_idx].max_points then
					say("L'abilita' ha raggiunto il livello massimo.[ENTER]")
					return
				end
				say_orange("Punti abilita' disponibili: "..skill_points)
				say("Di quanti punti vuoi aumentare l'abilita'?[ENTER]")
				local points = tonumber(input())
				say_title(PetSystem[PetIndex].Skill[skill_idx].name)
				if points == nil or points < 1 then
					say("Hai inserito un valore non valido.[ENTER]")
					return
				elseif points > skill_points then
					say("Non possiedi abbastanza punti abilita'.[ENTER]")
					return
				elseif (skill_value[skill_idx]+points) > PetSystem[PetIndex].Skill[skill_idx].max_points then
					say("Se aumentassi l'abilita' di "..points.." punti,")
					say("supererebbe il valore massimo. Inserisci un")
					say("valore minore.[ENTER]")
					return
				end
				skill_value[skill_idx] = skill_value[skill_idx]+points
				PetSystem.ChangeSkillPoints(PetIndex, -points)
				PetSystem.SaveSkill(PetIndex, skill_value)
				PetSystem.AddBonus(PetIndex)
				say("L'abilita' e' stata aumentata di "..points.." punto/i.[ENTER]")
			----------********** Diminuisci Abilita' ***********----------
			elseif s == 2 then
				say_title(PetSystem[PetIndex].Skill[skill_idx].name)
				if skill_value[skill_idx] == 0 then
					say("L'abilita' ha zero punti, non puoi diminuirla.[ENTER]")
					return
				end
				say("Di quanti punti vuoi diminuire l'abilita'?[ENTER]")
				local points = tonumber(input())				
				say_title(PetSystem[PetIndex].Skill[skill_idx].name)
				if points == nil or points < 1 then
					say("Hai inserito un valore non valido.[ENTER]")
					return
				elseif points > skill_value[skill_idx] then
					say("L'abilita' non possiede cosi' tanti punti.[ENTER]")
					return
				end
				skill_value[skill_idx] = skill_value[skill_idx]-points
				PetSystem.ChangeSkillPoints(PetIndex, points)
				PetSystem.SaveSkill(PetIndex, skill_value)
				PetSystem.AddBonus(PetIndex)
				say("L'abilita' e' stata diminuita di "..points.." punto/i.[ENTER]")				
			end	
----------********** Stato Pet ***********----------
		elseif s == 3 then
			local skill_value = {}
			skill_value = PetSystem.LoadSkill(PetIndex)		
			say_title("Stato Abilita' - Pet "..PetSystem[PetIndex].Name.."")
			say_light_blue("Salute: "..horse.get_health_pct().."%")
			say("")
			for i = 1, table.getn(PetSystem[PetIndex].Skill) do
				if pc.get_level() >= PetSystem[PetIndex].Skill[i].min_level then
					local total = skill_value[i]*PetSystem[PetIndex].Skill[i].mult
					say_light_yellow(PetSystem[PetIndex].Skill[i].name..": livello "..skill_value[i]..". Bonus: "..total..PetSystem[PetIndex].Skill[i].tag)
				end
			end
			say("")			
----------********** Manda via Pet ***********----------			
		elseif s == 4 then
			PetSystem.PetBack()
		elseif s == 5 then
			return
		end
	end
end


--**
--** Manda via il pet
--**
function PetSystem.PetBack()
	local err, liv, name = PetSystem.LoadHorseData()
	PetSystem.RemoveBonus()
	PetSystem.SetInactive()
	if err then
		say_title("Richiamo Pet")
		say("Impossibile caricare i dati del cavallo.")
		say("Se sei un GM, impostati il livello del")
		say("cavallo diverso da quello dei pet, e usa")
		say("di nuovo il richiamo del pet o il libro")
		say("del cavallo.[ENTER]")
		return
	end
	PetSystem.SetHorseData(liv, name)	
	horse.unsummon()
	chat("Hai mandato via il Pet")
end


--**
--** Imposta nome e livello al cavallo
--**
function PetSystem.SetHorseData(level, name)
	horse.set_level(level)
	horse.set_name(name)
end


--**
--** Carica le abilita' del pet specificato
--**
function PetSystem.LoadSkill(PetIndex)
	local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_skills"
	local PetSkill = {}
	if io.open(FileName, "r") == nil then
		io.output(FileName)
		for i = 1,table.getn(PetSystem[PetIndex].Skill) do
			io.write("0\n")
			table.insert(PetSkill, 0)
		end
		io.flush()
		io.close()
		return PetSkill
	end
	for line in io.lines(FileName) do
		table.insert(PetSkill, tonumber(line))
	end
	return PetSkill
end


--**
--** Salva le abilita' del pet specificato
--**
function PetSystem.SaveSkill(PetIndex, SkillList)
	local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_skills"
	io.output(FileName)
	for i,v in ipairs(SkillList) do
		io.write(tostring(v).."\n")
	end
	io.flush()
	io.close()
end


--**
--** Legge i punti abilità di un pet
--**
function PetSystem.GetSkillPoints(PetIndex)
	local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_stats"
	local n
	if io.open(FileName, "r") != nil then
		io.input(FileName)
		n = tonumber(io.read())
		io.input():close()
	else
		io.output(FileName)
		io.write("0")
		io.flush()
		io.close()
		n = 0
	end
	return n
end


--**
--** Modifica i punti abilità di un pet
--**
function PetSystem.ChangeSkillPoints(PetIndex, amount)
	local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_stats"
	local n
	if io.open(FileName, "r") != nil then
		io.input(FileName)
		n = tonumber(io.read())
		n = n+amount
		io.input():close()
	else
		n = amount
	end
	io.output(FileName)
	io.write(tostring(n).."\n")
	io.flush()
	io.close()
end


--**
--** Aggiunge i bonus del Pet specificato in base ai punti abilita' assegnati
--**
function PetSystem.AddBonus(PetIndex)
	PetSystem.RemoveBonus()
	local SkillList = {}
	SkillList = PetSystem.LoadSkill(PetIndex)
	for i = 1,table.getn(SkillList) do
		affect.add_hair(PetSystem[PetIndex].Skill[i].type, SkillList[i]*PetSystem[PetIndex].Skill[i].mult, 60*60*24*365)
	end
end


--**
--** Rimuove i bonus del Pet
--**
function PetSystem.RemoveBonus()
	affect.remove(520)
end


--**
--** Carica le informazioni sul cavallo (nome, livello)
--**
function PetSystem.LoadHorseData() 
	local FileName = PetSystem.Folder..pc.get_name().."_horse"
	if io.open(FileName, "r") != nil then
		io.input(FileName)
		local liv_cav = tonumber(io.read())
		local horse_name = io.read()
		if liv_cav == nil or horse_name == "" then
			io.input():close()
			return true
		end
		io.input():close()
		return false, liv_cav, horse_name
	end
	return true	
end


--**
--** Salva le informazioni sul cavallo (nome, livello)
--**
function PetSystem.SaveHorseData() 
	local FileName = PetSystem.Folder..pc.get_name().."_horse"
	if io.open(FileName, "w") != nil then
		local horseLev = horse.get_level()
		if PetSystem.IsPetLevel(horseLev) then
			return 2
		end
		io.output(FileName)
		io.write(tostring(horseLev).."\n")
		local horse_name = horse.get_name()
		if horse_name != "" then
			io.write(horse_name)
		else
			io.write("Cavallo")
		end
		io.flush()
		io.close()
		return 0
	end
	return 1
end


--**
--** Controlla se il livello del cavallo e' associato a un pet
--**
function PetSystem.IsPetLevel(level)
	for i=1,PetSystem.GetPetNumber() do
		if level == PetSystem[i].Level then
			return true
		end
	end
	return false
end


--**
--** Controlla se il pet ha imparato una nuova abilità
--**
function PetSystem.NewSkillLearnt(PCLevel)
	if PCLevel == PetSystem.StartingLevel then
		return
	end
	for i,v in ipairs(PetSystem) do
		for j = 1,table.getn(v.Skill) do
			if PCLevel == v.Skill[j].min_level then
				return true
			end
		end
	end
	return false
end


--**
--** Ritorna il numero totale di pet definiti
--**
function PetSystem.GetPetNumber()
	return table.getn(PetSystem)
end


--**
--** Ritorna il numero totale di pet definiti
--**
function PetSystem.GetPetNumber()
	return table.getn(PetSystem)
end


--** Imposta il pet attivo
function PetSystem.SetActivePet(petIndex)
	pc.setqf(PetSystem.Flag, petIndex)
end


--** Ritorna se il pet system è attivo
function PetSystem.IsActive()
	return (pc.getqf(PetSystem.Flag) > 0)
end


--** Disattiva il pet system
function PetSystem.SetInactive()
	pc.setqf(PetSystem.Flag, 0)
end


--** Ritorna il numero del pet attivo
function PetSystem.GetActivePet()
	return pc.getqf(PetSystem.Flag)
end
 
  • Mi piace
Reazioni: tazbunny
ESPAÑOL

Hola chicos,
veo que se a montado un buen revuelo por el idioma, soy español y no tengo ningún problema en traducir el italiano, inglés, alemán, etc.
pero si se van a poner a discriminar la al resto de personas que quieran comunicarse y saber más de vosotros, es como si se pusieran a seleccionar las personas y no lo veo justo, solo e echo una pregunta para ver si alguien me lo podría solucionar, ya que este foro es famoso por las personas que están en el y el conocimiento que tienen sobre el metin2. creo que en mi país o en los foros españoles nadie a discriminado a nadie.. solo les pido que tengan un poco de paciencia o simplemente no opinen si no entienden.

Gracias y disculpen las molestias.-

ITALIANO

Ciao a tutti,
Lo vedo scalpore buon assemblato dal linguaggio, sono spagnolo e non ho alcun problema tradurre italiano, inglese, tedesco, ecc.
ma se avete intenzione di arrivare a discriminare le altre persone che vogliono comunicare e la maggior parte di voi sanno, è come se messo a scegliere le persone e non solo vederlo, e mi manca solo una domanda per vedere se qualcuno mi potrebbe risolvere , in quanto questo forum è famoso per le persone che sono in e la loro conoscenza su metin2. Credo che nel mio paese o nei forum spagnoli discriminato nessuno nessuno .. Vi chiedo solo un po 'di pazienza o semplicemente non capiscono se non PENSARE.


Grazie e scusate. -

INGLES

Hi guys,
I see it a good stir assembled by the language, I'm Spanish and I have no problem translating Italian, English, German, etc..
but if you are going to get to discriminate the other people who want to communicate and most of you know, is like if put to choose people and not just see it, and I miss just a question to see if someone could fix me , as this forum is famous for the people who are in and their knowledge about metin2. I think in my country or in the Spanish forums discriminated anyone anyone .. I ask you only have a little patience or simply not understand unless THINK.


Thanks and sorry. -

- - - Updated - - -

I have your problem tazbunny, but there isn't solution in this forum :omfg:

- - - Updated - - -

Paste it into your questlib.lua
Codice:
QuestFolder = get_locale_base_path().."/quest/"

--**
--** Funzioni pet system base
--** by  BlackYuko 
--** Skype: manu___88
--**




-- Classe
PetSystem = {['Folder'] = QuestFolder.."io/pet/", ['Flag'] = "active_pet"}
-- Pet 1
PetSystem[1] = {['Name'] = "Fenice Rossa", ['Level'] = 22, ['Item'] = 50512, ['StartingLevel'] = 50, ['FinalLevel'] = 210}
PetSystem[1].Skill =     {
                        {['type']=apply.MAX_HP,['name']="Sangue Vitale",['max_points']=30,['min_level']=PetSystem[1].StartingLevel,['desc']="+100HP",['mult']=100,['tag']=" HP"},
                        {['type']=apply.INT,['name']="Luce Divina",['max_points']=15,['min_level']=PetSystem[1].StartingLevel,['desc']="+1 INT",['mult']=1,['tag']=" intelligenza"},
                        {['type']=apply.STR,['name']="Forza Celeste",['max_points']=15,['min_level']=PetSystem[1].StartingLevel,['desc']="+1 STR",['mult']=1,['tag']=" forza"},
                        {['type']=apply.DEX,['name']="Astuzia",['max_points']=15,['min_level']=PetSystem[1].StartingLevel,['desc']="+1 DEX",['mult']=1,['tag']=" destrezza"},
                        {['type']=apply.STEAL_HP,['name']="Assorbimento",['max_points']=15,['min_level']=PetSystem[1].StartingLevel+25,['desc']="+1% ass. HP",['mult']=1,['tag']="% assorbimento HP"},
                        {['type']=apply.ATT_GRADE_BONUS,['name']="Furia",['max_points']=20,['min_level']=PetSystem[1].StartingLevel+50,['desc']="+10 valore attacco",['mult']=20,['tag']=" valore di attacco"},
                        {['type']=apply.CRITICAL_PCT,['name']="Precisione Mortale",['max_points']=20,['min_level']=PetSystem[1].StartingLevel+75,['desc']="+1% possibilita' sui colpi critici",['mult']=1,['tag']="% critici"},
                        {['type']=apply.ATTBONUS_MONSTER,['name']="Frenesia",['max_points']=20,['min_level']=PetSystem[1].StartingLevel+100,['desc']="+1% forte contro mob",['mult']=1,['tag']="% forte contro mob"},
                        {['type']=apply.BLOCK,['name']="Tattica",['max_points']=10,['min_level']=PetSystem[1].StartingLevel+125,['desc']="+1% blocco corporale",['mult']=1,['tag']="% blocco corporale"}
                        }
-- Pet 2
PetSystem[2] = {['Name'] = "Fenice Blu", ['Level'] = 23, ['Item'] = 50513, ['StartingLevel'] = 50, ['FinalLevel'] = 205}
PetSystem[2].Skill =     {
                        {['type']=apply.MAX_HP,['name']="Sangue Vitale",['max_points']=30,['min_level']=PetSystem[2].StartingLevel,['desc']="+100HP",['mult']=100,['tag']=" HP"},
                        {['type']=apply.INT,['name']="Luce Divina",['max_points']=20,['min_level']=PetSystem[2].StartingLevel,['desc']="+1 INT",['mult']=1,['tag']=" intelligenza"},
                        {['type']=apply.STR,['name']="Forza Celeste",['max_points']=20,['min_level']=PetSystem[2].StartingLevel,['desc']="+1 STR",['mult']=1,['tag']=" forza"},
                        {['type']=apply.DEX,['name']="Astuzia",['max_points']=20,['min_level']=PetSystem[2].StartingLevel,['desc']="+1 DEX",['mult']=1,['tag']=" destrezza"},
                        {['type']=apply.RESIST_SWORD,['name']="Protezione Spada",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+25,['desc']="+1% difesa spada",['mult']=1,['tag']="% dif. spada"},
                        {['type']=apply.RESIST_TWOHAND,['name']="Protezione Spadone",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+50,['desc']="+1% difesa spadone",['mult']=1,['tag']="% d. spadone"},
                        {['type']=apply.RESIST_DAGGER,['name']="Protezione Pugnale",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+75,['desc']="+1% difesa pugnale",['mult']=1,['tag']="% dif. pugnale"},
                        {['type']=apply.RESIST_BOW,['name']="Protezione Arco",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+100,['desc']="+1% difesa freccia",['mult']=1,['tag']="% dif. freccia"},
                        {['type']=apply.RESIST_MAGIC,['name']="Protezione Magia",['max_points']=10,['min_level']=PetSystem[2].StartingLevel+125,['desc']="+1% difesa magia",['mult']=1,['tag']="% dif. magia"},
                        {['type']=apply.ATTBONUS_HUMAN,['name']="Frenesia Mortale",['max_points']=15,['min_level']=PetSystem[2].StartingLevel+150,['desc']="+1% mezziuomini",['mult']=1,['tag']="% mezziuomini"}
                        }


--**
--** Menu Pet
--**
function PetSystem.ShowMenu(PetIndex)
    if horse.is_mine() then
        say_title("Pet "..PetSystem[PetIndex].Name) 
        local skill_points = PetSystem.GetSkillPoints(PetIndex)
        say_light_yellow("Punti abilita': "..skill_points)
        say("Seleziona l'operazione:[ENTER]")
        local s = select("Informazioni","Gestisci Abilita'","Stato Abilita'","Manda Via","Chiudi")
----------********** Informazioni ***********----------        
        if s == 1 then
            say_title("Informazioni")
            say("Il Pet e' un piccolo animale che accompagnera' il")
            say("personaggio durante le sue avventure. Il suo")
            say("comportamento e' simile a quello del cavallo,")
            say("ma una volta evocato, il Pet dara' al personaggio")
            say("dei bonus a seconda dei punti abilita' che gli")
            say("sono assegnati. Puoi assegnare i punti abilita'")
            say("dal menu '' Gestici Abilita' ''. A seconda del Pet,")
            say("in una certa fascia di livelli ti verrà dato 1 punto")
            say("abilita' per livello da assegnare al Pet.[ENTER]")
            wait()
            say_title("Informazioni")
            say("Ogni abilita' ti dara' un certo bonus, che")
            say("aumentera' ad ogni punto che le assegnerai.")
            say("Il massimo numero di punti assegnabile varia")
            say("da un'abilita' all'altra. Puoi assegnare e togliere")
            say("punti alle abilita' come preferisci.[ENTER]")
----------********** Gestisci Abilita' ***********----------            
        elseif s == 2 then
            say_title("Gestici Abilita' - Pet "..PetSystem[PetIndex].Name.."")
            local skill_value = {}
            local skill_menu = {}
            local skill_indexes = {}
            skill_value = PetSystem.LoadSkill(PetIndex)
            if table.getn(skill_value) == 0 then
                say("Il tuo pet non possiede abilita'.[ENTER]")
                return
            end
            for i = 1, table.getn(PetSystem[PetIndex].Skill) do
                if pc.get_level() >= PetSystem[PetIndex].Skill[i].min_level then
                    table.insert(skill_menu, PetSystem[PetIndex].Skill[i].name..": "..skill_value[i].." punti")
                    table.insert(skill_indexes, i)
                end
            end                    
            table.insert(skill_menu, "Annulla")
            if table.getn(skill_menu) > 7 then
                window_height = (table.getn(skill_menu)-7)*30+300
            else
                window_height = 300
            end                            
            say("Seleziona l'abilita':")
            say_size(350, window_height)    
            local s = select_table(skill_menu)
            if s == table.getn(skill_menu) then
                return            
            end            
            local skill_idx = skill_indexes[s]
            say_title(PetSystem[PetIndex].Skill[skill_idx].name)
            say_orange("Punti attuali abilita': "..skill_value[skill_idx].." [ENTER]")
            say_light_blue("A ogni punto: "..PetSystem[PetIndex].Skill[skill_idx].desc.."")
            say_light_blue("Massimo numero di punti: "..PetSystem[PetIndex].Skill[skill_idx].max_points.."[ENTER]")
            say("Seleziona l'operazione:[ENTER]")
            local s = select("Aumenta Abilita'","Diminuisci Abilita'","Annulla")
            if s == 3 then 
                return
            ----------********** Aumenta Abilita' ***********----------
            elseif s == 1 then    
                say_title(PetSystem[PetIndex].Skill[skill_idx].name)
                if skill_points == 0 then
                    say("Non possiedi punti abilita', non puoi aumentarla.[ENTER]")
                    return
                elseif skill_value[skill_idx] == PetSystem[PetIndex].Skill[skill_idx].max_points then
                    say("L'abilita' ha raggiunto il livello massimo.[ENTER]")
                    return
                end
                say_orange("Punti abilita' disponibili: "..skill_points)
                say("Di quanti punti vuoi aumentare l'abilita'?[ENTER]")
                local points = tonumber(input())
                say_title(PetSystem[PetIndex].Skill[skill_idx].name)
                if points == nil or points < 1 then
                    say("Hai inserito un valore non valido.[ENTER]")
                    return
                elseif points > skill_points then
                    say("Non possiedi abbastanza punti abilita'.[ENTER]")
                    return
                elseif (skill_value[skill_idx]+points) > PetSystem[PetIndex].Skill[skill_idx].max_points then
                    say("Se aumentassi l'abilita' di "..points.." punti,")
                    say("supererebbe il valore massimo. Inserisci un")
                    say("valore minore.[ENTER]")
                    return
                end
                skill_value[skill_idx] = skill_value[skill_idx]+points
                PetSystem.ChangeSkillPoints(PetIndex, -points)
                PetSystem.SaveSkill(PetIndex, skill_value)
                PetSystem.AddBonus(PetIndex)
                say("L'abilita' e' stata aumentata di "..points.." punto/i.[ENTER]")
            ----------********** Diminuisci Abilita' ***********----------
            elseif s == 2 then
                say_title(PetSystem[PetIndex].Skill[skill_idx].name)
                if skill_value[skill_idx] == 0 then
                    say("L'abilita' ha zero punti, non puoi diminuirla.[ENTER]")
                    return
                end
                say("Di quanti punti vuoi diminuire l'abilita'?[ENTER]")
                local points = tonumber(input())                
                say_title(PetSystem[PetIndex].Skill[skill_idx].name)
                if points == nil or points < 1 then
                    say("Hai inserito un valore non valido.[ENTER]")
                    return
                elseif points > skill_value[skill_idx] then
                    say("L'abilita' non possiede cosi' tanti punti.[ENTER]")
                    return
                end
                skill_value[skill_idx] = skill_value[skill_idx]-points
                PetSystem.ChangeSkillPoints(PetIndex, points)
                PetSystem.SaveSkill(PetIndex, skill_value)
                PetSystem.AddBonus(PetIndex)
                say("L'abilita' e' stata diminuita di "..points.." punto/i.[ENTER]")                
            end    
----------********** Stato Pet ***********----------
        elseif s == 3 then
            local skill_value = {}
            skill_value = PetSystem.LoadSkill(PetIndex)        
            say_title("Stato Abilita' - Pet "..PetSystem[PetIndex].Name.."")
            say_light_blue("Salute: "..horse.get_health_pct().."%")
            say("")
            for i = 1, table.getn(PetSystem[PetIndex].Skill) do
                if pc.get_level() >= PetSystem[PetIndex].Skill[i].min_level then
                    local total = skill_value[i]*PetSystem[PetIndex].Skill[i].mult
                    say_light_yellow(PetSystem[PetIndex].Skill[i].name..": livello "..skill_value[i]..". Bonus: "..total..PetSystem[PetIndex].Skill[i].tag)
                end
            end
            say("")            
----------********** Manda via Pet ***********----------            
        elseif s == 4 then
            PetSystem.PetBack()
        elseif s == 5 then
            return
        end
    end
end


--**
--** Manda via il pet
--**
function PetSystem.PetBack()
    local err, liv, name = PetSystem.LoadHorseData()
    PetSystem.RemoveBonus()
    PetSystem.SetInactive()
    if err then
        say_title("Richiamo Pet")
        say("Impossibile caricare i dati del cavallo.")
        say("Se sei un GM, impostati il livello del")
        say("cavallo diverso da quello dei pet, e usa")
        say("di nuovo il richiamo del pet o il libro")
        say("del cavallo.[ENTER]")
        return
    end
    PetSystem.SetHorseData(liv, name)    
    horse.unsummon()
    chat("Hai mandato via il Pet")
end


--**
--** Imposta nome e livello al cavallo
--**
function PetSystem.SetHorseData(level, name)
    horse.set_level(level)
    horse.set_name(name)
end


--**
--** Carica le abilita' del pet specificato
--**
function PetSystem.LoadSkill(PetIndex)
    local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_skills"
    local PetSkill = {}
    if io.open(FileName, "r") == nil then
        io.output(FileName)
        for i = 1,table.getn(PetSystem[PetIndex].Skill) do
            io.write("0\n")
            table.insert(PetSkill, 0)
        end
        io.flush()
        io.close()
        return PetSkill
    end
    for line in io.lines(FileName) do
        table.insert(PetSkill, tonumber(line))
    end
    return PetSkill
end


--**
--** Salva le abilita' del pet specificato
--**
function PetSystem.SaveSkill(PetIndex, SkillList)
    local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_skills"
    io.output(FileName)
    for i,v in ipairs(SkillList) do
        io.write(tostring(v).."\n")
    end
    io.flush()
    io.close()
end


--**
--** Legge i punti abilità di un pet
--**
function PetSystem.GetSkillPoints(PetIndex)
    local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_stats"
    local n
    if io.open(FileName, "r") != nil then
        io.input(FileName)
        n = tonumber(io.read())
        io.input():close()
    else
        io.output(FileName)
        io.write("0")
        io.flush()
        io.close()
        n = 0
    end
    return n
end


--**
--** Modifica i punti abilità di un pet
--**
function PetSystem.ChangeSkillPoints(PetIndex, amount)
    local FileName = PetSystem.Folder..pc.get_name().."_"..PetSystem[PetIndex].Name.."_stats"
    local n
    if io.open(FileName, "r") != nil then
        io.input(FileName)
        n = tonumber(io.read())
        n = n+amount
        io.input():close()
    else
        n = amount
    end
    io.output(FileName)
    io.write(tostring(n).."\n")
    io.flush()
    io.close()
end


--**
--** Aggiunge i bonus del Pet specificato in base ai punti abilita' assegnati
--**
function PetSystem.AddBonus(PetIndex)
    PetSystem.RemoveBonus()
    local SkillList = {}
    SkillList = PetSystem.LoadSkill(PetIndex)
    for i = 1,table.getn(SkillList) do
        affect.add_hair(PetSystem[PetIndex].Skill[i].type, SkillList[i]*PetSystem[PetIndex].Skill[i].mult, 60*60*24*365)
    end
end


--**
--** Rimuove i bonus del Pet
--**
function PetSystem.RemoveBonus()
    affect.remove(520)
end


--**
--** Carica le informazioni sul cavallo (nome, livello)
--**
function PetSystem.LoadHorseData() 
    local FileName = PetSystem.Folder..pc.get_name().."_horse"
    if io.open(FileName, "r") != nil then
        io.input(FileName)
        local liv_cav = tonumber(io.read())
        local horse_name = io.read()
        if liv_cav == nil or horse_name == "" then
            io.input():close()
            return true
        end
        io.input():close()
        return false, liv_cav, horse_name
    end
    return true    
end


--**
--** Salva le informazioni sul cavallo (nome, livello)
--**
function PetSystem.SaveHorseData() 
    local FileName = PetSystem.Folder..pc.get_name().."_horse"
    if io.open(FileName, "w") != nil then
        local horseLev = horse.get_level()
        if PetSystem.IsPetLevel(horseLev) then
            return 2
        end
        io.output(FileName)
        io.write(tostring(horseLev).."\n")
        local horse_name = horse.get_name()
        if horse_name != "" then
            io.write(horse_name)
        else
            io.write("Cavallo")
        end
        io.flush()
        io.close()
        return 0
    end
    return 1
end


--**
--** Controlla se il livello del cavallo e' associato a un pet
--**
function PetSystem.IsPetLevel(level)
    for i=1,PetSystem.GetPetNumber() do
        if level == PetSystem[i].Level then
            return true
        end
    end
    return false
end


--**
--** Controlla se il pet ha imparato una nuova abilità
--**
function PetSystem.NewSkillLearnt(PCLevel)
    if PCLevel == PetSystem.StartingLevel then
        return
    end
    for i,v in ipairs(PetSystem) do
        for j = 1,table.getn(v.Skill) do
            if PCLevel == v.Skill[j].min_level then
                return true
            end
        end
    end
    return false
end


--**
--** Ritorna il numero totale di pet definiti
--**
function PetSystem.GetPetNumber()
    return table.getn(PetSystem)
end


--**
--** Ritorna il numero totale di pet definiti
--**
function PetSystem.GetPetNumber()
    return table.getn(PetSystem)
end


--** Imposta il pet attivo
function PetSystem.SetActivePet(petIndex)
    pc.setqf(PetSystem.Flag, petIndex)
end


--** Ritorna se il pet system è attivo
function PetSystem.IsActive()
    return (pc.getqf(PetSystem.Flag) > 0)
end


--** Disattiva il pet system
function PetSystem.SetInactive()
    pc.setqf(PetSystem.Flag, 0)
end


--** Ritorna il numero del pet attivo
function PetSystem.GetActivePet()
    return pc.getqf(PetSystem.Flag)
end


Thanks man, I'll try
 
Stato
Discussione chiusa ad ulteriori risposte.