DoctaSax Posted August 14, 2014 Posted August 14, 2014 On the whole, pride's correct in that any if-line that compares something to string vars, array vars or UDFs has to have an eval. if eval somearrayvar[somekey] < somevalue if eval somestringvar == "somestring" if eval something == call someUDF I suppose you can do let somevariable := call someUDF or let somevariable := somearrayvar[somekey] then check if somevariable == somevalue ; etc instead of if eval somevalue == call someUDF if eval somevalue == somearrayvar[somekey] (provided 'somevariable' isn't a string var) While a bit more circumspect, it is a bit more reliable in complex if-lines & of course passing it to a var first is better if you're checking that multiple times in a script.
Guest carywinton Posted August 14, 2014 Posted August 14, 2014 Well so much for "101" scripting, you completely lost me after the first page and if you lost me, no one is going to hardly get any of it. I attempted scripting in FO3/FNV a couple of times and when I realized it was nothing like what I did years ago with the Aurora, I threw in the towel. I again attempted today to try and understand how to have an NPC move through a door , in this case a sewer manhole cover when the PC enters the area. I wanted the NPC to have a surprised look and the camera (FOV) for the PC zoom in to see this before the NPC disappears. Followed by an on screen message of some kind , "What was that?" , etc. And got about as far as naming the script in the script window and the message, lol. scn BBBunnyRunsScript Begin OnTriggerEnter Player ShowMessage "What was that?" End
Odessa Posted August 14, 2014 Posted August 14, 2014 Well, I think if you ask a simple question you'll still get a reply I don't think your code will work, ShowMessage accepts a message form (in Messages section of GECK), but swap it for MessageEx and it will work. Tomm343 and me have intro tutorials in the tutorial section...
DoctaSax Posted August 14, 2014 Posted August 14, 2014 That 's probably gonna take a few packages. A 'travel' one, a stand-still 'wander' or maybe a 'use item at' with a heading marker, and another 'travel' one to the cell beyond the door. Or better still, a 'patrol' one that uses the heading marker as one of its stops. With the package result script triggering the message. Not sure about the FOV - the only related function I know of is a console one, not a script one. (SetCameraFOV) You could fake it with a startconversation that sends you into dialog, doing the zoom-in that way, and park "What was that" in the topic for it, flagging it as "goodbye" so that it exits immediately. You can adapt FOV in the widget for the dialog line too, hand-pick an anim for the NPC while you're at it.
Guest tomm434 Posted August 14, 2014 Posted August 14, 2014 carywinton, also consider using Bethesda way of moving actor between cells - add "MoveToMarkerWithFade MyMarker" in Travel Package result script and set door as destination. That emulates actor entering door\hatch. Just so you know - before playing with FOV you need to store original FOV (not everyone plays with 75). I don't remember the exact function. But I recommend DoctaSax's way but only with Dialogue package with a good distance( so actor can initiate fake zoom with any distance you want). Create a topic with GetIsid condition of Sunny Smiles and give that dialogue package to NPC to receive fake zoom instead of conversation. You can add MovetoMarkerWithFade just after showMessage function and actor will dissapear after player clicked "OK" (not before!) "showmessage mymessage" or "MessageBox Ex "Message text"" ActorRef.movetomarkerwithfade MyMarker PS> oh and to make sure player is looking in right direction use SetANgle function. FIrst you need to Get appropriate angle for player float MyAngle let MyAngle:= Player.GetAngle Z + Player.GetHeadingAngle ActorRef Player.setAngle Z MyAngle place it just before "show message" line . This code will make player look exactly at the actor.
Guest Posted August 14, 2014 Posted August 14, 2014 Not sure about the FOV - the only related function I know of is a console one, not a script one. FOV works pretty fine, I use it for cutscenes and I change it gradually, or with mouse wheel to emulate a zoom. However, after the script, when I go back to my default, I need to refresh ini settings because it messes up the view. Only problem is there's no function to store the original fov and not everyone plays on default 75
Guest carywinton Posted August 15, 2014 Posted August 15, 2014 Well, I think if you ask a simple question you'll still get a reply I don't think your code will work, ShowMessage accepts a message form (in Messages section of GECK), but swap it for MessageEx and it will work. Tomm343 and me have intro tutorials in the tutorial section... Oh I was pretty sure that snippet of well whatever it is, was definitely not going to work. I will try to read up more, I just have really poor vision, I get tired after just reading half an hour and my health has not been great lately, pancreatitis, so my focus is terrible right now.
ArgusSCCT Posted August 16, 2014 Posted August 16, 2014 No, that's not right. You must always use eval if any of the things you're comparing with if are not native GECK types -- unless you use the compiler override. You must use let instead of set for assigning NVSE types like string vars and arrays. The bottom line is this: If you're doing something with a variable type introduced by NVSE, you must use functions provided by NVSE -- or the compiler override. Alright, I can understand that better. So basically use If Eval when comparing things like Arrays and string vars, which are introduced by NVSE. Thankfully, I don't have any of those comparisons, yet.
Nessa Posted August 16, 2014 Posted August 16, 2014 Isn't there a way to adjust gravity so you slowly fall down? Globally maybe? I could swear I've played a mod where they did that at some point but I can't remember which one! EDIT: Alright it was Oblivion. That Dwemer Airship mod has a parachute. (I shouldn't have looked either. The Extended CS beats the living #(*&$# out of the GECK... I'll hopefully finish before I get the Oblivion modding bug! ) Anyway, it uses a really nasty and arcane looking script to do... something. Which apparently lets the player gently fall. I'll have a look but does anyone else have an idea on how to accomplish this in an easier way?
ArgusSCCT Posted August 17, 2014 Posted August 17, 2014 Is there a way to have a long list of elements in multiple lines? Sort of like this: Let AllWeapons := ar_List WeapMB92FSMMP,WeapMM1911MMP,WeapMC96MMP,WeapC1849MMP,WeapMP412RMMP,WeapTokarevMMP, WeapMMM6UMMP,WeapRBullMMP,WeapSW38SMMPB,WeapMMakarovMMP,WeapMHKUSPMMP,WeapMGyrojetMMP,WeapMGSh18MMP, WeapMPB6P9MMP,WeapMLegMMP,WeapMStenMMP,WeapHMSMGMMP,WeapMUZIMMP,WeapMPPSh41MMP,WeapMM14MMP,WeapML96MMP,WeapMVSSMMP, WeapKABARMMP,WeapFBSykesMMP,WeapMG36KMMP,WeapMAUGA1MMP,WeapMFNCMMP,WeapBM4A1MMP,WeapMCM4A1MMP,WeapMAK47MMP, WeapMAK74MMP,WeapAKS74uNMMP,WeapMAN94MMP,WeapMAEK972MMP,WeapMVALMMP,WeapM9A91MMP,WeapMMG3SG1MMP,WeapIth37MMP, WeapDupletMMP,WeapMCAWSMMP,WeapPancorJHMMP,WeapR870SOMMP,WeapCShotgunBMMP,WeapCShotgun12GBMMP,WeapMKS23MMP, WeapMKS2312GMMP,WeapMTOZ34MMP,WeapTLR300,WeapNSR556, WeapMM16A2 GECK keeps complaining about it, but if there is a way to not have all that in one line, I'd like to do it that way. Otherwise it'll look too messy, especially because this isn't the only array I have of that size.
DoctaSax Posted August 17, 2014 Posted August 17, 2014 You can use ar_insertrange to append the contents of an array to another.Alternatively, the next nvse version will have a function that'll allow you to populate an array with the contents of a formlist.
ArgusSCCT Posted August 17, 2014 Posted August 17, 2014 I'll check that out then, thanks. Unfortunately, though, these weapons are not in any formlist, the plan is to add them to a formlist through ListAddForm. EDIT: seems like there will be problems, with this, even with insert range I'm exceeding the character limit per line.
Xilandro Posted August 17, 2014 Posted August 17, 2014 Does anyone know for sure if HasPerk does or doesn't return the perk rank when used in-script? The wiki kinda suggests it only returns a boolean. Lutana NVSE plugin just got updated to V5, now it has "HasPerkRank" function. (rank:int) playerref.HasPerkRank perk:ref It'll return the rank of the perk you pass to it and zero if you don't have it, so you can use it as a general replacement for HasPerk. also take a look at this info: I also found and defined the "alternate" perk list, which is used with AddPerk, RemovePerk, and HasPerk when you pass "1" as a second argument, so HasPerkRank will search that list if you pass the same to it. In case you're wondering about the little-known "alternate" perk list: Perks in this list don't apply their effects to the player, but to other actors that are set as followers using SetPlayerTeammate. For example: player.AddPerk Toughness 1 This will add the Toughness perk's +3 DT effect to all of the player's followers and not to the player.To get rid of this effect on followers: player.RemovePerk Toughness 1Of course, you can check for perks in this list with: player.HasPerk Toughness 1or newly: player.HasPerkRank 1which will return the rank.
ArgusSCCT Posted August 17, 2014 Posted August 17, 2014 I was wondering if someone could eye up one of my scripts, one I'm not particularly happy with, but I had to do it this way because the alternative was to spam ListAddForm like a thousand times. Anyway here it is: array_var WeaponArray array_var ListOfAllWeaponLists array_var ListOfAllFormLists array_var Entry int iCounter int iSize int bUpdate ref refFormList ref refWeapon Begin GameMode Let AllWeapons := ar_construct Array Let AllWeapons1 := ar_construct Array Let AllWeapons2 := ar_construct Array Let AllWeapons3 := ar_construct Array Let ProfessionalWeapons := ar_construct Array Let HoldoutWeapons := ar_construct Array Let HoldoutWeapons1 := ar_construct Array Let RangedWeapons := ar_construct Array Let RangedWeapons1 := ar_construct Array Let RangedWeapons2 := ar_construct Array Let CowboyWeapons := ar_construct Array Let MachineGuns := ar_construct Array Let Rifles := ar_construct Array Let PoisonWeapons := ar_construct Array Let Shotguns := ar_construct Array Let ShotgunSurgeonWeapons := ar_construct Array Let DemolitionsExpertWeapons := ar_construct Array Let GruntWeapons := ar_construct Array Let WeaponArray := ar_construct Array Let ListOfAllWeaponLists := ar_construct Array Let ListOfAllFormLists := ar_construct Array ;All weapons formlist Let AllWeapons := ar_List WeapMB92FSMMP,WeapMM1911MMP,WeapMC96MMP,WeapC1849MMP,WeapMP412RMMP,WeapTokarevMMP,WeapMMM6UMMP,WeapRBullMMP,WeapSW38SMMPB,WeapMMakarovMMP,WeapMHKUSPMMP,WeapMGyrojetMMP,WeapMGSh18MMP,WeapMPB6P9MMP ar_InsertRange AllWeapons1 0 AllWeapons Let AllWeapons1 := ar_List WeapMLegMMP,WeapMStenMMP,WeapHMSMGMMP,WeapMUZIMMP,WeapMPPSh41MMP,WeapMM14MMP,WeapML96MMP,WeapMVSSMMP,WeapKABARMMP,WeapFBSykesMMP,WeapMG36KMMP,WeapMAUGA1MMP,WeapMFNCMMP,WeapBM4A1MMP,WeapMCM4A1MMP ar_InsertRange AllWeapons2 0 AllWeapons1 Let AllWeapons2 := ar_List WeapMAK47MMP,WeapMAK74MMP,WeapAKS74uNMMP,WeapMAN94MMP,WeapMAEK972MMP,WeapMVALMMP,WeapM9A91MMP,WeapMMG3SG1MMP,WeapIth37MMP,WeapDupletMMP,WeapMCAWSMMP,WeapPancorJHMMP,WeapR870SOMMP,WeapCShotgunBMMP ar_InsertRange AllWeapons3 0 AllWeapons2 Let AllWeapons3 := ar_List WeapCShotgun12GBMMP,WeapMKS23MMP,WeapMKS2312GMMP,WeapMTOZ34MMP,WeapTLR300,WeapNSR556,WeapMM16A2 ;The Profesional perk formlist Let ProfessionalWeapons := ar_List WeapMB92FSMMP,WeapMM1911MMP,WeapMC96MMP,WeapC1849MMP,WeapMP412RMMP,WeapTokarevMMP,WeapMMM6UMMP,WeapRBullMMP,WeapSW38SMMPB,WeapMMakarovMMP,WeapMHKUSPMMP,WeapMGyrojetMMP,WeapMGSh18MMP WeapMPB6P9MMP,WeapMStenMMP,WeapHMSMGMMP,WeapMUZIMMP ;Holdout weapons formlist Let HoldoutWeapons := ar_List WeapMB92FSMMP,WeapMM1911MMP,WeapMC96MMP,WeapC1849MMP,WeapMP412RMMP,WeapTokarevMMP,WeapMMM6UMMP,WeapRBullMMP,WeapSW38SMMPB,WeapMMakarovMMP,WeapMHKUSPMMP,WeapMGyrojetMMP,WeapMGSh18MMP ar_InsertRange HoldoutWeapons1 0 HoldoutWeapons Let HoldoutWeapons := ar_List WeapMPB6P9MMP,WeapMLegMMP,WeapMStenMMP,WeapMUZIMMP,WeapKABARMMP,WeapFBSykesMMP,WeapDupletMMP,WeapR870SOMMP ;Ranged weapons formlist Let RangedWeapons := ar_List WeapMB92FSMMP,WeapMM1911MMP,WeapMC96MMP,WeapC1849MMP,WeapMP412RMMP,WeapTokarevMMP,WeapMMM6UMMP,WeapRBullMMP,WeapSW38SMMPB,WeapMMakarovMMP,WeapMHKUSPMMP,WeapMGyrojetMMP,WeapMLegMMP,WeapMStenMMP ar_InsertRange RangedWeapons1 0 RangedWeapons Let RangedWeapons1 := ar_List WeapHMSMGMMP,WeapMUZIMMP,WeapMPPSh41MMP,WeapMM14MMP,WeapML96MMP,WeapMVSSMMP,WeapMG36KMMP,WeapMGSh18MMP,WeapMAUGA1MMP,WeapMFNCMMP,WeapBM4A1MMP,WeapMCM4A1MMP,WeapMAK47MMP,WeapMAK74MMP ar_InsertRange RangedWeapons2 0 RangedWeapons1 Let RangedWeapons2 := ar_List WeapAKS74uNMMP,WeapMAN94MMP,WeapMAEK972MMP,WeapMVALMMP,WeapM9A91MMP,WeapMMG3SG1MMP,WeapMKS23MMP,WeapMKS2312GMMP,WeapMTOZ34MMP,WeapTLR300,WeapNSR556,WeapMM16A2 ;Cowboy perk weapons formlist Let CowboyWeapons := ar_List WeapC1849MMP,WeapMP412RMMP,WeapMMM6UMMP,WeapRBullMMP,WeapKABARMMP,WeapFBSykesMMP,WeapDupletMMP,WeapR870SOMMP ;Machinegun weapons formlist Let MachineGuns:= ar_List WeapMStenMMP,WeapHMSMGMMP,WeapMUZIMMP,WeapMPPSh41MMP ;Rifle weapons formlist Let Rifles := ar_List WeapMM14MMP,WeapML96MMP,WeapMVSSMMP,WeapMG36KMMP,WeapMAUGA1MMP,WeapMFNCMMP,WeapBM4A1MMP,WeapMCM4A1MMP,WeapMAK47MMP,WeapMAK74MMP,WeapAKS74uNMMP,WeapMAN94MMP,WeapMAEK972MMP,WeapMVALMMP,WeapM9A91MMP,WeapMMG3SG1MMP,WeapTLR300,WeapNSR556,WeapMM16A2 ;Poison weapons formlist Let PoisonWeapons := ar_List WeapKABARMMP, WeapFBSykesMMP ;Shotgun weapons formlist Let Shotguns := ar_List WeapIth37MMP,WeapDupletMMP,WeapDupletMMP,WeapPancorJHMMP,WeapCShotgunBMMP,WeapCShotgun12GBMMP,WeapMKS2312GMMP,WeapMTOZ34MMP ;Shotgun weapons formlist Let ShotgunSurgeonWeapons := ar_List WeapIth37MMP,WeapDupletMMP,WeapDupletMMP,WeapPancorJHMMP,WeapCShotgunBMMP,WeapCShotgun12GBMMP,WeapMKS2312GMMP,WeapMTOZ34MMP ;Demolitions expert perk weapons formlist Let DemolitionsExpertWeapons := ar_List WeapMKS23MMP ;Grunt Perk weapons formlist Let GruntWeapons := ar_List WeapMStenMMP,WeapMM1911MMP,WeapTokarevMMP,WeapMC96MMP,WeapMAK74MMP,WeapMAK74MMP,WeapMAK47MMP,WeapKABARMMP,WeapFBSykesMMP,WeapBM4A1MMP,WeapMCM4A1MMP,WeapMG36KMMP,WeapMFNCMMP,WeapMAUGA1MMP ;The arrays of different weapon categories are added here Let ListOfAllWeaponLists := ar_List AllWeapons3,ProfessionalWeapons,HoldoutWeapons1,RangedWeapons2,CowboyWeapons,MachineGuns,Rifles,PoisonWeapons,Shotguns,ShotgunSurgeonWeapons,DemolitionsExpertWeapons,GruntWeapons ;This is an array with all the formlists Let ListOfAllFormLists := ar_List NVAllWeapons,TheProfessionalWeaponsList,NVImprovedHoldoutWeapons,WeaponListRangedALL,PerkCowboyWeapons,WeaponMachinegunList,WeaponRiflesList,VPoisonWeapons,WeaponShotgunList,ShotgunSurgeonWeaponsList,PerkDemolitionExpertWeapons,NVDLC02PerkGruntWeapons If (bUpdate == 0) While(iCounter <= 11) Let WeaponArray := ar_DeepCopy ListOfAllWeaponLists[iCounter] Let refFormList := ListOfAllFormLists[iCounter] ForEach Entry <- WeaponArray Let refWeapon := Entry["value"] Call WotnMWeaponFunction refWeapon, WeaponArray, 1 Loop Loop Let bUpdate := 1 ElseIf (bUpdate == 1) StopQuest WotnMFormListsMod EndIf End This is the function I used to add the stuff. scn WotnMWeaponFunction array_var ReferencedArray array_var Entry ref refItemToAdd ref refList int bFormList Begin Function {refItemToAdd, ReferencedArray, bFormList} ForEach Entry <- ReferencedArray Let refList := Entry["value"] If(bFormList == 0) AddItemToLeveledList refList refItemToAdd 1 1 100 Else ListAddForm refList refItemToAdd EndIf Loop End What I don't like about it, is the bunch of arrays. However all those weapons have to go into specific formlists, if I knew a way to reduce the number of arrays I would do it.
Xilandro Posted August 17, 2014 Posted August 17, 2014 @ArgusSCCT What's the ultimate goal of your code? Fill-up leveled list with listed weapons from arrays? If you can explain what exactly you need - maybe I can come up with something useful.
jaam Posted August 17, 2014 Posted August 17, 2014 Spamming ListAddForm is the current way of doing this. Personally I prepare the lines in excel and copy paste into a script.
Guest tomm434 Posted August 17, 2014 Posted August 17, 2014 "Get mod name" is very useful - now you can see load order of player in his export debug
DoctaSax Posted August 17, 2014 Posted August 17, 2014 I'll check that out then, thanks. Unfortunately, though, these weapons are not in any formlist, the plan is to add them to a formlist through ListAddForm. EDIT: seems like there will be problems, with this, even with insert range I'm exceeding the character limit per line. I was wondering if someone could eye up one of my scripts, one I'm not particularly happy with, but I had to do it this way because the alternative was to spam ListAddForm like a thousand times. .. What I don't like about it, is the bunch of arrays. However all those weapons have to go into specific formlists, if I knew a way to reduce the number of arrays I would do it. I'm not sure why you couldn't park those weapons in custom formlists in the geck, and convert those formlists to other formlists & lev lists in a while loop. Seems like a lot less typing. Also, for future reference, if you're populating arrays with ar_list or ar_map, you don't need to ar_construct them first.
ArgusSCCT Posted August 17, 2014 Posted August 17, 2014 That sounds like a better idea to do it that, way, just seems redundant. I actually thought of that before, I think I'll do it. The reason I don't want to spam stuff is that new weapons get added to this thing, I don't want to have to repeat ten lines every time a new one gets in. Which is precisely why I didn't like this, because it also becoming a huge mess. The script with leveled lists wasn't such a big deal, but in here its not so flexible to which places I can add them to.
Guest luthienanarion Posted August 17, 2014 Posted August 17, 2014 I just use my ListToArray function, which is getting an analogue in NVSE according to DoctaSax. "Get mod name" is very useful - now you can see load order of player in his export debug I stripped the file extension from the string, so it might look a little odd to see the same name multiple times in a full load order listing. I'll add an optional parameter to preserve the extension.
Guest tomm434 Posted August 17, 2014 Posted August 17, 2014 Odessa, oh. is there a reason you didn't add that to your debug log export?
ArgusSCCT Posted August 17, 2014 Posted August 17, 2014 Yeah I used ListToArray, well when I found out about it anyway. Remade those scripts into these ones: Form Lists array_var WeaponLists array_var FormLists array_var Weapons array_var Entry ref refList ref refWeaponList ref refWeapon int bUpdate int iCounter Begin GameMode Let WeaponLists := ar_List WotnMAllWeapons,WotnMProfessionalWeapons,WotnMHoldoutWeapons,WotnMRangedWeapons,WotnMMachineguns,WotnMRifles,WotnMCowboyWeapons,WotnMShotguns,WotnMShotgunSurgeonWeapons,WotnMGruntWeapons Let FormLists := ar_List NVAllWeapons,TheProfessionalWeaponsList,NVImprovedHoldoutWeapons,WeaponListRangedALL,WeaponMachinegunList,WeaponRiflesList,PerkCowboyWeapons,WeaponShotgunList,ShotgunSurgeonWeaponsList,NVDLC02PerkGruntWeapons If (bUpdate == 0) ListAddForm WeaponListMeleeALL WeapFBSykesMMP ListAddForm VPoisonWeapons WeapFBSykesMMP ListAddForm WeaponListMeleeALL WeapKABARMMP ListAddForm VPoisonWeapons WeapKABARMMP ListAddForm PerkDemolitionExpertWeapons WeapMKS23MMP While (iCounter <= 9) Let refWeaponList := WeaponLists[iCounter] Let refList := FormLists[iCounter] Let Weapons := ListToArray refWeaponList ForEach Entry <- Weapons Let refWeapon := Entry["value"] ListAddForm refWeapon refList Loop Let iCounter += 1 Loop Let bUpdate := 1 ElseIf (bUpdate == 1) StopQuest WotnMFormListsMod EndIf End Leveled Lists array_var LeveledLists array_var LeveledItems array_var List array_var Entry int bUpdate int bDoOnce int iCounter1 int iCounter2 ref refItem ref refLeveledList ref refFormList Begin GameMode Let LeveledItems := ar_List WotnMWeaponsTier1,WotnMWeaponsTier2,WotnMWeaponsTier3,WotnMAttachmentsTier1,WotnMAttachmentsTier2,WotnMAttachmentsTier3 Let LeveledLists := ar_List WotnMNPCTier1,WotnMNPCTier2,WotnMNPCTier3,WotnMVendorsTier1,WotnMVendorsTier2,WotnMVendorsTier3,WotnMAttachmentsVendorsTier1,WotnMAttachmentsVendorsTier2,WotnMAttachmentsVendorsTier3 If (bUpdate == 0) While(iCounter2 <= 8) Let refItem := LeveledItems[iCounter1] Let refFormList := LeveledLists[iCounter2] Let List := ListToArray refFormList ForEach Entry <- List Let refLeveledList := Entry["value"] AddItemToLeveledList refLeveledList refItem 1 1 100 Loop Let iCounter1 += 1 Let iCounter2 += 1 If (iCounter1 == 2 && bDoOnce == 0) Let iCounter1 := 0 Let bDoOnce := 1 EndIf Loop Let bUpdate := 1 ElseIf (bUpdate == 1) StopQuest WotnMLeveledListsMod EndIf End They look way better than that monstrosity from before. Only thing that I don't like is using AddItemToLeveledList, but it's being done with that thing about it being nested into another list. I don't suppose, there's a way to check that all this stuff got into the proper form lists? The leveled list part will be working once I see enemies and vendors carrying these things around. The good thing now is that, if another weapon was to be added, all I need to do is add one more thing to those form lists/leveled lists through GECK.
DoctaSax Posted August 17, 2014 Posted August 17, 2014 Odessa, oh. is there a reason you didn't add that to your debug log export? Odessa's already mentioned it in the debug dumps section on the wiki. Very handy overview, that, switching spunk over to use most of that too, get all professional-like.
Guest tomm434 Posted August 18, 2014 Posted August 18, 2014 Nice! Thk DoctaSax. And Odessa too for her contribution to bethesda wiki.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now