Skip to content

Commit c68d6e4

Browse files
committed
[2762] Use own SD2 Error log file. Requires C-MaNGOS 12280
Update your configuration file. Please be so kind to forward errors of the SD2Errors log file to the SD2-Team You can find C-MaNGOS at github.com/cmangos
1 parent eed918a commit c68d6e4

39 files changed

+82
-69
lines changed

ScriptMgr.cpp

+31-22
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void LoadDatabase()
2727

2828
if (strSD2DBinfo.empty())
2929
{
30-
error_log("SD2: Missing Scriptdev2 database info from configuration file. Load database aborted.");
30+
script_error_log("Missing Scriptdev2 database info from configuration file. Load database aborted.");
3131
return;
3232
}
3333

@@ -45,12 +45,11 @@ void LoadDatabase()
4545
}
4646
else
4747
{
48-
error_log("SD2: Unable to connect to Database. Load database aborted.");
48+
script_error_log("Unable to connect to Database. Load database aborted.");
4949
return;
5050
}
5151

5252
SD2Database.HaltDelayThread();
53-
5453
}
5554

5655
struct TSpellSummary
@@ -72,6 +71,8 @@ void FreeScriptLibrary()
7271
m_scripts.clear();
7372

7473
num_sc_scripts = 0;
74+
75+
setScriptLibraryErrorFile(NULL, NULL);
7576
}
7677

7778
MANGOS_DLL_EXPORT
@@ -89,14 +90,22 @@ void InitScriptLibrary()
8990
outstring_log("");
9091

9192
// Get configuration file
93+
bool configFailure = false;
9294
if (!SD2Config.SetSource(_SCRIPTDEV2_CONFIG))
93-
error_log("SD2: Unable to open configuration file. Database will be unaccessible. Configuration values will use default.");
95+
configFailure = true;
9496
else
9597
outstring_log("SD2: Using configuration file %s", _SCRIPTDEV2_CONFIG);
9698

99+
// Set SD2 Error Log File
100+
std::string sd2LogFile = SD2Config.GetStringDefault("SD2ErrorLogFile", "SD2Errors.log");
101+
setScriptLibraryErrorFile(sd2LogFile.c_str(), "SD2");
102+
103+
if (configFailure)
104+
script_error_log("Unable to open configuration file. Database will be unaccessible. Configuration values will use default.");
105+
97106
// Check config file version
98107
if (SD2Config.GetIntDefault("ConfVersion", 0) != SD2_CONF_VERSION)
99-
error_log("SD2: Configuration file version doesn't match expected version. Some config variables may be wrong or missing.");
108+
script_error_log("Configuration file version doesn't match expected version. Some config variables may be wrong or missing.");
100109

101110
outstring_log("");
102111

@@ -119,7 +128,7 @@ void InitScriptLibrary()
119128
for (uint32 i = 1; i < GetScriptIdsCount(); ++i)
120129
{
121130
if (!m_scripts[i])
122-
error_log("SD2: No script found for ScriptName '%s'.", GetScriptName(i));
131+
script_error_log("No script found for ScriptName '%s'.", GetScriptName(i));
123132
}
124133

125134
outstring_log(">> Loaded %i C++ Scripts.", num_sc_scripts);
@@ -139,23 +148,23 @@ void DoScriptText(int32 iTextEntry, WorldObject* pSource, Unit* pTarget)
139148
{
140149
if (!pSource)
141150
{
142-
error_log("SD2: DoScriptText entry %i, invalid Source pointer.", iTextEntry);
151+
script_error_log("DoScriptText entry %i, invalid Source pointer.", iTextEntry);
143152
return;
144153
}
145154

146155
if (iTextEntry >= 0)
147156
{
148-
error_log("SD2: DoScriptText with source entry %u (TypeId=%u, guid=%u) attempts to process text entry %i, but text entry must be negative.",
149-
pSource->GetEntry(), pSource->GetTypeId(), pSource->GetGUIDLow(), iTextEntry);
157+
script_error_log("DoScriptText with source entry %u (TypeId=%u, guid=%u) attempts to process text entry %i, but text entry must be negative.",
158+
pSource->GetEntry(), pSource->GetTypeId(), pSource->GetGUIDLow(), iTextEntry);
150159

151160
return;
152161
}
153162

154163
const StringTextData* pData = pSystemMgr.GetTextData(iTextEntry);
155164
if (!pData)
156165
{
157-
error_log("SD2: DoScriptText with source entry %u (TypeId=%u, guid=%u) could not find text entry %i.",
158-
pSource->GetEntry(), pSource->GetTypeId(), pSource->GetGUIDLow(), iTextEntry);
166+
script_error_log("DoScriptText with source entry %u (TypeId=%u, guid=%u) could not find text entry %i.",
167+
pSource->GetEntry(), pSource->GetTypeId(), pSource->GetGUIDLow(), iTextEntry);
159168

160169
return;
161170
}
@@ -179,15 +188,15 @@ void DoScriptText(int32 iTextEntry, WorldObject* pSource, Unit* pTarget)
179188
pSource->PlayDirectSound(pData->uiSoundId);
180189
}
181190
else
182-
error_log("SD2: DoScriptText entry %i tried to process invalid sound id %u.", iTextEntry, pData->uiSoundId);
191+
script_error_log("DoScriptText entry %i tried to process invalid sound id %u.", iTextEntry, pData->uiSoundId);
183192
}
184193

185194
if (pData->uiEmote)
186195
{
187196
if (pSource->GetTypeId() == TYPEID_UNIT || pSource->GetTypeId() == TYPEID_PLAYER)
188197
((Unit*)pSource)->HandleEmote(pData->uiEmote);
189198
else
190-
error_log("SD2: DoScriptText entry %i tried to process emote for invalid TypeId (%u).", iTextEntry, pSource->GetTypeId());
199+
script_error_log("DoScriptText entry %i tried to process emote for invalid TypeId (%u).", iTextEntry, pSource->GetTypeId());
191200
}
192201

193202
switch (pData->uiType)
@@ -209,7 +218,7 @@ void DoScriptText(int32 iTextEntry, WorldObject* pSource, Unit* pTarget)
209218
if (pTarget && pTarget->GetTypeId() == TYPEID_PLAYER)
210219
pSource->MonsterWhisper(iTextEntry, pTarget);
211220
else
212-
error_log("SD2: DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER).", iTextEntry);
221+
script_error_log("DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER).", iTextEntry);
213222

214223
break;
215224
}
@@ -218,7 +227,7 @@ void DoScriptText(int32 iTextEntry, WorldObject* pSource, Unit* pTarget)
218227
if (pTarget && pTarget->GetTypeId() == TYPEID_PLAYER)
219228
pSource->MonsterWhisper(iTextEntry, pTarget, true);
220229
else
221-
error_log("SD2: DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER).", iTextEntry);
230+
script_error_log("DoScriptText entry %i cannot whisper without target unit (TYPEID_PLAYER).", iTextEntry);
222231

223232
break;
224233
}
@@ -241,27 +250,27 @@ void DoOrSimulateScriptTextForMap(int32 iTextEntry, uint32 uiCreatureEntry, Map*
241250
{
242251
if (!pMap)
243252
{
244-
error_log("SD2: DoOrSimulateScriptTextForMap entry %i, invalid Map pointer.", iTextEntry);
253+
script_error_log("DoOrSimulateScriptTextForMap entry %i, invalid Map pointer.", iTextEntry);
245254
return;
246255
}
247256

248257
if (iTextEntry >= 0)
249258
{
250-
error_log("SD2: DoOrSimulateScriptTextForMap with source entry %u for map %u attempts to process text entry %i, but text entry must be negative.", uiCreatureEntry, pMap->GetId(), iTextEntry);
259+
script_error_log("DoOrSimulateScriptTextForMap with source entry %u for map %u attempts to process text entry %i, but text entry must be negative.", uiCreatureEntry, pMap->GetId(), iTextEntry);
251260
return;
252261
}
253262

254263
CreatureInfo const* pInfo = GetCreatureTemplateStore(uiCreatureEntry);
255264
if (!pInfo)
256265
{
257-
error_log("SD2: DoOrSimulateScriptTextForMap has invalid source entry %u for map %u.", uiCreatureEntry, pMap->GetId());
266+
script_error_log("DoOrSimulateScriptTextForMap has invalid source entry %u for map %u.", uiCreatureEntry, pMap->GetId());
258267
return;
259268
}
260269

261270
const StringTextData* pData = pSystemMgr.GetTextData(iTextEntry);
262271
if (!pData)
263272
{
264-
error_log("SD2: DoOrSimulateScriptTextForMap with source entry %u for map %u could not find text entry %i.", uiCreatureEntry, pMap->GetId(), iTextEntry);
273+
script_error_log("DoOrSimulateScriptTextForMap with source entry %u for map %u could not find text entry %i.", uiCreatureEntry, pMap->GetId(), iTextEntry);
265274
return;
266275
}
267276

@@ -270,7 +279,7 @@ void DoOrSimulateScriptTextForMap(int32 iTextEntry, uint32 uiCreatureEntry, Map*
270279

271280
if (pData->uiType != CHAT_TYPE_ZONE_YELL)
272281
{
273-
error_log("SD2: DoSimulateScriptTextForMap entry %i has not supported chat type %u.", iTextEntry, pData->uiType);
282+
script_error_log("DoSimulateScriptTextForMap entry %i has not supported chat type %u.", iTextEntry, pData->uiType);
274283
return;
275284
}
276285

@@ -279,7 +288,7 @@ void DoOrSimulateScriptTextForMap(int32 iTextEntry, uint32 uiCreatureEntry, Map*
279288
if (GetSoundEntriesStore()->LookupEntry(pData->uiSoundId))
280289
pMap->PlayDirectSoundToMap(pData->uiSoundId);
281290
else
282-
error_log("SD2: DoOrSimulateScriptTextForMap entry %i tried to process invalid sound id %u.", iTextEntry, pData->uiSoundId);
291+
script_error_log("DoOrSimulateScriptTextForMap entry %i tried to process invalid sound id %u.", iTextEntry, pData->uiSoundId);
283292
}
284293

285294
if (pCreatureSource) // If provided pointer for sayer, use direct version
@@ -301,7 +310,7 @@ void Script::RegisterSelf(bool bReportError)
301310
else
302311
{
303312
if (bReportError)
304-
error_log("SD2: Script registering but ScriptName %s is not assigned in database. Script will not be used.", Name.c_str());
313+
script_error_log("Script registering but ScriptName %s is not assigned in database. Script will not be used.", Name.c_str());
305314

306315
delete this;
307316
}

base/escort_ai.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ void npc_escortAI::MovementInform(uint32 uiMoveType, uint32 uiPointId)
385385
// Make sure that we are still on the right waypoint
386386
if (CurrentWP->uiId != uiPointId)
387387
{
388-
error_log("SD2: EscortAI for Npc %u reached waypoint out of order %u, expected %u.", m_creature->GetEntry(), uiPointId, CurrentWP->uiId);
388+
script_error_log("EscortAI for Npc %u reached waypoint out of order %u, expected %u.", m_creature->GetEntry(), uiPointId, CurrentWP->uiId);
389389
return;
390390
}
391391

@@ -489,13 +489,13 @@ void npc_escortAI::Start(bool bRun, const Player* pPlayer, const Quest* pQuest,
489489
{
490490
if (m_creature->getVictim())
491491
{
492-
error_log("SD2: EscortAI attempt to Start while in combat.");
492+
script_error_log("EscortAI attempt to Start while in combat.");
493493
return;
494494
}
495495

496496
if (HasEscortState(STATE_ESCORT_ESCORTING))
497497
{
498-
error_log("SD2: EscortAI attempt to Start while already escorting.");
498+
script_error_log("EscortAI attempt to Start while already escorting.");
499499
return;
500500
}
501501

base/follower_ai.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ void FollowerAI::StartFollow(Player* pLeader, uint32 uiFactionForFollower, const
283283

284284
if (HasFollowState(STATE_FOLLOW_INPROGRESS))
285285
{
286-
error_log("SD2: FollowerAI attempt to StartFollow while already following.");
286+
script_error_log("FollowerAI attempt to StartFollow while already following.");
287287
return;
288288
}
289289

config.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
// Format is YYYYMMDDRR where RR is the change in the conf file
2727
// for that day.
28-
#define SD2_CONF_VERSION 2010062001
28+
#define SD2_CONF_VERSION 2012112301
2929

3030
#ifdef WIN32
3131
#define MANGOS_DLL_EXPORT extern "C" __declspec(dllexport)

include/sc_creature.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ void ScriptedAI::DoPlaySoundToSet(WorldObject* pSource, uint32 uiSoundId)
187187

188188
if (!GetSoundEntriesStore()->LookupEntry(uiSoundId))
189189
{
190-
error_log("SD2: Invalid soundId %u used in DoPlaySoundToSet (Source: TypeId %u, GUID %u)", uiSoundId, pSource->GetTypeId(), pSource->GetGUIDLow());
190+
script_error_log("Invalid soundId %u used in DoPlaySoundToSet (Source: TypeId %u, GUID %u)", uiSoundId, pSource->GetTypeId(), pSource->GetGUIDLow());
191191
return;
192192
}
193193

@@ -401,7 +401,7 @@ void ScriptedAI::DoResetThreat()
401401
{
402402
if (!m_creature->CanHaveThreatList() || m_creature->getThreatManager().isThreatListEmpty())
403403
{
404-
error_log("SD2: DoResetThreat called for creature that either cannot have threat list or has empty threat list (m_creature entry = %d)", m_creature->GetEntry());
404+
script_error_log("DoResetThreat called for creature that either cannot have threat list or has empty threat list (m_creature entry = %d)", m_creature->GetEntry());
405405
return;
406406
}
407407

@@ -422,7 +422,7 @@ void ScriptedAI::DoTeleportPlayer(Unit* pUnit, float fX, float fY, float fZ, flo
422422

423423
if (pUnit->GetTypeId() != TYPEID_PLAYER)
424424
{
425-
error_log("SD2: %s tried to teleport non-player (%s) to x: %f y:%f z: %f o: %f. Aborted.", m_creature->GetGuidStr().c_str(), pUnit->GetGuidStr().c_str(), fX, fY, fZ, fO);
425+
script_error_log("%s tried to teleport non-player (%s) to x: %f y:%f z: %f o: %f. Aborted.", m_creature->GetGuidStr().c_str(), pUnit->GetGuidStr().c_str(), fX, fY, fZ, fO);
426426
return;
427427
}
428428

@@ -570,7 +570,7 @@ bool ScriptedAI::EnterEvadeIfOutOfCombatArea(const uint32 uiDiff)
570570
return false;
571571
break;
572572
default:
573-
error_log("SD2: EnterEvadeIfOutOfCombatArea used for creature entry %u, but does not have any definition.", m_creature->GetEntry());
573+
script_error_log("EnterEvadeIfOutOfCombatArea used for creature entry %u, but does not have any definition.", m_creature->GetEntry());
574574
return false;
575575
}
576576

include/sc_instance.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ void ScriptedInstance::DoUseDoorOrButton(ObjectGuid guid, uint32 uiWithRestoreTi
2626
pGo->ResetDoorOrButton();
2727
}
2828
else
29-
error_log("SD2: Script call DoUseDoorOrButton, but gameobject entry %u is type %u.", pGo->GetEntry(), pGo->GetGoType());
29+
script_error_log("Script call DoUseDoorOrButton, but gameobject entry %u is type %u.", pGo->GetEntry(), pGo->GetGoType());
3030
}
3131
}
3232

@@ -38,7 +38,7 @@ void ScriptedInstance::DoUseDoorOrButton(uint32 uiEntry, uint32 uiWithRestoreTim
3838
DoUseDoorOrButton(find->second, uiWithRestoreTime, bUseAlternativeState);
3939
else
4040
// Output log, possible reason is not added GO to storage, or not yet loaded
41-
debug_log("SD2: Script call DoUseDoorOrButton(by Entry), but no gameobject of entry %u was created yet, or it was not stored by script for map %u.", uiEntry, instance->GetId());
41+
script_error_log("Script call DoUseDoorOrButton(by Entry), but no gameobject of entry %u was created yet, or it was not stored by script for map %u.", uiEntry, instance->GetId());
4242
}
4343

4444
/**
@@ -75,7 +75,7 @@ void ScriptedInstance::DoToggleGameObjectFlags(uint32 uiEntry, uint32 uiGOflags,
7575
DoToggleGameObjectFlags(find->second, uiGOflags, bApply);
7676
else
7777
// Output log, possible reason is not added GO to storage, or not yet loaded
78-
debug_log("SD2: Script call ToogleTameObjectFlags (by Entry), but no gameobject of entry %u was created yet, or it was not stored by script for map %u.", uiEntry, instance->GetId());
78+
script_error_log("Script call ToogleTameObjectFlags (by Entry), but no gameobject of entry %u was created yet, or it was not stored by script for map %u.", uiEntry, instance->GetId());
7979
}
8080

8181
/**
@@ -108,7 +108,7 @@ void ScriptedInstance::DoRespawnGameObject(uint32 uiEntry, uint32 uiTimeToDespaw
108108
DoRespawnGameObject(find->second, uiTimeToDespawn);
109109
else
110110
// Output log, possible reason is not added GO to storage, or not yet loaded;
111-
debug_log("SD2: Script call DoRespawnGameObject(by Entry), but no gameobject of entry %u was created yet, or it was not stored by script for map %u.", uiEntry, instance->GetId());
111+
script_error_log(" Script call DoRespawnGameObject(by Entry), but no gameobject of entry %u was created yet, or it was not stored by script for map %u.", uiEntry, instance->GetId());
112112
}
113113

114114
/**
@@ -266,7 +266,7 @@ void DialogueHelper::StartNextDialogueText(int32 iTextEntry)
266266

267267
if (!bFound)
268268
{
269-
error_log("SD2: Script call DialogueHelper::StartNextDialogueText, but textEntry %i is not in provided dialogue (on map id %u)", iTextEntry, m_pInstance ? m_pInstance->instance->GetId() : 0);
269+
script_error_log("Script call DialogueHelper::StartNextDialogueText, but textEntry %i is not in provided dialogue (on map id %u)", iTextEntry, m_pInstance ? m_pInstance->instance->GetId() : 0);
270270
return;
271271
}
272272

include/sc_instance.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ enum EncounterState
2121
#define OUT_SAVE_INST_DATA_COMPLETE debug_log("SD2: Saving Instance Data for Instance %s (Map %d, Instance Id %d) completed.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
2222
#define OUT_LOAD_INST_DATA(a) debug_log("SD2: Loading Instance Data for Instance %s (Map %d, Instance Id %d). Input is '%s'", instance->GetMapName(), instance->GetId(), instance->GetInstanceId(), a)
2323
#define OUT_LOAD_INST_DATA_COMPLETE debug_log("SD2: Instance Data Load for Instance %s (Map %d, Instance Id: %d) is complete.", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
24-
#define OUT_LOAD_INST_DATA_FAIL error_log("SD2: Unable to load Instance Data for Instance %s (Map %d, Instance Id: %d).", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
24+
#define OUT_LOAD_INST_DATA_FAIL script_error_log("Unable to load Instance Data for Instance %s (Map %d, Instance Id: %d).", instance->GetMapName(), instance->GetId(), instance->GetInstanceId())
2525

2626
class MANGOS_DLL_DECL ScriptedInstance : public InstanceData
2727
{

scriptdev2.conf.dist.in

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# This file must be placed within the directory which holds mangosd.conf and realmd.conf
33

44
[ScriptDev2Conf]
5-
ConfVersion=2010062001
5+
ConfVersion=2012112301
66

77
# Database connection settings for the world server.
88
# Default: hostname;port;username;password;database
@@ -11,3 +11,6 @@ ConfVersion=2010062001
1111
# .;/path/to/unix_socket;username;password;database - use Unix sockets at Unix/Linux
1212
# Unix sockets: experimental, not tested
1313
ScriptDev2DatabaseInfo = "127.0.0.1;3306;mangos;mangos;scriptdev2"
14+
15+
# Log File for SD2-Errors
16+
SD2ErrorLogFile = "SD2Errors.log"

scripts/eastern_kingdoms/blackrock_spire/instance_blackrock_spire.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ void instance_blackrock_spire::DoProcessEmberseerEvent()
397397

398398
if (m_lIncarceratorGUIDList.empty())
399399
{
400-
error_log("SD2: Npc %u couldn't be found. Please check your DB content!", NPC_BLACKHAND_INCARCERATOR);
400+
script_error_log("Npc %u couldn't be found. Please check your DB content!", NPC_BLACKHAND_INCARCERATOR);
401401
return;
402402
}
403403

scripts/eastern_kingdoms/magisters_terrace/boss_selin_fireheart.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ struct MANGOS_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
147147
else
148148
{
149149
// Make an error message in case something weird happened here
150-
error_log("SD2: Selin Fireheart unable to drain crystal as the crystal is either dead or deleted..");
150+
script_error_log("Selin Fireheart unable to drain crystal as the crystal is either dead or deleted..");
151151
m_bDrainingCrystal = false;
152152
}
153153
}

scripts/eastern_kingdoms/shadowfang_keep/boss_hummel.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ struct MANGOS_DLL_DECL npc_valentine_boss_managerAI : public ScriptedAI, private
191191
pBaxter->GetMotionMaster()->MovePoint(1, fX, fY, fZ);
192192
}
193193
else
194-
error_log("SD2: Gameobject %u couldn't be found or something really bad happened.", GO_APOTHECARE_VIALS);
194+
script_error_log("Gameobject %u couldn't be found or something really bad happened.", GO_APOTHECARE_VIALS);
195195
}
196196

197197
// Move Frye to position
@@ -209,7 +209,7 @@ struct MANGOS_DLL_DECL npc_valentine_boss_managerAI : public ScriptedAI, private
209209
pFrye->GetMotionMaster()->MovePoint(1, fX, fY, fZ);
210210
}
211211
else
212-
error_log("SD2: Gameobject %u couldn't be found or something really bad happened.", GO_CHEMISTRY_SET);
212+
script_error_log("Gameobject %u couldn't be found or something really bad happened.", GO_CHEMISTRY_SET);
213213
}
214214
}
215215

scripts/eastern_kingdoms/sunwell_plateau/boss_brutallus.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ struct MANGOS_DLL_DECL boss_brutallusAI : public ScriptedAI, private DialogueHel
201201
{
202202
// Error log if Madrigosa dies
203203
if (pSummoned->GetEntry() == NPC_MADRIGOSA)
204-
error_log("SD2: Npc %u, %s, died unexpectedly. Felmyst won't be summoned anymore.", pSummoned->GetEntry(), pSummoned->GetName());
204+
script_error_log("Npc %u, %s, died unexpectedly. Felmyst won't be summoned anymore.", pSummoned->GetEntry(), pSummoned->GetName());
205205
}
206206

207207
void SummonedCreatureDespawn(Creature* pSummoned) override

scripts/eastern_kingdoms/zulaman/instance_zulaman.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ void instance_zulaman::SetData(uint32 uiType, uint32 uiData)
295295
break;
296296

297297
default:
298-
error_log("SD2: Instance Zulaman: ERROR SetData = %u for type %u does not exist/not implemented.", uiType, uiData);
298+
script_error_log("Instance Zulaman: ERROR SetData = %u for type %u does not exist/not implemented.", uiType, uiData);
299299
return;
300300
}
301301

0 commit comments

Comments
 (0)