Frictional Games Forum (read-only)
Question about basic scripting. - Printable Version

+- Frictional Games Forum (read-only) (https://www.frictionalgames.com/forum)
+-- Forum: Amnesia: The Dark Descent (https://www.frictionalgames.com/forum/forum-6.html)
+--- Forum: Custom Stories, TCs & Mods - Development (https://www.frictionalgames.com/forum/forum-38.html)
+--- Thread: Question about basic scripting. (/thread-29736.html)



Question about basic scripting. - Emiel97 - 03-11-2015

Need help with something, how do i combine code?

I want the following two scipts/codes in the same .hps file:



void OnStart()
{
GiveItemFromFile("lantern", "lantern.ent");

for(int i=0;i< 10;i++) GiveItemFromFile("tinderbox_"+i, "tinderbox.ent");
}


void OnStart()

{
AddUseItemCallback("", "key_1", "locked_door1", "UsedKeyOnDoor", true);
SetEntityCallbackFunc("key_1", "OnPickup");
}
void UsedKeyOnDoor(string &in asItem, string &in asEntity)
{
SetSwingDoorLocked("locked_door1", false, true);
PlaySoundAtEntity("", "unlock_door.snt", "locked_door1", 0, false);
RemoveItem("key_1");
}
void OnPickup(string &in asEntity, string &in type)
{
SetEntityActive("monster_brute", true);
ShowEnemyPlayerPosition("monster_brute");
}



I tried multiple things, watched multiple tutorials and browsed multiple topics, but still couldn't find what i was looking for!

Help IS appreciated. Thanks!



RE: Question about basic scripting. - FlawlessHappiness - 03-11-2015

Well you see. There can't be 2 functions called "OnStart".

So what you have to do with the void OnStart() is to combine them.
Like this:

PHP Code:
void OnStart()

GiveItemFromFile("lantern""lantern.ent");
for(
int i=0;i10;i++) GiveItemFromFile("tinderbox_"+i"tinderbox.ent"); 

AddUseItemCallback("""key_1""locked_door1""UsedKeyOnDoor"true);
SetEntityCallbackFunc("key_1""OnPickup");


Makes sense, hmm?

Always remember: There cannot be 2 functions with the same name.

I've only skimmed over the other functions, as the OnStart seemed the most obvious.
Try it out, and see if it works.

If it doesn't, please return here, and explain what happens.

If you get an error, show it to us.
If you get something else, show it.


RE: Question about basic scripting. - Emiel97 - 03-11-2015

(03-11-2015, 09:02 PM)FlawlessHappiness Wrote: Well you see. There can't be 2 functions called "OnStart".

So what you have to do with the void OnStart() is to combine them.
Like this:

PHP Code:
void OnStart()

GiveItemFromFile("lantern""lantern.ent");
for(
int i=0;i10;i++) GiveItemFromFile("tinderbox_"+i"tinderbox.ent"); 

AddUseItemCallback("""key_1""locked_door1""UsedKeyOnDoor"true);
SetEntityCallbackFunc("key_1""OnPickup");


Makes sense, hmm?

Always remember: There cannot be 2 functions with the same name.

I've only skimmed over the other functions, as the OnStart seemed the most obvious.
Try it out, and see if it works.

If it doesn't, please return here, and explain what happens.

If you get an error, show it to us.
If you get something else, show it.




Hey,

The game doesn't crash, but it also doesn't fully work. What's supposed to happen is:

1: When player starts the map, he will start with a Lantern and 10 Tinderboxes (works).

2: When player picks up a key, a Monster spawns (doesn't work).



EDIT: The "Monster spawn" script works when i start the document with that code. But then "1" won't do anything anymore (still no crash, gets completely ignored).


RE: Question about basic scripting. - FlawlessHappiness - 03-11-2015

Well they don't work, because you have split the callbacks in 2 different void OnStart()

The script is supposed to look like this:
PHP Code:
void OnStart()

GiveItemFromFile("lantern""lantern.ent");

for(
int i=0;i10;i++) GiveItemFromFile("tinderbox_"+i"tinderbox.ent");

AddUseItemCallback("""key_1""locked_door1""UsedKeyOnDoor"true);
SetEntityCallbackFunc("key_1""OnPickup");
}


void UsedKeyOnDoor(string &in asItemstring &in asEntity)
{
SetSwingDoorLocked("locked_door1"falsetrue);
PlaySoundAtEntity("""unlock_door.snt""locked_door1"0false);
RemoveItem("key_1");
}

void OnPickup(string &in asEntitystring &in type)
{
SetEntityActive("monster_brute"true);
ShowEnemyPlayerPosition("monster_brute");


Notice that there is only 1 "void OnStart()"


RE: Question about basic scripting. - Emiel97 - 03-11-2015

They both work now, thank you very much!

I see what i did wrong. Now just going to play around with some more code and see how it goes.


Thanks!


RE: Question about basic scripting. - FlawlessHappiness - 03-11-2015

I'm glad it works!

Feel free to ask more questions.