Jump to content

A loop to reset all perks took me 1 mins ... Papyrus is Inefficient??.


Forkson

Recommended Posts

I made a formlist to store all Perks by CK, and write a script to run over them and clean ...

 

It's really spend me a long time to take effect...

 

are there any ways to make it more faster??

 

here's my code ....

 

***********************************************************************

 

Scriptname WineResetPerkScript  extends ActiveMagicEffect

import skse
import Debug

Actor Property myself Auto
FormList Property PerkList  Auto  

//check skse version
bool Function checkSKSEVersion()
int major = GetVersion()
int minor = GetVersionMinor()
int betav = GetVersionBeta()

if (major != 1) 
	return false
Endif

if (minor != 5)
	return false
Endif

if (betav != 9)
	return false
Endif

return true
endFunction

//clean all perks and return used perk points
int Function cleanPerksAndReturnPointsNumber()
int i = 0
int PerkPoints = 0 
Perk thisPerk

while(i <  PerkList.GetSize())
	thisPerk = PerkList.GetAt(i) as Perk
	if(myself.HasPerk(thisPerk))
;			messageBox(PerkPoints+" "+thisPerk.GetFormID()+":"+thisPerk.GetName())
		myself.RemovePerk(thisPerk)
		PerkPoints += 1
	endIf
	i += 1
endWhile

i = 0

while(i <  PerkList.GetSize())
	thisPerk = PerkList.GetAt(i) as Perk
	if(myself.HasPerk(thisPerk))
		myself.RemovePerk(thisPerk)
		PerkPoints -= 1
	endIf
	i += 1
endWhile

return PerkPoints
endFunction


Function resetPerks()
myself = Game.GetPlayer()
int UnusedPoints = Game.GetPerkPoints()
int PerkPoints =  cleanPerksAndReturnPointsNumber()
Game.SetPerkPoints(UnusedPoints + PerkPoints)
messageBox("Reset Perk Over:"+PerkPoints)
endFunction
 
Event OnEffectStart(Actor Target, Actor Caster)
	if (Target == Game.GetPlayer())
	messageBox("Reset Perk Start")
	if (checkSKSEVersion())
		resetPerks()
	else
		messageBox("Error SKSE Version")
	endif
endif
EndEvent

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...