Page 1 of 1

Variables not loading from TextIDs

Posted: Mon Jan 14, 2013 4:56 pm
by PrBlahBlahtson
Steps to reproduce:
1. Zone into Valkurm
2. Take the portal to Lufaise
3. @additem 4096 (or itemid of your choice).

additem is supposed to use the messageid "ITEM_OBTAINED." In Valkurm, that's 6381. In Lufaise, it's 6378. Lufaise will display the keyitem prompt (6381) instead. Those values were checked in POLUtils against a recently updated client, so they're not incorrect in Darkstar. They're just... not being loaded, apparently.

Not the first time something like this has cropped up (incorrect NPC dialog for one MH quest, Windurst was using Jeuno's ID, I think.)

Anyone have ideas what steps can be taken to correct this?

Re: Variables not loading from TextIDs

Posted: Mon Jan 14, 2013 6:34 pm
by whasf
Sounds like someone hardcoded the message ID in the core instead of reading it from the textIDs.lua file for that zone the person receiving the item is in.

Re: Variables not loading from TextIDs

Posted: Mon Jan 14, 2013 10:47 pm
by PrBlahBlahtson
Not sure of that. I zoned into Tavnazian Safehold, and the message was correct (6378), then zoned back into Lufaise and it was corrected. It seems like the TextID file just isn't being loaded consistently.

TavSafehold and Valkurm both have requires for the TextID files, but Lufaise does not. Could that potentially be the cause?

Re: Variables not loading from TextIDs

Posted: Tue Jan 15, 2013 2:45 am
by diatanato
отображение сообщения в r2143 реализованы неправильно.
попробую объяснить:

последовательность, когда это работает:
- gm входит в зону
- выполняется скрипт OnZoneID, в котором вызывается перезагрузка модуля TextIDs
package.loaded["scripts/zones/ZONENAME/TextIDs"] = nil;
require("scripts/zones/ZONENAME/TextIDs");
это нужно для того, что все переменные lua хранит в массиве типа map<string,object>, где первый параметр - имя переменной.
так как у нас имена переменных во всех TextIDs совпадают, то их нужно перезагружать для каждого скрипта, в котором они используются, что gm сделал, войдя в зону
- gm вызывает @additem и видит правильное сообщение

последовательность, когда это не работает:
- в игре находятся несколько персонажей
- gm входит в зону, вызывая OnZoneIn и загружает правильный TextIDs
- в этот момент другой персонаж переходит между зонами и вызывает другой OnZoneIn, загружая TextIDs для своей зоны
- gm вызывает @additem из которого вызываются уже неправильные переменные, т.к. они были перезагружены другим персонажем.

Вариант решения:

в скрипте команды additem.lua реализовать следующее:

Code: Select all

function onTrigger(player,itemID,quantity)
    local TestIDs = "scripts/zones/" .. player:getZoneName() .. "/TextIDs";

    package.loaded[TextIDs] = nil;
    require(TextIDs);	
...
end;
P.S. но я не уверен, что процедура getZoneName() сейчас реализована

Re: Variables not loading from TextIDs

Posted: Tue Jan 15, 2013 7:45 am
by bluekirby0
So basically we need to unset the TextIDs in all of the GM commands that use them with that method to make it work consistently?

Re: Variables not loading from TextIDs

Posted: Tue Jan 15, 2013 8:19 am
by diatanato

Re: Variables not loading from TextIDs

Posted: Tue Jan 15, 2013 7:59 pm
by whasf
Thank you Dia