View previous topic :: View next topic |
Author |
Message |
Epitaffio
Joined: 13 Jul 2010 Posts: 29 Location: Italy
|
Posted: Fri Jul 16, 2010 11:23 Post subject: funcs plugin, demo module or examples |
|
|
I'm on linux.
Is there any demo module for this plugin or some example of how to use the functions in that?
I would to create a script to do something similar to this:
1) Remove all the feats and the ability from a pc.
2) Add feats and ability from my choice.
3) Set the pc HP.
I'm not skilled at nwn script and i'm having some issues to use the funcs functions : ( |
|
Back to top |
|
|
ShaDoOoW
Joined: 20 Aug 2005 Posts: 584
|
Posted: Fri Jul 16, 2010 13:02 Post subject: Re: funcs plugin, demo module or examples |
|
|
Epitaffio wrote: | I'm not skilled at nwn script and i'm having some issues to use the funcs functions : ( |
NWNX is primary designed for those skilled in nwscript...
If you would on win I could paste you some examples, but I fear those functions on win are not the same as linux ones... _________________ Community Patch / NWNX Patch / NWNX Files / NWNX Connect |
|
Back to top |
|
|
Epitaffio
Joined: 13 Jul 2010 Posts: 29 Location: Italy
|
Posted: Fri Jul 16, 2010 14:16 Post subject: Re: funcs plugin, demo module or examples |
|
|
ShaDoOoW wrote: | Epitaffio wrote: | I'm not skilled at nwn script and i'm having some issues to use the funcs functions : ( |
NWNX is primary designed for those skilled in nwscript...
If you would on win I could paste you some examples, but I fear those functions on win are not the same as linux ones... |
I know : ( , but rome wasn't built in a day
If you could post these example, you do me a big favor.
As soon as i can (i'm not at home right now) i will post what i have done and where i have issues (i did certainly stupid mistakes).
Grazie. |
|
Back to top |
|
|
ShaDoOoW
Joined: 20 Aug 2005 Posts: 584
|
Posted: Fri Jul 16, 2010 20:55 Post subject: |
|
|
feat removal, this example will remove monk speed feat
Code: | if(GetHasFeat(FEAT_MONK_ENDURANCE,oPC)
{
RemoveKnownFeat(oPC,FEAT_MONK_ENDURANCE);
} |
to remove all feats, there would be more way to do that, I guess GetKnownFeatByLevel would be the best way, but since I dont work at linux anymore, I don't know whats the result so I will use in my example another way:
Code: |
ForceRest(oPC);//this will replenish any feats with uses per day
int nFeat = 0;
while(nFeat < 1116) //1115 is the last feat without any custom content
{
if(GetHasFeat(nFeat,oPC))
{
RemoveKnownFeat(oPC,nFeat);
}
}
|
I don't have example for Hitpoints at all, but I know PC can have only 255 hitpoints each level, so you must loop all levels, get how many hitpoint is there, distract from 255 then from total you want to add and add that number and check next levels until total hitpoints to add reach 0... _________________ Community Patch / NWNX Patch / NWNX Files / NWNX Connect |
|
Back to top |
|
|
Epitaffio
Joined: 13 Jul 2010 Posts: 29 Location: Italy
|
Posted: Fri Jul 16, 2010 23:35 Post subject: |
|
|
Hum to remove all the feat i was convinced that the parameter to pass at the RemoveKnownFeat function was only the constant of the feat..
This is what i've done at this time (i have cleaned the code from all the try : ) )
Code: |
//Gets the total number of feats known by oCreature.
int GetTotalKnownFeats (object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETTOTALKNOWNFEATS", " ");
return StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETTOTALKNOWNFEATS"));
}
//Gets the feat at nIndex in oCreature's feat list.
int GetKnownFeat(object oCreature, int nIndex) {
SetLocalString(oCreature, "NWNX!FUNCS!GETKNOWNFEAT", " ");
return StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETKNOWNFEAT"));
}
//Returns TRUE if the target inherently knows a feat (as opposed to by any equipment they may possess)
int GetKnowsFeat(int nFeatId, object oCreature) {
SetLocalString(oCreature, "NWNX!FUNCS!GETKNOWSFEAT", IntToString(nFeatId) + " ");
return StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!GETKNOWSFEAT"));
}
//Removes nFeat from oCreature if it knows the feat inherently.
int RemoveKnownFeat(object oCreature, int nFeat) {
SetLocalString(oCreature, "NWNX!FUNCS!REMOVEKNOWNFEAT", IntToString(nFeat) + " ");
return StringToInt(GetLocalString(oCreature, "NWNX!FUNCS!REMOVEKNOWNFEAT"));
}
void main(){
//Preparo le variabili
object oPC = GetLastUsedBy();
int iPClevel = GetHitDice(oPC);
SendMessageToPC(oPC, "Livello: "+IntToString(iPClevel) );
if(iPClevel == 1){
int iPCnTalenti = GetTotalKnownFeats(oPC);
int iCounting;
SendMessageToPC(oPC, "Talenti: "+IntToString(iPCnTalenti) );
for (iCounting = 0; iCounting < iPCnTalenti; iCounting++){
int iPCtalento = GetKnownFeat(oPC, iCounting);
SendMessageToPC(oPC, "iCounting: "+IntToString(iCounting)+". Talento: "+IntToString(iPCtalento) );
}
} // FINE if livello 1
}
|
The code in the cycle was just a try, the GetKnownFeat result 3 to all feat but I did't know how to find the constant of the feat..
So to remove all the feat i must cycle through all the feat instead of all the pc's feat?
Thanks for all of the hints!
-----------------------------
Edit:
Cycle edited with the ShaDoOoW hint for the remove feat function.
Code: |
for (iCounting = 0; iCounting < iPCnTalenti; iCounting++){
int iPCtalento = GetKnownFeat(oPC, iCounting);
SendMessageToPC(oPC, "iCounting: "+IntToString(iCounting)+". Talento: "+IntToString(iPCtalento) );
RemoveKnownFeat(oPC, iPCtalento);
}
|
But i'm having an issue with this. Let's explain..
Pc with 13 feats, start the cycle:
Code: |
iCounting 0, feat id 3
iCounting 1, feat id 170
iCounting 2, feat id 233
iCounting 3, feat id 241
iCounting 4, feat id 243
iCounting 5, feat id 375
iCounting 6, feat id 10
iCounting 7, feat id -1
iCounting 8, feat id -1
iCounting 9, feat id -1
iCounting 10, feat id -1
iCounting 11, feat id -1
iCounting 12, feat id -1
|
The first 7 feats have been deleted but not the last 6..
Rerunning the cycle, 6 feats:
Code: |
iCounting 0, feat id 46
iCounting 1, feat id 237
iCounting 2, feat id 354
iCounting 3, feat id -1
iCounting 4, feat id -1
iCounting 5, feat id -1
|
As above, only the half of the total feats have been deleted. And so on until there are 0 feats.
What can be O.o? |
|
Back to top |
|
|
Baaleos
Joined: 02 Sep 2007 Posts: 830
|
Posted: Sat Jul 17, 2010 2:33 Post subject: |
|
|
Its just a shot in the dark...
Code: |
for (iCounting = 0; iCounting < iPCnTalenti; iCounting++){
int iPCtalento = GetKnownFeat(oPC, iCounting);
SendMessageToPC(oPC, "iCounting: "+IntToString(iCounting)+". Talento: "+IntToString(iPCtalento) );
RemoveKnownFeat(oPC, iPCtalento);
}
|
This code, has iPCtalento being set to the value of a feat, while it has iCounting increasing.
Eg - What if the feat number/const for the feat in index 7 is Armor Proficency Medium, which has a feat number of 4. This script would say 7 is greater than 4, so we exit out of the loop.
This 'may' be causing it to skip some feats, but as for why your getting -1 in return values.
Thats generally a return value to indicate an error or empty result.
I would try a while loop instead of a for loop.
eg - While the feat number is positive, keep looping until you get a bad return value.
Code: |
void RemoveAllFeats(object oPC)
{
int iNum = 1; // Not sure where the index starts, 0 or 1
int iFeat = GetKnownFeat(oPC,iNum);
while(iFeat) //While the feat is valid
{
if(GetKnowsFeat(iFeat,oPC)) //If we actually know it
{
RemoveKnownFeat(oPC,iFeat); //Remove it
}
iNum++ //Move to next feat
iFeat = GetKnownFeat(oPC,iNum); // Assign it into iFeat, and loop again
}
}
|
This code, will keep looping until all feats are gone, or at least until the plugin returns a 0 or negative value for whether or not the Player has a feat. |
|
Back to top |
|
|
ShaDoOoW
Joined: 20 Aug 2005 Posts: 584
|
Posted: Sat Jul 17, 2010 3:28 Post subject: |
|
|
nevermind _________________ Community Patch / NWNX Patch / NWNX Files / NWNX Connect
Last edited by ShaDoOoW on Sat Jul 17, 2010 16:40; edited 1 time in total |
|
Back to top |
|
|
Baaleos
Joined: 02 Sep 2007 Posts: 830
|
Posted: Sat Jul 17, 2010 3:54 Post subject: |
|
|
I thought about that too, the only bad thing is that it loops over 1000 times, whereas the methods provided, allow for smaller loops. |
|
Back to top |
|
|
ShaDoOoW
Joined: 20 Aug 2005 Posts: 584
|
Posted: Sat Jul 17, 2010 5:13 Post subject: |
|
|
Yea, you are right, I didnt even looked into your post when I responded... _________________ Community Patch / NWNX Patch / NWNX Files / NWNX Connect |
|
Back to top |
|
|
Epitaffio
Joined: 13 Jul 2010 Posts: 29 Location: Italy
|
Posted: Sat Jul 17, 2010 15:21 Post subject: |
|
|
Fixed with this:
Code: |
for (iCounting=(iPCnTalenti-1); iCounting>-1; iCounting--){
int iPCtalento = GetKnownFeat(oPC, iCounting);
SendMessageToPC(oPC, "iCounting: "+IntToString(iCounting)+". Talento: "+IntToString(iPCtalento) );
RemoveKnownFeat(oPC, iPCtalento);
}
|
It's time for ability and HP... |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|