Jump to content

Need Help Understanding a Simple Script


TheObstinateNoviceSmith

Recommended Posts

Hey guys,

 

I am trying yet again to learn scripting and in addition to watching another playlist of scripting/papyrus tutorials, I am taking a look at some scripts and trying to simply understand what is happening in them.

 

I saw a video on hidden spells and what not (

) and one of them was called Transmogrify.

 

The spell turns whatever it hits into a non-hostile chicken. If the target is hit while a chicken, or after so many seconds pass, the person returns to their original form with all their equipment and things in tact.

 

I found it in the Creation Kit and opened the script source to try to understand how it worked and I don't fully understand it.

 

 

Here is the script, what I think I understand and what I do not understand:

 

 

Scriptname dunTransmogrifySCRIPT extends ActiveMagicEffect

ACTORBASE PROPERTY chicken AUTO >>>[ Guessing this stores the forms to use for the transformation... but I do not understand why ACTORBASE is used instead of ACTOR ]<<<
ACTORBASE PROPERTY rabbit AUTO
ACTORBASE PROPERTY mudcrab AUTO
OBJECTREFERENCE objStore >>>[ Guessing these are used to store whatever the target's original self/shape is and guess why there is no AUTO after them ]<<<
OBJECTREFERENCE newRefStore
dunTransmogrifyAnimal mainScript >>>[ I have no idea what this is and or what it is doing ]<<<
EVENT onEffectStart(ACTOR akTarget, ACTOR akCaster) >>>[ Guessing onEffectStart needs a caster and a victim and tells us what should happen once something is hit by this thing ]<<<
int rand = 0 >>>[ I don't think this is actually doing anything. Maybe intended to select a random number between 1,2, and 3 so that the animal target changed into would be random ]<<<
objStore = akTarget >>>[ Target and all their stuff is safely stored away making target unnecessary so they are then disabled and disappear ]<<<
akTarget.disable()
newRefStore = akTarget.placeAtMe(chicken) >>>[ I'm confused here. First I thought the new form was being stored somewhere but then it looks like it is placing the new form where the target was even though the target was disabled. ]<<<
; //setting the master script to be the one with the stored vars
mainScript = newRefstore AS dunTransmogrifyAnimal >>>[ I don't know what is happening here at all ]<<<
mainScript.storedActor = objStore
akTarget.stopCombat() >>>[ Guessing this makes the new form that is there, non-hostile ]<<<
endEVENT
EVENT onEffectFinish(ACTOR akTarget, ACTOR akCaster) >>>[ I understand this is what should happen when the effect wears off, but I thought anything that starts with a ; was a comment and didn't run as script and yet everything here is following a ; ]<<<
;newRefStore.disable()
;akTarget.moveTo(newRefStore)
;akTarget.enable()
endEVENT

>>>[ So basically in a addition to the above, I don't understand how the script is telling the game to change the target back into its original self. I also don't understand which part of the script is the part that tells the game that the effect should wear off as soon as the animal is struck. I also do not see how it knows the effect should last 30 seconds. ]<<<
So any help understanding this would be much appreciated.
Thanks,
Tons
Link to comment
Share on other sites

Based on the amount of "guessing" going on, I would suggest that you start with some very basic research. For example the effect of the function "StopCombat()" is readily available. If you don't have the wiki bookmarked yet, do so. This is the most useful page in my opinion:

http://www.creationkit.com/Category:Script_Objects

I open it immediately in its own browser window whenever I start modding, because I will inevitably need to refer to it.

If you click on ActorBase on that page, for example, it will explain:

Script for the manipulation of actor base objects. Actors are references of this.


Here is basically what is happening in the script:

1. The target is disabled.
2. A chicken is placed in the target's location. (It appears that at some point one of four creatures was meant to be chosen.)
3. A variable on a script attached to the chicken is set to the target.

The line

mainScript = newRefstore AS dunTransmogrifyAnimal

tells you that you need to look in the dunTransmogrifyAnimal script for the rest of your answers. There you will find that:

1. Upon being loaded, the script will wait 15 seconds and then disable the chicken and re-enable the original target.
2. Upon being hit, the chicken will be disabled and the target will be re-enabled.

So the duration should be 15 seconds, not 30. If you are seeing 30 in-game, then quite simply something weird is going on, because there is absolutely no reason the duration should be 30 seconds. (There may be some wiggle due to script lag, but unless you are running a quadrillion script-heavy mods or playing on a laptop circa 2005 you shouldn't be seeing 15 seconds of script lag for something this simple.)

Edited by lofgren
Link to comment
Share on other sites

Thank you for your reply and your attempt to help.

 

I have tried doing research (I constantly do in fact) and I think it is wonderful that some of this is basic to you, but unfortunately for me, it isn't. I wouldn't be here asking for help otherwise. Despite how difficult it is for me to understand this stuff, I am still trying to learn. I am making yet another attempt to learn it and that may seem like a waste of time to you since I don't understand what you consider basic, but I am not quite ready to give up on figuring this stuff out. ;)

 

I have tons of bookmarks, but things like this...

 

 

 

Script for the manipulation of actor base objects. Actors are references of this.

 

...are still confusing to me and may as well be written in gibberish.

 

The portion when you tell me what the script is doing is basically the part I understood. I could see that just based on watching the spell work in game, I just don't/didn't understand the how. Like which piece was doing what, but even with my guessing, I am pretty sure I guessed right on some of those parts.

 

You telling me to find the other script is a big help. HUGE.

 

Regarding the 15 vs 30 seconds, I didn't exactly count the time but 30 seconds seemed about right and under the effects, it says it is meant to last 30 seconds so I am not sure what is happening there since you say it shouldn't be a 30 second effect.

 

Anyway, I appreciate you taking the time to attempt to help me even if you incorrectly assumed I hadn't attempted at basic research to help myself. Thanks to you I understand a little better and I now know to go looking for another script.

Link to comment
Share on other sites

ActorBase = The base form when you look in the CK in the object window -> Actors

 

Actor References = The ActorBase placed in the Render Window or Spawned in game.

 

To spawn an actor you would use the ActorBase form ID, if you tried spawning an actor using the Actor Reference it wouldn't work..

When the Actor is spawned it is given a reference id that is generated by the game when spawned that is unique to that instance of spawned ActorBase.

Or in the case of dropping a ActorBase in the CK render window then the Actor reference id is generated by CK.

That Reference ID is for the instance of that Actor spawned.

 

So if you wanted to say target an Actor in the game world it would return a reference id and not the ActorBase base form id.

Basically any object that is dropped into the game world is given a reference for that instance of the object.

 

A Reference is how you differentiate the difference of multiple instances that come from the same base form id.

Link to comment
Share on other sites

Thank you for taking the time to try to explain this to me. Oddly enough I think I was dealing with an issue because of this a little while back.

 

Thanks again for trying to help.

Link to comment
Share on other sites

Basic stuff still has to be learned. I'm not suggesting that it is intuitive or obvious, just that it is fundamental to understanding how scripts work. If you don't know the fundamentals, then of course you are going to be confused.

 

Object references are basic, they are fundamental. You MUST know what an object reference is in order to script.

 

You mentioned that you are watching tutorials and that you are opening up scripts to see how they work. That's great! That's how you will learn. Ditto asking questions when you are confused. HOWEVER, it's pretty clear from your notes that you never bothered to look up "PlaceAtMe()," nor "property," nor "auto." If you want to learn scripting, start with the basics.

 

Properties

http://www.creationkit.com/Property_Reference

 

Variables

http://www.creationkit.com/Variable_Reference

 

References

http://www.creationkit.com/Reference

Link to comment
Share on other sites

Since the script is unused, where you say, >>>[ I understand this is what should happen when the effect wears off, but I thought anything that starts with a ; was a comment and didn't run as script and yet everything here is following a ; ]<<<

 

I believe the original scripter disabled everything because it didn't work or there were problems. So you'll have to uncomment them, and maybe change it, to make it work again.

Link to comment
Share on other sites

Basic stuff still has to be learned. I'm not suggesting that it is intuitive or obvious, just that it is fundamental to understanding how scripts work. If you don't know the fundamentals, then of course you are going to be confused.

 

Object references are basic, they are fundamental. You MUST know what an object reference is in order to script.

 

You mentioned that you are watching tutorials and that you are opening up scripts to see how they work. That's great! That's how you will learn. Ditto asking questions when you are confused. HOWEVER, it's pretty clear from your notes that you never bothered to look up "PlaceAtMe()," nor "property," nor "auto." If you want to learn scripting, start with the basics.

 

 

Of course basic things have to be learned but that is not what you said. You stated that I needed to do some "very basic research" as if I hadn't done so in the first place. So again, it is great that you can pick this up easier than me. Good for you.

 

I am glad that you can simply read from those links and understand what it is saying so that you do not need to ask for help after reading the information provided there. It is excellent that the information there doesn't look like gibberish to you... however, I imagine I am not the only one who struggles with trying to learn scripting as much as I do/have.

 

I am guessing that I am not the only person to have read seemingly countless pages of information from various links from CreationKit to Cispiscus and at the end of it, they still need some more guidance on the matter. Most of them may just give up and that could be due to asking for help often results in responses like yours that do more to make people feel stupid for not understanding rather than simply answering their request/questions if you can.

 

I am trying to learn. I'm not asking anyone to write a script for me or make a mod for me. I'm asking for an explanation of an existing script (2 scripts now) because that will help me more than reading about variables, and then reading about properties, and then reading about functions. All things I have already done.

 

I feel I am likely to make more progress if someone can explain an actual script to me. I chose the script. It is what I imagine is a simple script for those adept in this to understand, but it is more complex than the simple scripting I have done so far.

 

And just because I use the word "guess" doesn't mean I know nothing about properties, placeatme, or auto... or as you put it, never bothered to look them up so you've made yet another incorrect assumption about what I haven't done and/or tried prior to now but provided no answers or explanations.

 

Whether you are intentionally doing so or not, you're basically talking down to and/or chastising me for asking for help because you incorrectly assume that by me asking for help in the way that I have, clearly I haven't bothered to try to help myself.

 

You're entitled to believe whatever you want about what I've done and haven't done, etc, etc... but at this point, if you're not even going to attempt to help me in the way that I am asking, I'd rather you just move on. Ignore my plea for help. It does stink to ask for help and have people who could help simply ignore you for one reason or another, but it sucks even more to have one respond with the overall tone of your responses so far.

 

I do think that you believe you are genuinely trying to help, but if a person is asking to be taught one way and you keep insisting they learn your way well, that isn't very helpful at all.

 

Regardless of the fact that I feel you have made what has already been a very frustrating ordeal even more frustrating, I do sincerely thank you for the time you have taken to respond to me. I thank you for, even though you went about it the wrong way in this situation, genuinely trying to help.

 

Since the script is unused, where you say, >>>[ I understand this is what should happen when the effect wears off, but I thought anything that starts with a ; was a comment and didn't run as script and yet everything here is following a ; ]<<<

 

I believe the original scripter disabled everything because it didn't work or there were problems. So you'll have to uncomment them, and maybe change it, to make it work again.

 

Thanks for taking the time to respond and help me understand this thing. Okay, so I was right to believe all of that section is/was disabled. I wasn't sure because using the spell in game, seemed to do exactly what is in that section. I am currently trying to not only understand the other script this script calls to, but also how they are interacting with each other as well for this reason.

 

I imagine it must be the other script somehow handling what happens when the effect wears off.

 

There are the 2 scripts...

 

Script 1 - dunTransmogrifySCRIPT:

 

 

Scriptname dunTransmogrifySCRIPT extends ActiveMagicEffect

ACTORBASE PROPERTY chicken AUTO
ACTORBASE PROPERTY rabbit AUTO
ACTORBASE PROPERTY mudcrab AUTO
OBJECTREFERENCE objStore
OBJECTREFERENCE newRefStore
dunTransmogrifyAnimal mainScript
EVENT onEffectStart(ACTOR akTarget, ACTOR akCaster)
int rand = 0
objStore = akTarget
akTarget.disable()
newRefStore = akTarget.placeAtMe(chicken)
; //setting the master script to be the one with the stored vars
mainScript = newRefstore AS dunTransmogrifyAnimal
mainScript.storedActor = objStore
akTarget.stopCombat()
endEVENT
EVENT onEffectFinish(ACTOR akTarget, ACTOR akCaster)
;newRefStore.disable()
;akTarget.moveTo(newRefStore)
;akTarget.enable()
endEVENT

Script 2 - dunTransmogrifyAnimal:

 

 

Scriptname dunTransmogrifyAnimal extends ObjectReference

OBJECTREFERENCE PROPERTY storedActor AUTO
EXPLOSION PROPERTY appearExplosion AUTO
EFFECTSHADER PROPERTY shader AUTO
EVENT onLoad()
SELF.placeAtMe(appearExplosion)
shader.play(SELF, 2)
utility.wait(15)
IF(SELF.isEnabled() == TRUE)
storedActor.moveTo(SELF)
storedActor.enableNoWait()
storedActor.placeAtMe(appearExplosion)
storedActor.moveTo(SELF)
SELF.disableNoWait()
ENDIF
endEVENT
EVENT onHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked)
IF(akAggressor == game.getPlayer())
storedActor.moveTo(SELF)
storedActor.enableNoWait()
storedActor.placeAtMe(appearExplosion)
shader.play(storedActor, 2)
storedActor.moveTo(SELF)
SELF.disableNoWait()
ENDIF
endEVENT

Link to comment
Share on other sites

Hey man, I'm not trying to be a dick here, just coming naturally to me at the moment I guess. To atone I will try to do what you have asked.

 

Here is the first script:

Scriptname dunTransmogrifySCRIPT extends ActiveMagicEffect  

ACTORBASE PROPERTY chicken AUTO
ACTORBASE PROPERTY rabbit AUTO
ACTORBASE PROPERTY mudcrab AUTO

OBJECTREFERENCE objStore
OBJECTREFERENCE newRefStore

dunTransmogrifyAnimal mainScript

EVENT onEffectStart(ACTOR akTarget, ACTOR akCaster)

	int rand = 0
	objStore = akTarget
	akTarget.disable()
			
	newRefStore = akTarget.placeAtMe(chicken)
	
	; //setting the master script to be the one with the stored vars
	mainScript = newRefstore AS dunTransmogrifyAnimal
	mainScript.storedActor = objStore
	
	akTarget.stopCombat()

	
endEVENT


EVENT onEffectFinish(ACTOR akTarget, ACTOR akCaster)

	;newRefStore.disable()
	;akTarget.moveTo(newRefStore)
	;akTarget.enable()	

endEVENT

By line:

 

1: The name of the script and the type of script it extends. Scripts have access to all of the properties and functions of any script they extend, as well as scripts that those scripts extend etc, etc. So an objectreference script has access to form script functions and properties and an actor script has access to both objectreference and form functions.

 

3-5: Actorbase property declarations.

 

A property is a pair of functions that store information. There is a "get" function and a "set" function. The get function returns the information currently stored in the property and the set function tells the property what information to store.

 

Returning is what happens at the end of a function, when it basically "returns" to the function it was called by. When it does so, it can send a piece of information back to that previous function.

 

A function is a script block that executes from beginning to end when called by name.

 

"Auto" is a shorthand for the most basic get/set function pair. Appending auto to the end of a property declaration makes it function like a variable in most circumstances.

 

A variable is the most basic kind of storage unit. Variables are not controlled by functions (the way that properties are), which means that they cannot be read or written from outside of this script. Because they are not controlled by functions, "auto" does nothing for them, which is why you don't put "auto" after variables, only properties.

 

7-8: ObjectReference variables. Variable is explained above. When an object is placed in the game world, what actually happens is that a few bits of code are written that "reference" the object as it is described in the game data. Object references inherit most of their properties from their base forms, but also have some unique properties. The most obvious of these are positions on the x, y, z axes in the game world.

 

10: dunTransmogrifyAnimal variable. When you attach a script to a form in the CK, it becomes possible to "cast" the form as that script name and thereby gain access to that scripts properties and functions.

 

Casting is when you tell the script to treat one kind of form as a different kind of form in order to gain access to different script properties. To cast, you type "<VariableName> as <TypeToCastTo>." For example, I might cast an ObjectReference to an Actor in order to gain access to the GetActorValue() function. If a form is incompatible with the type that it is cast to, it will become a "none."

 

None is basically the equivalent of a 0 or false for object type variables. It means that there is no form in the variable currently.

 

12: Event declaration.

 

Events are functions that are called by the game engine. They are basically the same thing as functions, except that any script that has the event block will receive the event, rather than having to called directly. If that seems confusing, the takeaway is that this is the only way to get something to happen with your script without direct action on your part through another script.

 

The OnEffectStart event takes two parameters. Parameters are variables that are set outside the function, in this case by the game engine. akCaster is the caster of the spell and akTarget is anybody it hits. It is possible for these two parameters to be the same actor or even for akTarget to be a none.

 

Everything from here to the "endEvent" declaration will execute when spell is cast.

 

14 Random integer declaration. This was originally intended to randomly select one of four creatures for the target to transmogrify into: chicken, rabbit, mudcrab, or dremora. The randomness was never implemented so this line does nothing except create a new variable that equals 0.

 

15 Stores the akTarget parameter in a variable. Because this variable was declared outside of this event block, the variable will hold this information until the effect ends. This is unlike akTarget. Parameters and variables declared inside an event or function block will be recycled when the function or event finishes. By storing akTarget in a persistent variable, we can have access to it in any other functions we might want to implement in this script. It appears that originally this was done in order to reference the spell target in another function, but ultimately this line is also useless in the script's current form.

 

16 Disables akTarget. Disabling stops all AI and graphical processing.

 

18 PlaceAtMe creates a new reference to a base object and returns that reference. The variable newRefStore is set to refer to that reference so that it can be accessed later.

 

IF YOU ARE CONFUSED RIGHT NOW, PLEASE STOP READING AND LOOK UP REFERENCES AGAIN.

 

References are NOT a scripting concept. They are a core concept of 3d games. Understanding references is the bare minimum price of admission for scripting.

 

I GUESS THIS IS CONDESCENDING, BUT SERIOUSLY YOU SHOULD GET A BASIC IDEA OF HOW 3D GAMES WORK IN GENERAL BEFORE YOU START TRYING TO SCRIPT.

 

I said it before, but you said you didn't want to learn that way. So if you are really determined to learn about scripting before you learn about references, we'll just keep plugging away.

 

21 This line casts the newly created reference as dunTransmogrifyAnimal. If the dunTransmogrifyAnimal script is attached to the reference, then this reference will be stored in the variable mainScript. If the dunTransmogrifyAnimal script is NOT attached to the reference, then mainScript will be a none.

 

22 StoredActor is a property in the script dunTransmogrifyAnimal. This line sets that property to the same reference as objStore, which as we saw above is the same object as akTarget.

 

24: Stop combat forces an actor out of the combat state. If the actor has no enemies in sight, the actor will not re-initiate combat.

 

30-36: This was an initial attempt to end the effect through an OnEffectFinish block. The attempt was abandoned and the effect instead ends through the dunTransmogrifyAnimal script.

 

Second script:

Scriptname dunTransmogrifyAnimal extends ObjectReference  

OBJECTREFERENCE PROPERTY storedActor AUTO
EXPLOSION PROPERTY appearExplosion AUTO
EFFECTSHADER PROPERTY shader AUTO

EVENT onLoad()

	SELF.placeAtMe(appearExplosion)
	shader.play(SELF, 2)
	
	utility.wait(15)
	
	IF(SELF.isEnabled() == TRUE)
		storedActor.moveTo(SELF)
		storedActor.enableNoWait()	
		storedActor.placeAtMe(appearExplosion)
		storedActor.moveTo(SELF)
		SELF.disableNoWait()
	ENDIF

endEVENT


EVENT onHit(ObjectReference akAggressor, Form akWeapon, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) 

	IF(akAggressor == game.getPlayer())	
		storedActor.moveTo(SELF)
		storedActor.enableNoWait()
		storedActor.placeAtMe(appearExplosion)
		shader.play(storedActor, 2)
		storedActor.moveTo(SELF)
		SELF.disableNoWait()
	ENDIF

endEVENT

1. Script name. See above.

 

3-5: Property declarations. See above.

 

7: OnLoad event block. This block fires when the object's 3d has been fully loaded and is ready to be animated.

 

9: PlaceAtMe again. See above.

 

10: Play is a function on the EffectShader script. It is called here. The shader property then does its thing. I really don't have much more detail to provide on that. Again, not trying to be condescending here, but it, like, plays, y'know?

 

12: Wait is a function on the utility script. It pauses process for 15 seconds. Yes, 15. Not 30. It says so right there. I don't know where the 30 second duration is coming from because that is pretty clearly a 15 and not a 30.

 

14: If block.

 

If blocks are a core scripting concept. An IF block performs a test, and if the test returns anything except 0, false, "", or none then the script between IF and endIf executes.

 

In this case, the IF block is checking to see if the object that it is attached to ("self") is enabled. Enabled is the opposite of disabled – it means that the object's AI and graphics are being processed by the game engine, or would be processed if the PC was in the area (if the PC is not in the area).

 

15: If the object that this script is attached to is enabled, the object stored in the property storedActor is moved to the same position. Earlier we saw that the previous script stored akTarget, the target of the effect, in this variable.

 

16: The storedActor is then enabled. EnableNoWait is different from Enable because the Enable function pauses the script until the object that is being enabled is fully loaded and animated. EnableNoWait continues to the next function in the script immediately.

 

17: PlaceAtMe again.

 

18: MoveTo again. I have no idea why this was done twice. Seems wasteful. Maybe it prevents a visual glitch in-game. Try disabling the second MoveTo and see what happens if you want to know.

 

19: DisableNoWait is to Disable as EnableNoWait is to Enable.

 

25: OnHit block. The script lines between here and the next EndEvent will process whenever the object that they are attached to are hit by a weapon or spell.

 

27: If block. In this case, the parameter akAggressor, which is the reference that initiated the hit, is being tested against Game.GetPlayer(). Game.GetPlayer() is a function that always returns the player's current actor. If akAgressor and GetPlayer() point to the same object, the If block will execute.

 

28-33: You've seen all this before. It does basically the same things it did above. This effectively ends the spell if the chicken is hit by a weapon attack or spell by the player.

 

Note that the newly-created chicken is never actually deleted, only disabled. As written, this script would create totally unacceptable save bloat as the world would be populated by invisible chickens until the game ran out of new form IDs and basically started eating itself.

 

So yeah, basically everything I wrote above was readily available in those links I provided you. If you were confused by them, you're probably equally confused now. So good luck.

Edited by lofgren
Link to comment
Share on other sites

I appreciate you taking the time to try to help me in the way that I asked, but as you pointed out, most of what you're saying speaks in general or explains things generally and already the things I have read over a multitude of times.

 

Because that stuff already confuses me (as you knew it would lol) it makes it harder for me to see the things where you actually specifically address something specific to what is going on.

 

Due to the fact my understanding is so minimal right now, telling me what a variable is as opposed to saying "This variable establishes... blah blah blah... and is what tells the game how man times it should blah blah blah..." just keeps me virtually in the same place where I started.

 

Lol, it's like multiple times I explain how I learn and you keep trying to force me to learn how you learn and not only that, try to tell me that your way is the way I should learn. I don't learn that way. I will learn about references from the references in this script being explained as to what they are specifically referencing and why... not from having someone explain the definition of references in general.

 

I guess it makes me sound ungrateful but it does not help me at all for you to regurgitate the information I have already found myself. I don't want, need, nor am I asking what it says on some wiki, or other guide, unless that guide specifically explains and breaks down these specific scripts.

 

Not functions do blah blah blah... but THIS function does blah blah blah and later is called by blah blah blah to cause blah blah blah.

 

Now you do this sort of thing sometimes, but you made it harder for me by mixing it with your way of learning and comments about how I need to successfully learn it your way before I try to learn it my way. But here's the deal, and you knew it would confuse me from the start but let me explain it real quick why you knew it would.

 

Because those guides, explain things in a way that makes sense to people who already know things about scripting to the point where they basically already speak the lingo. It's like a person could explain football (either one) to someone who has no understanding of football, but if they try to do so using jargon of the sport, the person they are explaining it to will have a harder time learning the game.

 

It is better, if the person uses common words instead of jargon to explain and/or common wording to explain jargon, then they are likely to succeed in explaining the game to a person who was once completely unfamiliar. This is my issue with most guides.

 

Basically, it helps me when things are dumbed down in this situation but almost more importantly, I just need to see how it is working for me to understand it. That is why I took the time to find a script, explain what it does in game, and ask what part of the script is causing what to happen.

 

I can't be any clearer than that man. I can't. Sorry if you think I'm not knowledgeable enough to be attempting to learn this way or that no one should try to learn this way but I had 3 options in this; keep failing while trying to learn how people like you have learned... try a different way of learning it... or give up again and for good.

 

I saw the other ways of learning have failed for me so far so I decided to try a different approach. Simple as that so please, if what you're going to say is going to involve chastising me for lack of basic/simple knowledge and/or how I am trying to learn, like I said before, I'd rather you just move on for both oursakes because you're driving me crazy and I feel like I am doing the same to you, haha.

 

We may just have to accept that I am too script dumb for you to help me. Maybe I am too script dumb for anyone to help if we're being honest haha, but I thought I'd give it one last good ole try before giving up on scripting entirely. I am genuinely sorry for having troubled you thus far and thank you for trying your best to help me here.

 

EDIT: Think of it as I am trying to learn the meaning of a word. You keep telling me the definition of it, but I keep asking for people to use it in a sentence (or several) as that will help me understand its meaning more than telling me to look up its definition or telling me the definition. That's not a perfect analogy, but its pretty close.

Edited by TheObstinateNoviceSmith
Link to comment
Share on other sites

  • Recently Browsing   0 members

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