Page 41 of 396
Re: Ask a simple question, get a simple answer
Posted: Mon Jan 26, 2015 10:42 pm
by Isaac
minmay wrote:Well Isaac's post is just completely wrong, actually. The error has nothing to do with a concatenation that you're performing.
It is a funny thing that as I read it (the first time), I understood it to mean that the error happened [immediately] upon the death of the warden; clearly I missed the last bit about saving the game at the crystal.
Yes... variables in script functions not set to local cause errors upon attempting to save the game.
Note: @TheLastOrder... Not all variables in the scripts are required to be local; some cannot be. To get a good understanding of it, AH has a dedicated page about this:
http://www.grimrock.net/modding/save-ga ... variables/
Re: Ask a simple question, get a simple answer
Posted: Mon Jan 26, 2015 11:40 pm
by minmay
Isaac wrote:Yes... variables in script functions not set to local cause errors upon attempting to save the game.
If a variable isn't set to local, then it isn't in a function, period. Even if you declare it inside a function, it becomes a field of the ScriptComponent, not a variable that belongs to the function block.
Re: Ask a simple question, get a simple answer
Posted: Tue Jan 27, 2015 1:20 am
by Isaac
minmay wrote:Isaac wrote:Yes... variables in script functions not set to local cause errors upon attempting to save the game.
If a variable isn't set to local, then it isn't in a function, period. Even if you declare it inside a function, it becomes a field of the ScriptComponent, not a variable that belongs to the function block.
True or False: Adding the local keyword indiscriminately to script variables can create upvalues.
(If the variable is outside of a function, but used inside of one.)
It won't even preview in the editor; though it will export to dat, and crash the game when loaded.
I mentioned it on the odd chance that TheLastOrder meant to add "local" to ~everything.
Re: Ask a simple question, get a simple answer
Posted: Tue Jan 27, 2015 2:03 am
by TheLastOrder
So I think I have understood where´s the problem:
Code: Select all
Bertolucci.monster:addConnector("onDie", "tomebertolucci", "tomebertolucci")
I added, through script, a connector on a monster that respawns and, once he has died, he activates another script.... where I spawn an
OBJECT that doesn´t exist...
Is this object the one causing this trouble, if I understood correctly
This is that script I´m talking about:
Code: Select all
function tomebertolucci()
b = party.party
spawn("tome_water",b.level,b.x,b.y,b.facing,b.elevation)
end
So probably this is the solution....
Code: Select all
function tomebertolucci()
b = party.party
local item = spawn("tome_water",b.level,b.x,b.y,b.facing,b.elevation)
end
Thank you again guys!
Re: Ask a simple question, get a simple answer
Posted: Tue Jan 27, 2015 2:41 am
by Batty
TheLastOrder wrote:So probably this is the solution....
ummm...no, the problem is
so, for reasons previously illustrated you could do:
but I would just do:
Code: Select all
function tomebertolucci()
spawn("tome_water", party.level, party.x, party.y, party.facing, party.elevation, nil)
end
Re: Ask a simple question, get a simple answer
Posted: Tue Jan 27, 2015 4:32 pm
by TheLastOrder
Batty, you´re absolutely right
The variable in the script that the game can´t storage when saving is b.
Thank you very much!
Re: Ask a simple question, get a simple answer
Posted: Fri Jan 30, 2015 12:08 am
by THOM
I forgot how to call all entities of an item in a script. I mean all torches in the game: torch_1, torch_2, torch_3 ...
What was it like? "torch_i" is wrong.. ??
What I want to do is destroying all of them...
Re: Ask a simple question, get a simple answer
Posted: Fri Jan 30, 2015 12:53 am
by THOM
Well to help myself, I found this:
viewtopic.php?f=22&t=7951&start=140#p83415
NutJob wrote:
Code: Select all
local obj;
for i=1,10 do
obj = findEntity("teleporter_" .. i)
-- do stuff to obj
end
But I can not figure out what "do stuff with obj" means. How to use it.
obj:destroy() doesn't work
Re: Ask a simple question, get a simple answer
Posted: Fri Jan 30, 2015 3:49 am
by GoldenShadowGS
THOM wrote:Well to help myself, I found this:
viewtopic.php?f=22&t=7951&start=140#p83415
NutJob wrote:
Code: Select all
local obj;
for i=1,10 do
obj = findEntity("teleporter_" .. i)
-- do stuff to obj
end
But I can not figure out what "do stuff with obj" means. How to use it.
obj:destroy() doesn't work
Paste your code so we can debug it.
Re: Ask a simple question, get a simple answer
Posted: Fri Jan 30, 2015 9:55 pm
by THOM
GoldenShadowGS wrote:
Paste your code so we can debug it.
Well then. The situation is a bit tangled.
I have an alcove where you have to put an air-essence on to unlock a key. For certain reasons it is possible, that players choose another alcove to put the essence on - but then the essence is locked in that alcove and the player can't get it back (I have put a forcefield over this alcove but you can put items through it if it's on a wall (!) - not if it's alone in the room! But you can't take items back when they are in the forcefield.)
To avoid a dead end I thought it could be a good idea to avoid putting the air essence into the alcove. I have tried to script something: when you put the essence trough the forcefield in the wrong alcove, the essence will be destroyed and recreated in the mouse. But therefore every time another unique item id is created, I cannot destroy the essence in my way. I need a trick to destroy all essenceses regardless which id-number they have.
This is, what I have tried:
Code: Select all
function surfaceContains(surface, item)
for _,i in surface:contents() do
if i.go.name == item then return true
end
end
end
function keepEssence()
if surfaceContains(castle_alcove_key.surface, "essence_air")
then
timer_setMouseEssence.timer:enable() -- timer just delays recreation
--print("timer")
end
end
function setMouse() -- called by timer
for i, ent in castle_alcove_key.surface:contents() do
local obj;
for x=1,100 do
obj = findEntity("
essence_air_"..x..":destroy() --this line seems to be wrong! with 'essence_air_1' it works - but just once...
end
--print("destroy")
end
setMouseItem(spawn("essence_air",nil,nil,nil,nil,nil).item)
--print("create")
end