Page 323 of 400
Re: Ask a simple question, get a simple answer
Posted: Sat Aug 31, 2019 1:47 pm
by akroma222
Lorial wrote: ↑Sat Aug 31, 2019 12:42 pm
If I equip the last item of a custom armor set, it seems to spam the message/sound every frame.
Is there a way to get the message/sound only once? Would adding/removing a trait for that be the better choice?
Code: Select all
{
class = "EquipmentItem",
protection = 2,
evasion = 3,
onRecomputeStats = function(self, champion)
if champion:isArmorSetEquipped("tattered") then
-- hudPrint(champion:getName().." is now wearing the full Tattered Set.")
champion:addStatModifier("protection", 2)
champion:addStatModifier("evasion", 4)
end
end,
The fx are spamming because everything's onRecomputeStat hook is called every frame (60fps)
At a glance, Id say run your code from onEquipItem and onUnequipItem hooks
Those hooks are called whenever you un/equip, not every frame
One thing I noticed, though, the spelling must be that of the trait id, not the name displayed in the traits window (Meditation - meditation). Gets a bit ugly when it hudPrints "X loses the improved_dual_wield trait". When changing to a capital "M", it doesn't work anymore, the trait won't get removed.
Thanks for the reminder!!

Re: Ask a simple question, get a simple answer
Posted: Sat Aug 31, 2019 6:31 pm
by Isaac
Lua is case sensitive. You must make the changes to the id string for hudPrint.
Example:
Code: Select all
traitId = "meditation"
function capitalize(idString)
return string.upper(idString:sub(1,1))..idString:sub(-(#idString-1))
end
hudPrint(capitalize(traitId))
Re: Ask a simple question, get a simple answer
Posted: Sun Sep 01, 2019 5:15 am
by akroma222
Isaac wrote: ↑Sat Aug 31, 2019 6:31 pm
Lua is case sensitive. You must make the changes to the id string for hudPrint.
Example:
Code: Select all
traitId = "meditation"
function capitalize(idString)
return string.upper(idString:sub(1,1))..idString:sub(-(#idString-1))
end
hudPrint(capitalize(traitId))
Ah, thanks Isaac

Re: Ask a simple question, get a simple answer
Posted: Sun Sep 01, 2019 7:54 pm
by Lorial
Somehow i cannot get this armor set thing to work properly. With onRecomputeStats it at least granted me the bonus when all parts were in their respective slot. Now nothing seems to have an effect anymore. What am I missing here?!
Code: Select all
{
class = "Item",
uiName = "Plate Cuirass",
armorSet = "plate",
armorSetPieces = 5,
gfxIndex = 91,
weight = 16.0,
traits = { "heavy_armor", "chest_armor" },
},
{
class = "EquipmentItem",
protection = 12,
onEquipItem = function(self, champion, slot)
if slot == 4 and
champion:isArmorSetEquipped("plate") then
hudPrint(champion:getName().." is now wearing the full Plate set.")
champion:addStatModifier("protection", 5)
champion:addStatModifier("evasion", 3)
champion:addStatModifier("max_load", 15)
end
end,
},
Re: Ask a simple question, get a simple answer
Posted: Tue Sep 03, 2019 11:42 am
by Willigamer
Lorial wrote: ↑Sun Sep 01, 2019 7:54 pm
Somehow i cannot get this armor set thing to work properly. With onRecomputeStats it at least granted me the bonus when all parts were in their respective slot. Now nothing seems to have an effect anymore. What am I missing here?!
Code: Select all
{
class = "Item",
uiName = "Plate Cuirass",
armorSet = "plate",
armorSetPieces = 5,
gfxIndex = 91,
weight = 16.0,
traits = { "heavy_armor", "chest_armor" },
},
{
class = "EquipmentItem",
protection = 12,
onEquipItem = function(self, champion, slot)
if slot == 4 and
champion:isArmorSetEquipped("plate") then
hudPrint(champion:getName().." is now wearing the full Plate set.")
champion:addStatModifier("protection", 5)
champion:addStatModifier("evasion", 3)
champion:addStatModifier("max_load", 15)
end
end,
},
Well... just because you can’t use the hook "onEquipItem" in a "EquipmentItem" class. If you want to use the "onEquipItem" hook, it must be placed in the "item" class. The only memory hook that can be passed in "EquipmentItem" is "onRecomputeStats"

Re: Ask a simple question, get a simple answer
Posted: Tue Sep 03, 2019 12:27 pm
by Pompidom
Code: Select all
function opengates(surface, item)
for _,i in surface:contents() do
if i.go.name == item then
i.go:destroy()
return true
end
end
end
function waterta(alcove)
if opengates(hunger_ledge_alcove_28.surface, "note") then
counter_34.counter:decrement()
end
end
This surface will now accept any note,
How do i change it so it only accepts "note_2"
Re: Ask a simple question, get a simple answer
Posted: Tue Sep 03, 2019 1:18 pm
by Isaac
Pompidom wrote: ↑Tue Sep 03, 2019 12:27 pm
How do i change it so it only accepts "note_2"
It has to be done with an in-definition hook if it is to conditionally refuse the inserted item.
Regular user scripts cannot cancel events.
Code: Select all
defineObject{
name = "dungeon_alcove_note",
baseObject = "dungeon_alcove",
components = {
{
class = "Surface",
offset = vec(0, 0.85, 0.2),
size = vec(1.3, 0.65),
onAcceptItem = function(self, item) return item.go.id == "note_2" end,
},
},
}
--Alternate version
defineObject{
name = "dungeon_alcove_note_with_msg",
baseObject = "dungeon_alcove",
components = {
{
class = "Surface",
offset = vec(0, 0.85, 0.2),
size = vec(1.3, 0.65),
onAcceptItem = function(self, item)
if (item.go.id == "note_2") then return true
else hudPrint("Wrong Item") self.go:spawn("teleportation_effect") --or any failure state behavior
return false
end
end
},
},
}
*Updated script for typo...
**Edit:
If you would like to have control over the event in a script_entity, the way to do it is to return that script_entity function's boolean return value from the surface hook. That way your condition(s) can be in a script_entity on the map, and still cancel the event. This option affords access to external script variables and other functions that could be used in the conditional logic.
eg.
Code: Select all
onAcceptItem = function(self, item) return script_entity_1.script.checkItemId(item) end
--where checkItemId() returns true or false
Re: Ask a simple question, get a simple answer
Posted: Tue Sep 03, 2019 5:00 pm
by Pompidom
Yes, just any simple script that checks for the exact itemID instead of the general's object name.
But you've just given me an idea how to deal with something entirely different as well.
Re: Ask a simple question, get a simple answer
Posted: Wed Sep 04, 2019 6:19 am
by Lorial
Willigamer wrote: ↑Tue Sep 03, 2019 11:42 am
Well... just because you can’t use the hook "onEquipItem" in a "EquipmentItem" class. If you want to use the "onEquipItem" hook, it must be placed in the "item" class. The only memory hook that can be passed in "EquipmentItem" is "onRecomputeStats"
Wow, I do need vacation urgently. Thanks a bunch, Willigamer.
Re: Ask a simple question, get a simple answer
Posted: Wed Sep 04, 2019 9:03 pm
by Pompidom
Exits and entrances. Are there any out there with a custom destination target?
Or is there any other way to get the "walk slowdown" fade out/fade in transmission.
I want to stack 4 basic_exit_no_model on the same square for a multi portal like the multi portal in arx fatalis. and only 1 exit is activated at the same time depending from which direction you go through in combination with invisible floor_triggers.
https://youtu.be/YulDbORSj6w
The portal needs to be activated by power gems, currently the portals are flickering because they are not activated yet.
I was also toying with the idea to create a portal like stargate, where you have a rune button panel to dial in the coordinates. And then like the upside down map video I posted it will activate the models to show a reflection of the location you will go to through the portal.