error compiling 64bit ubuntu

Support forum for questions about compiling and running EQ2Emulator on Linux.

Moderator: Team Members

Post Reply
User avatar
Verve
Posts: 8
Joined: Wed Dec 02, 2009 4:50 am
EQ2Emu Server: Innovation
Characters: Verve, Praezeptor
Location: Germany, KU
Contact:

error compiling 64bit ubuntu

Post by Verve » Sat Jun 08, 2019 11:00 pm

Hello and greetings from germany,

im getting this error by compiling on a 64 bit Ubuntu 16.04 and yes i have used the "makefile.a64".

Code: Select all

g++ -c `mysql_config --cflags` -march=native -pipe -pthread -O -ggdb -std=c++0x -Wall -Wno-reorder -DEQ2 -DWORLD ../common/ConfigReader.cpp -o ../common/ConfigReader.o
In file included from ../common/../WorldServer/Entity.h:22:0,
                 from ../common/../WorldServer/Player.h:23,
                 from ../common/../WorldServer/zoneserver.h:33,
                 from ../common/../WorldServer/client.h:26,
                 from ../common/Log.h:24,
                 from ../common/ConfigReader.cpp:21:
../common/../WorldServer/Spawn.h: In member function ‘int8 Spawn::GetLuaRaceId()’:
../common/../WorldServer/Spawn.h:663:21: error: ‘struct AppearanceData’ has no member named ‘lua_race_id’
   return appearance.lua_race_id;
                     ^
makefile:172: die Regel für Ziel „../common/ConfigReader.o“ scheiterte
make: *** [../common/ConfigReader.o] Fehler 1
Can anyone help?

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: error compiling 64bit ubuntu

Post by Jabantiz » Sat Jun 08, 2019 11:13 pm

Hmm, thought this was already fixed.

What you need to do is find the "ApperanceData" struct in "common/EQ2_Common_Structs.h" and add this line to the end of it

Code: Select all

	int8			lua_race_id;
	

User avatar
Verve
Posts: 8
Joined: Wed Dec 02, 2009 4:50 am
EQ2Emu Server: Innovation
Characters: Verve, Praezeptor
Location: Germany, KU
Contact:

Re: error compiling 64bit ubuntu

Post by Verve » Sun Jun 09, 2019 7:04 am

Hi Jabantiz,

thank you for your help. It works, but now i have a new error:

Code: Select all

g++ -c `mysql_config --cflags` -march=native -pipe -pthread -O -ggdb -std=c++0x -Wall -Wno-reorder -DEQ2 -DWORLD Quests.cpp -o Quests.o
Quests.cpp: In member function ‘EQ2Packet* Quest::QuestJournalReply(int16, int32, Player*, QuestStep*, int8, bool, bool, bool)’:
Quests.cpp:1292:55: error: ‘map_data_count’ was not declared in this scope
   packet->setArrayLengthByName("map_data_array_size", map_data_count);
                                                       ^
Quests.cpp: At global scope:
Quests.cpp:1300:2: error: expected unqualified-id before ‘return’
  return 0;
  ^
Quests.cpp:1301:1: error: expected declaration before ‘}’ token
 }
 ^
makefile:172: die Regel für Ziel „Quests.o“ scheiterte
make: *** [Quests.o] Fehler 1
Btw. i'm using the SVN "eq2server / trunk / source / WorldServer", is this the right SVN / Path with the newest files available or i using the wrong sourcecode to compile?

here my little update.sh script

Code: Select all

#!/bin/bash

svn co https://svn.eq2emulator.net/svn/eq2content/trunk/scripts/ItemScripts /srv/game/eq2emu/ItemScripts
svn co https://svn.eq2emulator.net/svn/eq2content/trunk/scripts/Quests /srv/game/eq2emu/Quests
svn co https://svn.eq2emulator.net/svn/eq2content/trunk/scripts/SpawnScripts /srv/game/eq2emu/SpawnScripts
svn co https://svn.eq2emulator.net/svn/eq2content/trunk/scripts/Spells /srv/game/eq2emu/Spells
svn co https://svn.eq2emulator.net/svn/eq2content/trunk/scripts/ZoneScripts /srv/game/eq2emu/ZoneScripts
svn co https://svn.eq2emulator.net/svn/eq2server/trunk /srv/game/eq2emu
svn co https://svn.eq2emulator.net/svn/eq2content/trunk/database /srv/game/eq2emu/database

cd /srv/game/eq2emu/source/WorldServer/
mv makefile makefile.32
mv makefile.a64 makefile
make
mv makefile makefile.a64
mv makefile.32 makefile
cd /srv/game/eq2emu

datum=$(date +"%Y-%m-%d_%H-%M-%S")
mkdir /srv/game/eq2emu/BKUP/$datum
if [ -f /srv/game/eq2emu/source/WorldServer/eq2world ]; then
	mv /srv/game/eq2emu/eq2world /srv/game/eq2emu/BKUP/$datum/eq2world
	echo "Backup /srv/game/eq2emu/eq2world to /srv/game/eq2emu/BKUP/$datum/eq2world"
	mv /srv/game/eq2emu/source/WorldServer/eq2world /srv/game/eq2emu/eq2world
	echo "copy /srv/game/eq2emu/source/WorldServer/eq2world to /srv/game/eq2emu/eq2world"
else
	echo "/srv/game/eq2emu/source/WorldServer/eq2world not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/configs/LoginServer.ini ]; then
	#mv /srv/game/eq2emu/LoginServer.ini /srv/game/eq2emu/BKUP/$datum/LoginServer.ini
	#echo "Backup /srv/game/eq2emu/LoginServer.ini to /srv/game/eq2emu/BKUP/$datum/LoginServer.ini"
	#mv /srv/game/eq2emu/configs/LoginServer.ini /srv/game/eq2emu/LoginServer.ini
	#echo "copy /srv/game/eq2emu/configs/LoginServer.ini to /srv/game/eq2emu/LoginServer.ini"
	echo "Skip /srv/game/eq2emu/LoginServer.ini"
else
	echo "/srv/game/eq2emu/configs/LoginServer.ini not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/configs/log_config.xml ]; then
	mv /srv/game/eq2emu/log_config.xml /srv/game/eq2emu/BKUP/$datum/log_config.xml
	echo "Backup /srv/game/eq2emu/log_config.xml to /srv/game/eq2emu/BKUP/$datum/log_config.xml"
	mv /srv/game/eq2emu/configs/log_config.xml /srv/game/eq2emu/log_config.xml
	echo "copy /srv/game/eq2emu/configs/log_config.xml to /srv/game/eq2emu/log_config.xml"
else
	echo "/srv/game/eq2emu/configs/log_config.xml not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/configs/world_db.ini ]; then
	#mv /srv/game/eq2emu/world_db.ini /srv/game/eq2emu/BKUP/$datum/world_db.ini
	#echo "Backup /srv/game/eq2emu/world_db.ini to /srv/game/eq2emu/BKUP/$datum/world_db.ini"
	#mv /srv/game/eq2emu/configs/world_db.ini /srv/game/eq2emu/world_db.ini
	#echo "copy /srv/game/eq2emu/configs/world_db.ini to /srv/game/eq2emu//world_db.ini"
	echo "Skip /srv/game/eq2emu/world_db.ini"
else
	echo "/srv/game/eq2emu/configs/world_db.ini not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/structs/EQ2_Structs.xml ]; then
	mv /srv/game/eq2emu/EQ2_Structs.xml /srv/game/eq2emu/BKUP/$datum/EQ2_Structs.xml
	echo "Backup /srv/game/eq2emu/EQ2_Structs.xml to /srv/game/eq2emu/BKUP/$datum/EQ2_Structs.xml"
	mv /srv/game/eq2emu/structs/EQ2_Structs.xml /srv/game/eq2emu/EQ2_Structs.xml
	echo "copy /srv/game/eq2emu/structs/EQ2_Structs.xml to /srv/game/eq2emu/EQ2_Structs.xml"
else
	echo "/srv/game/eq2emu/structs/EQ2_Structs.xml not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/structs/WorldStructs.xml ]; then
	mv /srv/game/eq2emu/WorldStructs.xml /srv/game/eq2emu/BKUP/$datum/WorldStructs.xml
	echo "Backup /srv/game/eq2emu/WorldStructs.xml to /srv/game/eq2emu/BKUP/$datum/WorldStructs.xml"
	mv /srv/game/eq2emu/structs/WorldStructs.xml /srv/game/eq2emu/WorldStructs.xml
	echo "copy /srv/game/eq2emu/structs/WorldStructs.xml to /srv/game/eq2emu/WorldStructs.xml"
else
	echo "/srv/game/eq2emu/structs/WorldStructs.xml not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/structs/CommonStructs.xml ]; then
	mv /srv/game/eq2emu/CommonStructs.xml /srv/game/eq2emu/BKUP/$datum/CommonStructs.xml
	echo "Backup /srv/game/eq2emu/CommonStructs.xml to /srv/game/eq2emu/BKUP/$datum/CommonStructs.xml"
	mv /srv/game/eq2emu/structs/CommonStructs.xml /srv/game/eq2emu/CommonStructs.xml
	echo "copy /srv/game/eq2emu/structs/CommonStructs.xml to /srv/game/eq2emu/CommonStructs.xml"
else
	echo "/srv/game/eq2emu/structs/CommonStructs.xml not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/structs/ItemStructs.xml ]; then
	mv /srv/game/eq2emu/ItemStructs.xml /srv/game/eq2emu/BKUP/$datum/ItemStructs.xml
	echo "Backup /srv/game/eq2emu/ItemStructs.xml to /srv/game/eq2emu/BKUP/$datum/ItemStructs.xml"
	mv /srv/game/eq2emu/structs/ItemStructs.xml /srv/game/eq2emu/ItemStructs.xml
	echo "copy /srv/game/eq2emu/structs/ItemStructs.xml to /srv/game/eq2emu/ItemStructs.xml"
else
	echo "/srv/game/eq2emu/structs/ItemStructs.xml not found! Nothing to do."
fi


if [ -f /srv/game/eq2emu/structs/SpawnStructs.xml ]; then
	mv /srv/game/eq2emu/SpawnStructs.xml /srv/game/eq2emu/BKUP/$datum/SpawnStructs.xml
	echo "Backup /srv/game/eq2emu/SpawnStructs.xml to /srv/game/eq2emu/BKUP/$datum/SpawnStructs.xml"
	mv /srv/game/eq2emu/structs/SpawnStructs.xml /srv/game/eq2emu/SpawnStructs.xml
	echo "copy /srv/game/eq2emu/structs/SpawnStructs.xml to /srv/game/eq2emu/SpawnStructs.xml"
else
	echo "/srv/game/eq2emu/structs/SpawnStructs.xml not found! Nothing to do."
fi


#mysql eq2emu < /srv/game/eq2emu/database/dumps/dev_db/EQ2DBProject_Current.sql
Last edited by Verve on Sun Jun 09, 2019 5:26 pm, edited 1 time in total.

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: error compiling 64bit ubuntu

Post by Jabantiz » Sun Jun 09, 2019 3:49 pm

That is the correct svn.

For this one error it was an incomplete commit it looks like so in quest.cpp find the function "EQ2Packet* Quest::QuestJournalReply" and replace it with this

Code: Select all

EQ2Packet* Quest::QuestJournalReply(int16 version, int32 player_crc, Player* player, QuestStep* updateStep, int8 update_count, bool old_completed_quest, bool quest_failure, bool display_quest_helper) {
	PacketStruct* packet = configReader.getStruct("WS_QuestJournalReply", version);
	if (packet) {
		packet->setDataByName("quest_id", id);
		packet->setDataByName("player_crc", player_crc);
		packet->setDataByName("name", name.c_str());
		packet->setDataByName("description", description.c_str());
		packet->setDataByName("zone", zone.c_str());
		packet->setDataByName("type", type.c_str());
		packet->setDataByName("complete_header", "To complete this quest, I must do the following tasks:");
		packet->setDataByName("day", day);
		packet->setDataByName("month", month);
		packet->setDataByName("year", year);
		packet->setDataByName("level", level);
		/* To get the quest timer to work you need to set unknown, index 4 to 1 and the time stamp
		to the current time + the time in seconds you want to show in the journal*/
		if (m_timestamp > 0) {
			packet->setDataByName("unknown", 1, 4);
			packet->setDataByName("time_stamp", m_timestamp);
		}

		int8 difficulty = 0;
		if (type == "Tradeskill")
			difficulty = player->GetTSArrowColor(level);
		else
			difficulty = player->GetArrowColor(level);
		packet->setDataByName("difficulty", difficulty);
		if (enc_level > 4)
			packet->setDataByName("encounter_level", enc_level);
		else
			packet->setDataByName("encounter_level", 4);
		packet->setDataByName("unknown2b", 4);
		int16 task_groups_completed = 0;
		int16 total_task_groups = 0;
		vector<QuestStep*> primary_order;
		vector<QuestStep*> secondary_order;
		packet->setDataByName("unknown8", 1, 1);
		packet->setSubstructArrayDataByName("reward_data", "unknown8", 1, 1);
		packet->setDataByName("unknown8b", 255);

		if (version >= 1096) {
			packet->setDataByName("deletable", 1);
			packet->setDataByName("shareable", 1);
		}
		else {
			packet->setDataByName("unknown3", 1, 5);
			packet->setDataByName("unknown3", 1, 6);
		}

		int8 map_data_count = 0;

		packet->setDataByName("bullets", 1);
		if (old_completed_quest) {
			if (version >= 1096) {
				packet->setDataByName("complete", 1);
				packet->setDataByName("complete2", 1);
				packet->setDataByName("complete3", 1);
			}
			else {
				packet->setDataByName("unknown3", 1);
				packet->setDataByName("unknown3", 1, 1);
				packet->setDataByName("unknown3", 1, 2);
				packet->setDataByName("unknown3", 1, 5);
				packet->setDataByName("unknown3", 1, 6);
			}
		}
		else if (version >= 1096 && GetCompleted()) {
			packet->setDataByName("complete", 1);
			packet->setDataByName("complete2", 1);
			packet->setDataByName("complete3", 1);
			packet->setDataByName("num_task_groups", 1);
			packet->setArrayDataByName("task_group", completed_description.c_str());
			packet->setArrayDataByName("unknown4", 0xFFFFFFFF);
			packet->setDataByName("onscreen_update", 1);
			packet->setDataByName("update_task_number", 1);
			packet->setDataByName("onscreen_update", 1);
			packet->setDataByName("onscreen_update_text", completed_description.c_str());
			if (updateStep)
				packet->setDataByName("onscreen_update_icon", updateStep->GetIcon());
			else
				packet->setDataByName("onscreen_update_icon", 0);
			// Is Heritage or db entry for classic eq quest turn in sound
			packet->setDataByName("classic_eq_sound", 0);
			// No clue what this does, set it to mach live packets
			packet->setDataByName("unknown12b", 1, 0);
		}
		else {
			map<QuestStep*, string> task_group_names;
			map<int16, string>::iterator order_itr;
			vector<QuestStep*>* steps = 0;
			MQuestSteps.lock();
			for (order_itr = task_group_order.begin(); order_itr != task_group_order.end(); order_itr++) {
				//The following is kind of crazy, but necessary to order the quests with completed ones first.  This is to make the packet like live's packet
				//for(itr = task_group.begin(); itr != task_group.end(); itr++){
				bool complete = true;
				if (task_group.count(order_itr->second) > 0) {
					steps = &(task_group[order_itr->second]);
					for (int32 i = 0; i < steps->size(); i++) {
						if (steps->at(i)->Complete() == false)
							complete = false;
					}
					if (complete) {
						for (int32 i = 0; i < steps->size(); i++) {
							if (i == 0)
								task_group_names[steps->at(i)] = order_itr->second;
							primary_order.push_back(steps->at(i));
						}
						task_groups_completed++;
						total_task_groups++;
					}
					else {
						for (int32 i = 0; i < steps->size(); i++) {
							if (i == 0)
								task_group_names[steps->at(i)] = order_itr->second;
							secondary_order.push_back(steps->at(i));
						}
						total_task_groups++;
					}
				}
			}
			packet->setDataByName("task_groups_completed", task_groups_completed);
			packet->setArrayLengthByName("num_task_groups", total_task_groups);
			if (IsTracked() /*display_quest_helper*/ && task_groups_completed < total_task_groups)
				packet->setDataByName("display_quest_helper", 1);
			int16 index = 0;
			QuestStep* step = 0;
			for (int32 i = 0; i < primary_order.size(); i++) {
				if (primary_order[i]->GetTaskGroup()) {
					if (task_group_names.count(primary_order[i]) > 0)
						packet->setArrayDataByName("task_group", primary_order[i]->GetTaskGroup(), index);
					else
						continue;
					packet->setSubArrayLengthByName("num_tasks", task_group[primary_order[i]->GetTaskGroup()].size(), index);
					packet->setSubArrayLengthByName("num_updates", task_group[primary_order[i]->GetTaskGroup()].size(), index);
					map_data_count += task_group[primary_order[i]->GetTaskGroup()].size();
					if (task_group[primary_order[i]->GetTaskGroup()].size() > 0)
						packet->setDataByName("bullets", 1);
					for (int32 x = 0; x < task_group[primary_order[i]->GetTaskGroup()].size(); x++) {
						step = task_group[primary_order[i]->GetTaskGroup()].at(x);
						if (!step)
							continue;
						if (step->GetDescription())
							packet->setSubArrayDataByName("task", step->GetDescription(), index, x);
						packet->setSubArrayDataByName("task_completed", 1, index, x);
						packet->setSubArrayDataByName("index", x, index, x);
						packet->setSubArrayDataByName("update_currentval", step->GetQuestCurrentQuantity(), index, x);
						packet->setSubArrayDataByName("update_maxval", step->GetQuestNeededQuantity(), index, x);
						if (step->GetUpdateTargetName())
							packet->setSubArrayDataByName("update_target_name", step->GetUpdateTargetName(), index, x);
						packet->setSubArrayDataByName("icon", step->GetIcon(), index, x);
						if (updateStep && step == updateStep) {
							packet->setDataByName("update", 1);
							//	packet->setDataByName("unknown5d", 1);
							if (!quest_failure)
								packet->setDataByName("onscreen_update", 1);
							packet->setDataByName("onscreen_update_count", update_count);
							packet->setDataByName("onscreen_update_icon", step->GetIcon());
							if (step->GetUpdateName())
								packet->setDataByName("onscreen_update_text", step->GetUpdateName());
							else if (step->GetDescription())
								packet->setDataByName("onscreen_update_text", step->GetDescription());
							packet->setDataByName("update_task_number", x);
							packet->setDataByName("update_taskgroup_number", index);
						}
						packet->setArrayDataByName("unknown4", 0xFFFFFFFF, x);
					}
					index++;
				}
				else {
					if (task_group_names.count(primary_order[i]) > 0) {
						step = primary_order[i];
						if (updateStep && step == updateStep) {
							packet->setDataByName("update", 1);
							//	packet->setDataByName("unknown5d", 1);
							if (!quest_failure)
								packet->setDataByName("onscreen_update", 1);
							packet->setDataByName("onscreen_update_count", update_count);
							packet->setDataByName("onscreen_update_icon", step->GetIcon());
							if (step->GetUpdateName())
								packet->setDataByName("onscreen_update_text", step->GetUpdateName());
							else if (step->GetDescription())
								packet->setDataByName("onscreen_update_text", step->GetDescription());
							packet->setDataByName("update_task_number", i);
							packet->setDataByName("update_taskgroup_number", index);
						}
						packet->setArrayDataByName("task_group", primary_order[i]->GetDescription(), index);
						index++;
					}
				}
			}
			for (int32 i = 0; i < secondary_order.size(); i++) {
				if (secondary_order[i]->GetTaskGroup()) {
					if (task_group_names.count(secondary_order[i]) > 0)
						packet->setArrayDataByName("task_group", secondary_order[i]->GetTaskGroup(), index);
					else
						continue;
					packet->setSubArrayLengthByName("num_tasks", task_group[secondary_order[i]->GetTaskGroup()].size(), index);
					packet->setSubArrayLengthByName("num_updates", task_group[secondary_order[i]->GetTaskGroup()].size(), index);
					map_data_count += task_group[secondary_order[i]->GetTaskGroup()].size();
					if (task_group[secondary_order[i]->GetTaskGroup()].size() > 0)
						packet->setDataByName("bullets", 1);
					for (int32 x = 0; x < task_group[secondary_order[i]->GetTaskGroup()].size(); x++) {
						step = task_group[secondary_order[i]->GetTaskGroup()].at(x);
						if (!step)
							continue;
						if (step->GetDescription())
							packet->setSubArrayDataByName("task", step->GetDescription(), index, x);
						if (step->Complete())
							packet->setSubArrayDataByName("task_completed", 1, index, x);
						else
							packet->setSubArrayDataByName("task_completed", 0, index, x);
						packet->setSubArrayDataByName("index", x, index, x);
						packet->setSubArrayDataByName("update_currentval", step->GetQuestCurrentQuantity(), index, x);
						packet->setSubArrayDataByName("update_maxval", step->GetQuestNeededQuantity(), index, x);
						packet->setSubArrayDataByName("icon", step->GetIcon(), index, x);
						if (step->GetUpdateTargetName())
							packet->setSubArrayDataByName("update_target_name", step->GetUpdateTargetName(), index, x);
						if (updateStep && step == updateStep) {
							packet->setDataByName("update", 1);
							if (!quest_failure)
								packet->setDataByName("onscreen_update", 1);
							packet->setDataByName("onscreen_update_count", update_count);
							packet->setDataByName("onscreen_update_icon", step->GetIcon());
							if (step->GetUpdateName())
								packet->setDataByName("onscreen_update_text", step->GetUpdateName());
							else if (step->GetDescription())
								packet->setDataByName("onscreen_update_text", step->GetDescription());
							if (quest_failure)
								packet->setDataByName("onscreen_update_text2", "failed");
							packet->setDataByName("update_task_number", x);
							packet->setDataByName("update_taskgroup_number", index);
						}
						packet->setArrayDataByName("unknown4", 0xFFFFFFFF, x);
					}
					index++;
				}
				else {
					if (task_group_names.count(secondary_order[i]) > 0) {
						step = secondary_order[i];
						if (updateStep && step == updateStep) {
							packet->setDataByName("update", 1);
							if (!quest_failure)
								packet->setDataByName("onscreen_update", 1);
							packet->setDataByName("onscreen_update_count", update_count);
							packet->setDataByName("onscreen_update_icon", step->GetIcon());
							if (step->GetUpdateName())
								packet->setDataByName("onscreen_update_text", step->GetUpdateName());
							else if (step->GetDescription())
								packet->setDataByName("onscreen_update_text", step->GetDescription());
							packet->setDataByName("update_task_number", i);
							packet->setDataByName("update_taskgroup_number", index);
						}
						if (task_group_names.size() == 1) {
							packet->setSubArrayLengthByName("num_tasks", 1, index);
							packet->setSubArrayDataByName("task", secondary_order[i]->GetDescription(), index);
							packet->setDataByName("bullets", 0);
						}
						else
							packet->setArrayDataByName("task_group", secondary_order[i]->GetDescription(), index);
						index++;
					}
				}
			}

			for (int16 i = 0; i < total_task_groups; i++)
				packet->setArrayDataByName("unknown4", 0xFFFFFFFF, i);

			if (step->GetItemID() > 0) {
				packet->setArrayLengthByName("usable_item_count", 1);
				Item* item = player->GetPlayerItemList()->GetItemFromID(step->GetItemID(), 1);
				if (item) {
					packet->setArrayDataByName("item_id", item->details.item_id, 0);
					packet->setArrayDataByName("item_unique_id", item->details.unique_id, 0);
					packet->setArrayDataByName("item_icon", item->details.icon, 0);
					packet->setArrayDataByName("unknown2", 0xFFFFFFFF, 0);//item->details.item_id, 0);

				}
			}
		}
		MQuestSteps.unlock();


		string reward_str = "";
		if (version >= 1096)
			reward_str = "reward_data_";
		string tmp = reward_str + "reward";
		packet->setDataByName(tmp.c_str(), "Quest Reward!");
		if (reward_coins > 0) {
			tmp = reward_str + "min_coin";
			packet->setDataByName(tmp.c_str(), reward_coins);
			tmp = reward_str + "max_coin";
			packet->setDataByName(tmp.c_str(), reward_coins_max);
		}
		tmp = reward_str + "status_points";
		packet->setDataByName(tmp.c_str(), reward_status);
		if (reward_comment.length() > 0) {
			tmp = reward_str + "text";
			packet->setDataByName(tmp.c_str(), reward_comment.c_str());
		}
		if (reward_items.size() > 0) {
			tmp = reward_str + "num_rewards";
			packet->setArrayLengthByName(tmp.c_str(), reward_items.size());
			Item* item = 0;
			for (int32 i = 0; i < reward_items.size(); i++) {
				item = reward_items[i];
				packet->setArrayDataByName("reward_id", item->details.item_id, i);
				if (version < 860)
					packet->setItemArrayDataByName("item", item, player, i, 0, -1);
				else if (version < 1193)
					packet->setItemArrayDataByName("item", item, player, i);
				else
					packet->setItemArrayDataByName("item", item, player, i, 0, 2);
			}
		}
		if (selectable_reward_items.size() > 0) {
			tmp = reward_str + "num_select_rewards";
			packet->setArrayLengthByName(tmp.c_str(), selectable_reward_items.size());
			Item* item = 0;
			for (int32 i = 0; i < selectable_reward_items.size(); i++) {
				item = selectable_reward_items[i];
				packet->setArrayDataByName("select_reward_id", item->details.item_id, i);
				if (version < 860)
					packet->setItemArrayDataByName("select_item", item, player, i, 0, -1);
				else if (version < 1193)
					packet->setItemArrayDataByName("select_item", item, player, i);
				else
					packet->setItemArrayDataByName("select_item", item, player, i, 0, 2);
			}
		}
		map<int32, sint32>* reward_factions = GetRewardFactions();
		if (reward_factions && reward_factions->size() > 0) {
			tmp = reward_str + "num_factions";
			packet->setArrayLengthByName(tmp.c_str(), reward_factions->size());
			map<int32, sint32>::iterator itr;
			int16 index = 0;
			for (itr = reward_factions->begin(); itr != reward_factions->end(); itr++) {
				int32 faction_id = itr->first;
				sint32 amount = itr->second;
				const char* faction_name = master_faction_list.GetFactionNameByID(faction_id);
				if (faction_name) {
					packet->setArrayDataByName("faction_name", const_cast<char*>(faction_name), index);
					packet->setArrayDataByName("amount", amount, index);
				}
				index++;
			}
		}

		//packet->setArrayLengthByName("map_data_array_size", map_data_count);

		EQ2Packet* outapp = packet->serialize();
		//packet->PrintPacket();
		//DumpPacket(outapp);
		safe_delete(packet);
		return outapp;
	}

	return 0;
}

User avatar
Verve
Posts: 8
Joined: Wed Dec 02, 2009 4:50 am
EQ2Emu Server: Innovation
Characters: Verve, Praezeptor
Location: Germany, KU
Contact:

Re: error compiling 64bit ubuntu

Post by Verve » Sun Jun 09, 2019 4:51 pm

Thanks again Jabantiz,

the error with Quest.cpp is fixed but a new error with liblua5.3:

Code: Select all

Building Lua 5.3.4...
/bin/sh: 1: cd: can't cd to LUA
gcc: error: lapi.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lauxlib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lbaselib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lbitlib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lcode.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lcorolib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lctype.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: ldblib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: ldebug.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: ldo.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: ldump.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lfunc.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lgc.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: linit.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: liolib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: llex.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lmathlib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lmem.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: loadlib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lobject.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lopcodes.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: loslib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lparser.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lstate.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lstring.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lstrlib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: ltable.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: ltablib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: ltm.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lundump.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lutf8lib.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lvm.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lzio.c: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
gcc: error: lua.hpp: Datei oder Verzeichnis nicht gefunden
gcc: fatal error: no input files
compilation terminated.
Finished with Lua.
Linking...
/usr/bin/ld: cannot find -llua5-3-4
collect2: error: ld returned 1 exit status
makefile:167: die Regel für Ziel „eq2world“ scheiterte
make: *** [eq2world] Fehler 1
liblua5.1-dev, liblua5.3-dev, lua5.1 and lua5.3 are installed. Do i need another package?

hmm on .../source/LUA/* all the missing files are available and readable. I dont know why the compiler dont find these ...

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: error compiling 64bit ubuntu

Post by Jabantiz » Sun Jun 09, 2019 5:13 pm

All the files to compile lua are there so I have no clue why it is failing to find them. I am not a linux guy and I don't even have a linux vm set up currently so I will not be of help on this one, sorry.

User avatar
Verve
Posts: 8
Joined: Wed Dec 02, 2009 4:50 am
EQ2Emu Server: Innovation
Characters: Verve, Praezeptor
Location: Germany, KU
Contact:

Re: error compiling 64bit ubuntu

Post by Verve » Sun Jun 09, 2019 5:34 pm

No Problem Jabantiz,

i'm not a Programmer and cant fix the code :)
I have tried to compile it with the 32bit makefile and it runs without errors here.

So i hoped the new build fixes my errors in the server but it seems something already wrong:

Code: Select all

Module: EQ2EMu WorldServer, Version: 0.7.3-dev

Copyright (C) 2007-2011 EQ2Emulator. http://eq2emulator.net/

EQ2Emulator is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

EQ2Emulator is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

 /$$$$$$$$  /$$$$$$   /$$$$$$  /$$$$$$$$
| $$_____/ /$$__  $$ /$$__  $$| $$_____/
| $$      | $$  \ $$|__/  \ $$| $$       /$$$$$$/$$$$  /$$   /$$
| $$$$$   | $$  | $$  /$$$$$$/| $$$$$   | $$_  $$_  $$| $$  | $$
| $$__/   | $$  | $$ /$$____/ | $$__/   | $$ \ $$ \ $$| $$  | $$
| $$      | $$/$$ $$| $$      | $$      | $$ | $$ | $$| $$  | $$
| $$$$$$$$|  $$$$$$/| $$$$$$$$| $$$$$$$$| $$ | $$ | $$|  $$$$$$/
|________/ \____ $$$|________/|________/|__/ |__/ |__/ \______/
                \__/

 Website     : http://eq2emulator.net
 Forums      : http://eq2emulator.net/phpBB3/
 Contributors: http://eq2emulator.net/wiki/index.php/Developer:Contributors
 SVN         : http://svn.eq2emulator.net/svn/eq2server

For more detailed logging, modify 'Level' param the log_config.xml file.

02:27:18 I Init      : Starting EQ2Emulator WorldServer...
02:27:18 I DB        : Using database 'eq2emu' at localhost
02:27:18 I World     : Loading System Data...
02:27:20 I World     : Loaded System Data (took 2 seconds)
02:27:20 W Threaded  : Using Threaded loading of static data...
02:27:20 I Guilds    : Loading Guilds...
02:27:20 W Thread    : Spell Loading Thread started.
02:27:20 W Thread    : Item Loading Thread started.
02:27:20 I DB        : Using database 'eq2emu' at localhost
02:27:20 I Guilds    :  Loaded 0 Guild(s)
02:27:20 I Recipes   : Loading Recipe Books...
02:27:20 I DB        : Using database 'eq2emu' at localhost
02:27:20 I Spells    : Loading Spells...
02:27:20 I Items     : Loading Items...
02:27:20 I Recipes   : Loading Recipes...
02:27:20 E Database  : Error 1054 running MySQL query: Unknown column 'power_by_level' in 'field list'
SELECT s.`id`, ts.spell_id, ts.index, `name`, `description`, `type`, `class_skill`, `mastery_skill`, `tier`, `is_aa`,`hp_req`, `power_req`,`power_by_level`, `cast_time`, `recast`, `radius`, `max_aoe_targets`, `req_concentration`, `range`, `duration1`, `duration2`, `resistibility`, `hp_upkeep`, `power_upkeep`, `duration_until_cancel`, `target_type`, `recovery`, `power_req_percent`, `hp_req_percent`, `icon`, `icon_heroic_op`, `icon_backdrop`, `success_message`, `fade_message`, `cast_type`, `lua_script`, `call_frequency`, `interruptable`, `spell_visual`, `effect_message`, `min_range`, `can_effect_raid`, `affect_only_group_members`, `hit_bonus`, `display_spell_tier`, `friendly_spell`, `group_spell`, `spell_book_type`, spell_type+0, s.is_active, savagery_req, savagery_req_percent, savagery_upkeep, dissonance_req, dissonance_req_percent, dissonance_upkeep, linked_timer_id, det_type, incurable, control_effect_type, cast_while_moving, casting_flags, persist_through_death, not_maintained, savage_bar, savage_bar_slot, soe_spell_crc FROM (spells s, spell_tiers st) LEFT JOIN spell_ts_ability_index ts ON s.`id` = ts.spell_id WHERE s.id = st.spell_id AND s.is_active = 1 ORDER BY s.`id`, `tier`

02:27:20 I Tradeskills: Loading Tradeskill Events...
02:27:20 I AA        : Loading Alternate Advancements...
02:27:20 E DBCore    : #1054: Unknown column 'displayedclassification' in 'field list'
Query:
SELECT `nodeid`,`minlevel`, `spellcrc`, `name`, `description`, `aa_list_fk`, `icon_id`, `icon_backdrop`, `xcoord`, `ycoord`, `pointspertier`, `maxtier`, `firstparentid`, `firstparentrequiredtier`, `displayedclassification`,`requiredclassification`, `classificationpointsrequired`, `pointsspentintreetounlock`, `title`,`titlelevel` FROM spell_aa_nodelist
02:27:20 I AA        : Loaded 0 Alternate Advancement(s)
02:27:20 I AA        : Loading AA Tree Nodes...
02:27:20 I AA        : Loaded 271 AA Tree Nodes
02:27:20 I Titles    : Loading Titles...
02:27:20 I Languages : Loading Languages...
02:27:20 E LUA       : Error loading cannot open Spells/AA/Sorcerer/KineticEvasion.lua: No such file or directory (file name: 'Spells/AA/Sorcerer/KineticEvasion.lua')
02:27:20 I Chat      : Loading channels...
02:27:20 I LUA       : Loading Spawn Scripts...
02:27:20 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/Generic/SpawnGroups.lua'
02:27:20 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/Generic/OgofMystic1.lua'
02:27:20 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/BeggarsCourt/aBrotherhoodenforcer1.lua'
02:27:20 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/BeggarsCourt/aBrotherhoodenforcer2.lua'
02:27:20 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/BeggarsCourt/aBrotherhoodenforcer3.lua'
02:27:20 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/Commonlands/aspectraldefender.lua'
02:27:20 I LUA       : Loading Zone Scripts...
02:27:20 I World     : Loading House Zone Data...
02:27:20 I World     : Loading Heroic OP Data...
02:27:20 I World     : Loading Race Types Data...
02:27:20 I World     : - Loaded 0 Race Types
02:27:20 I World     : Waiting for load threads to finish.
02:27:22 I Spells    : Loaded 0 Spells (took 2 seconds)
02:27:22 I Spells    : Loading Spell Errors...
02:27:22 I Traits    : Loading Traits...
02:27:22 I Traits    : Loaded 74 Trait(s)
02:27:22 W Thread    : Spell Loading Thread completed.
02:27:24 I Items     : Loaded 153059 Total Items (took 4 seconds)
02:27:24 I Collect   : Loading Collections...
02:27:24 I Merchants : Loading Merchants...
02:27:24 I Quests    : Loading Quests...
02:27:24 W Thread    : Item Loading Thread completed.
02:27:24 I World     : Load threads finished.
02:27:24 I World     : Total World startup time: 6 seconds.
02:27:24 I Net       : World server listening on: X.X.X.X:9000
02:27:24 I Zone      : Starting static zones...
02:27:24 I Zone      : Loading new Zone 'GMHall'
02:27:24 W SPGrid    : SPGrid::Init() unable to open the map file for qey_guildhall_tier3. (zoneserver will continue to run fine without it)
02:27:24 I Console   : Type 'help' or '?' and press enter for menu options.
02:27:24 I NPC       : -Loading NPC data...
02:27:24 E DBCore    : #1054: Unknown column 's.lua_race_id' in 'field list'
Query:
SELECT npc.spawn_id, s.name, npc.min_level, npc.max_level, npc.enc_level, s.race, s.model_type, npc.class_, npc.gender, s.command_primary, s.command_secondary, s.show_name, npc.min_group_size, npc.max_group_size, npc.hair_type_id, npc.facial_hair_type_id, npc.wing_type_id, npc.chest_type_id, npc.legs_type_id, npc.soga_hair_type_id, npc.soga_facial_hair_type_id, s.attackable, s.show_level, s.targetable, s.show_command_icon, s.display_hand_icon, s.hp, s.power, s.size, s.collision_radius, npc.action_state, s.visual_state, npc.mood_state, npc.initial_state, npc.activity_status, s.faction_id, s.sub_title, s.merchant_id, s.merchant_type, s.size_offset, npc.attack_type, npc.ai_strategy+0, npc.spell_list_id, npc.secondary_spell_list_id, npc.skill_list_id, npc.secondary_skill_list_id, npc.equipment_list_id, npc.str, npc.sta, npc.wis, npc.intel, npc.agi, npc.heat, npc.cold, npc.magic, npc.mental, npc.divine, npc.disease, npc.poison, npc.aggro_radius, npc.cast_percentage, npc.randomize, npc.soga_model_type, npc.heroic_flag, npc.alignment, npc.elemental, npc.arcane, npc.noxious, s.savagery, s.dissonance, npc.hide_hood, npc.emote_state, s.prefix, s.suffix, s.last_name, s.lua_race_id
FROM spawn s
INNER JOIN spawn_npcs npc
ON s.id = npc.spawn_id
INNER JOIN spawn_location_entry le
ON npc.spawn_id = le.spawn_id
INNER JOIN spawn_location_placement lp
ON le.spawn_location_id = lp.spawn_location_id
WHERE lp.zone_id = 1
GROUP BY s.id
02:27:24 I NPC       : --Loaded 0 NPC(s).
02:27:24 I NPC       : --Loaded 5 NPC Spell(s).
02:27:24 I NPC       : --Loaded 0 NPC Skill(s).
02:27:24 I NPC       : --Loaded 0 NPC Equipment Piece(s).
02:27:24 I World     : Connected to LoginServer: eq2emulator.net: 9100
02:27:25 I NPC       : --Loaded 0 NPC Appearance(s).
02:27:25 I NPC       : --Loaded 0 NPC Equipment Appearance(s).
02:27:25 I NPC       : -Load NPC data complete!
02:27:25 I Object    : -Loading Object data...
02:27:25 I Object    : -Load Object data complete!
02:27:25 I Sign      : -Loading Sign data...
02:27:25 I Sign      : -Load Sign data complete!
02:27:25 I Widget    : -Loading Widget data...
02:27:25 I Widget    : -Load Widget data complete!
02:27:25 I GSpawn    : -Loading Groundspawn data...
02:27:25 I GSpawn    : -Load Groundspawn data complete!
02:27:25 I Pet       : -Loading Pet data...
02:27:25 I Pet       : -Load Pet data complete!
02:27:25 I Loot      : -Loading Spawn loot data...
02:27:25 I Loot      : -Loading Global loot data...
02:27:25 I Loot      : -Loading Spawn loot data complete!
02:27:25 I Transport : -Loading Transporters...
02:27:25 I Transport : -Loading Transporters complete!
02:27:25 I Spawn     : Loaded for zone 'GMHall' (1):
        3 NPC(s), 71 Object(s), 0 Widget(s)
        0 Sign(s), 0 Ground Spawn(s), 0 Spawn Group(s)
        0 Spawn Group Association(s), 0 Spawn Group Chance(s)
02:27:25 E Zone      : Error adding spawn to zone
02:27:25 E Zone      : Error adding spawn to zone
02:27:25 E Zone      : Error adding spawn to zone
i have copied the complete trunk svn files, cleared complete my MySQL Database an filles with it with EQ2DBProject_Current.tar.gz SQL from the dumps/dev_db/ path. Have i something forgotten or have i doing something wrong?

Jabantiz
Lead Developer
Posts: 2912
Joined: Wed Jul 25, 2007 2:52 pm
Location: California

Re: error compiling 64bit ubuntu

Post by Jabantiz » Sun Jun 09, 2019 9:08 pm

The LUA error look like invalid content and those you can ignore as they won't effect the server.

The sql errors look like the db didn't update properly so for the first two I would either drop them or manually update them. Here is the create code for those tables.

`spell_tiers` - seems to be missing the `power_by_level` in your db.

Code: Select all

CREATE TABLE `spell_tiers` (
	`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	`spell_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`tier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`hp_req` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`hp_req_percent` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`hp_upkeep` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`power_req` FLOAT UNSIGNED NOT NULL DEFAULT '0',
	`power_req_percent` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`power_upkeep` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`power_by_level` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
	`savagery_req` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`savagery_req_percent` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`savagery_upkeep` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`dissonance_req` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`dissonance_req_percent` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`dissonance_upkeep` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`req_concentration` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`cast_time` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '100',
	`recovery` FLOAT NOT NULL DEFAULT '0',
	`recast` FLOAT UNSIGNED NOT NULL DEFAULT '1',
	`radius` FLOAT UNSIGNED NOT NULL DEFAULT '0',
	`max_aoe_targets` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
	`min_range` FLOAT UNSIGNED NOT NULL DEFAULT '0',
	`range` FLOAT UNSIGNED NOT NULL DEFAULT '0',
	`duration1` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`duration2` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`resistibility` FLOAT UNSIGNED NOT NULL DEFAULT '0',
	`hit_bonus` FLOAT NOT NULL DEFAULT '0',
	`call_frequency` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`unknown9` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`given_by` VARCHAR(64) NOT NULL DEFAULT '' COLLATE 'latin1_general_ci',
	PRIMARY KEY (`id`),
	UNIQUE INDEX `SpellTierIDX` (`spell_id`, `tier`),
	CONSTRAINT `FK_spell_tiers` FOREIGN KEY (`spell_id`) REFERENCES `spells` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='latin1_general_ci'
ENGINE=InnoDB
;
`spell_aa_nodelist` - seems to be missing the `displayedclassification` in your db.

Code: Select all

CREATE TABLE `spell_aa_nodelist` (
	`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
	`aa_list_fk` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`displayedclassification` VARCHAR(64) NOT NULL DEFAULT '' COLLATE 'latin1_general_ci',
	`requiredclassification` VARCHAR(64) NOT NULL DEFAULT '' COLLATE 'latin1_general_ci',
	`classificationpointsrequired` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`description` TEXT NULL DEFAULT NULL COLLATE 'latin1_general_ci',
	`firstparentid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`firstparentrequiredtier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`maxtier` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`minlevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`name` VARCHAR(64) NOT NULL DEFAULT '' COLLATE 'latin1_general_ci',
	`nodeid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`pointspertier` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
	`pointsspentgloballytounlock` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
	`pointsspentintreetounlock` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
	`spellcrc` INT(10) UNSIGNED NOT NULL DEFAULT '0',
	`title` VARCHAR(64) NOT NULL DEFAULT '' COLLATE 'latin1_general_ci',
	`titlelevel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`xcoord` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`ycoord` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',
	`icon_backdrop` INT(10) NULL DEFAULT '0',
	`icon_id` INT(10) NULL DEFAULT '0',
	PRIMARY KEY (`id`)
)
COLLATE='latin1_general_ci'
ENGINE=InnoDB
;
The third sql error is something we have been debating and don't think we will be using that so it would require a code change so in WorldDatabase.cpp find the function "void WorldDatabase::LoadNPCs(ZoneServer* zone)" and replace it with this code

Code: Select all

void WorldDatabase::LoadNPCs(ZoneServer* zone){
	Query query;
	MYSQL_ROW row;
	NPC* npc = 0;
	int32 id = 0;
	int32 total = 0;
	MYSQL_RES* result = query.RunQuery2(Q_SELECT,"SELECT npc.spawn_id, s.name, npc.min_level, npc.max_level, npc.enc_level, s.race, s.model_type, npc.class_, npc.gender, s.command_primary, s.command_secondary, s.show_name, npc.min_group_size, npc.max_group_size, npc.hair_type_id, npc.facial_hair_type_id, npc.wing_type_id, npc.chest_type_id, npc.legs_type_id, npc.soga_hair_type_id, npc.soga_facial_hair_type_id, s.attackable, s.show_level, s.targetable, s.show_command_icon, s.display_hand_icon, s.hp, s.power, s.size, s.collision_radius, npc.action_state, s.visual_state, npc.mood_state, npc.initial_state, npc.activity_status, s.faction_id, s.sub_title, s.merchant_id, s.merchant_type, s.size_offset, npc.attack_type, npc.ai_strategy+0, npc.spell_list_id, npc.secondary_spell_list_id, npc.skill_list_id, npc.secondary_skill_list_id, npc.equipment_list_id, npc.str, npc.sta, npc.wis, npc.intel, npc.agi, npc.heat, npc.cold, npc.magic, npc.mental, npc.divine, npc.disease, npc.poison, npc.aggro_radius, npc.cast_percentage, npc.randomize, npc.soga_model_type, npc.heroic_flag, npc.alignment, npc.elemental, npc.arcane, npc.noxious, s.savagery, s.dissonance, npc.hide_hood, npc.emote_state, s.prefix, s.suffix, s.last_name\n"
													"FROM spawn s\n"
													"INNER JOIN spawn_npcs npc\n"
													"ON s.id = npc.spawn_id\n"
													"INNER JOIN spawn_location_entry le\n"
													"ON npc.spawn_id = le.spawn_id\n"
													"INNER JOIN spawn_location_placement lp\n"
													"ON le.spawn_location_id = lp.spawn_location_id\n"
													"WHERE lp.zone_id = %u\n"
													"GROUP BY s.id",
													zone->GetZoneID());
	while(result && (row = mysql_fetch_row(result))){
		/*npc->SetAppearanceID(atoi(row[12]));
		AppearanceData* appearance = world.GetNPCAppearance(npc->GetAppearanceID());
		if(appearance)
		memcpy(&npc->appearance, appearance, sizeof(AppearanceData));
		*/
		id = atoul(row[0]);
		if(zone->GetNPC(id, true))
			continue;
		npc = new NPC();
		npc->SetDatabaseID(id);
		strcpy(npc->appearance.name, row[1]);
		vector<EntityCommand*>* primary_command_list = zone->GetEntityCommandList(atoul(row[9]));
		vector<EntityCommand*>* secondary_command_list = zone->GetEntityCommandList(atoul(row[10]));
		if(primary_command_list){
			npc->SetPrimaryCommands(primary_command_list);
			npc->primary_command_list_id = atoul(row[9]);
		}
		if(secondary_command_list){
			npc->SetSecondaryCommands(secondary_command_list);
			npc->secondary_command_list_id = atoul(row[10]);
		}
		npc->appearance.min_level = atoi(row[2]);
		npc->appearance.max_level = atoi(row[3]);
		npc->appearance.level =		atoi(row[2]);
		npc->appearance.encounter_level = atoi(row[4]);
		npc->appearance.race = atoi(row[5]);
		//npc->appearance.lua_race_id = atoi(row[75]);
		if (atoi(row[74]) > 0) {
			int16 xxx = atoi(row[75]);
			int8 yyy = 0;
		}
		npc->appearance.model_type = atoi(row[6]);
		npc->appearance.soga_model_type = atoi(row[62]);
		npc->appearance.adventure_class = atoi(row[7]);
		npc->appearance.gender = atoi(row[8]);
		npc->appearance.display_name = atoi(row[11]);
		npc->features.hair_type = atoi(row[14]);
		npc->features.hair_face_type = atoi(row[15]);
		npc->features.wing_type = atoi(row[16]);
		npc->features.chest_type = atoi(row[17]);
		npc->features.legs_type = atoi(row[18]);
		npc->features.soga_hair_type = atoi(row[19]);
		npc->features.soga_hair_face_type = atoi(row[20]);
		npc->appearance.attackable = atoi(row[21]);
		npc->appearance.show_level = atoi(row[22]);
		npc->appearance.targetable = atoi(row[23]);
		npc->appearance.show_command_icon = atoi(row[24]);
		npc->appearance.display_hand_icon = atoi(row[25]);
		npc->appearance.hide_hood = atoi(row[70]);
		npc->appearance.randomize = atoi(row[61]);
		npc->SetTotalHP(atoul(row[26]));
		npc->SetTotalPower(atoul(row[27]));
		npc->SetHP(npc->GetTotalHP());
		npc->SetPower(npc->GetTotalPower());
		if(npc->GetTotalHP() == 0){
			npc->SetTotalHP(15*npc->GetLevel() + 1);
			npc->SetHP(15*npc->GetLevel() + 1);
		}
		if(npc->GetTotalPower() == 0){
			npc->SetTotalPower(15*npc->GetLevel() + 1);
			npc->SetPower(15*npc->GetLevel() + 1);
		}
		npc->size = atoi(row[28]);
		npc->appearance.pos.collision_radius = atoi(row[29]);
		npc->appearance.action_state = atoi(row[30]);
		npc->appearance.visual_state = atoi(row[31]);
		npc->appearance.mood_state = atoi(row[32]);
		npc->appearance.emote_state = atoi(row[71]);
		npc->appearance.pos.state = atoi(row[33]);
		npc->appearance.activity_status = atoi(row[34]);
		npc->faction_id = atoul(row[35]);
		if(row[36]){
			if(strlen(row[36]) < sizeof(npc->appearance.sub_title))
				strcpy(npc->appearance.sub_title, row[36]);
			else
				strncpy(npc->appearance.sub_title, row[36], sizeof(npc->appearance.sub_title));
		}
		npc->SetMerchantID(atoul(row[37]));
		npc->SetMerchantType(atoi(row[38]));
		npc->SetSizeOffset(atoi(row[39]));
		npc->SetAttackType(atoi(row[40]));
		npc->SetAIStrategy(atoi(row[41]));
		npc->SetPrimarySpellList(atoul(row[42]));
		npc->SetSecondarySpellList(atoul(row[43]));
		npc->SetPrimarySkillList(atoul(row[44]));
		npc->SetSecondarySkillList(atoul(row[45]));
		npc->SetEquipmentListID(atoul(row[46]));

		InfoStruct* info = npc->GetInfoStruct();
		info->str_base = atoi(row[47]);
		info->sta_base = atoi(row[48]);
		info->wis_base = atoi(row[49]);		
		info->intel_base = atoi(row[50]);
		info->agi_base = atoi(row[51]);
		info->heat_base = atoi(row[52]);
		info->cold_base = atoi(row[53]);
		info->magic_base = atoi(row[54]);
		info->mental_base = atoi(row[55]);
		info->divine_base = atoi(row[56]);
		info->disease_base = atoi(row[57]);
		info->poison_base = atoi(row[58]);
		info->alignment = atoi(row[64]);
		npc->SetAggroRadius(atof(row[59]));
		npc->SetCastPercentage(atoi(row[60]));
		npc->appearance.heroic_flag = atoi(row[63]);

		info->elemental_base = atoi(row[65]);
		info->arcane_base = atoi(row[66]);
		info->noxious_base = atoi(row[67]);
		npc->SetTotalSavagery(atoul(row[68]));
		npc->SetTotalDissonance(atoul(row[69]));
		npc->SetSavagery(npc->GetTotalSavagery());
		npc->SetDissonance(npc->GetTotalDissonance());
		if(npc->GetTotalSavagery() == 0){
			npc->SetTotalSavagery(15*npc->GetLevel() + 1);
			npc->SetSavagery(15*npc->GetLevel() + 1);
		}
		if(npc->GetTotalDissonance() == 0){
			npc->SetTotalDissonance(15*npc->GetLevel() + 1);
			npc->SetDissonance(15*npc->GetLevel() + 1);
		}
		npc->SetPrefixTitle(row[72]);
		npc->SetSuffixTitle(row[73]);
		npc->SetLastName(row[74]);

		zone->AddNPC(id, npc);
		total++;
		LogWrite(NPC__DEBUG, 5, "NPC", "---Loading NPC: '%s' (%u)", npc->appearance.name, id);
	}
	LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC(s).", total);
	LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Spell(s).", LoadNPCSpells(zone));
	LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Skill(s).", LoadNPCSkills(zone));
	LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Equipment Piece(s).", LoadNPCEquipment(zone));
	LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Appearance(s).", LoadAppearances(zone));	
	LogWrite(NPC__INFO, 0, "NPC", "--Loaded %i NPC Equipment Appearance(s).", LoadNPCAppearanceEquipmentData(zone));	
}

User avatar
Verve
Posts: 8
Joined: Wed Dec 02, 2009 4:50 am
EQ2Emu Server: Innovation
Characters: Verve, Praezeptor
Location: Germany, KU
Contact:

Re: error compiling 64bit ubuntu

Post by Verve » Mon Jun 10, 2019 8:43 am

Ok, the errors table "spell_tiers" and "spell_aa_nodelist" seems to be fixed.

But the NPC SQL error in WorldDatabase.cpp not or it seems it is a new error:

Code: Select all

Module: EQ2EMu WorldServer, Version: 0.7.3-dev

Copyright (C) 2007-2011 EQ2Emulator. http://eq2emulator.net/

EQ2Emulator is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

EQ2Emulator is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

 /$$$$$$$$  /$$$$$$   /$$$$$$  /$$$$$$$$
| $$_____/ /$$__  $$ /$$__  $$| $$_____/
| $$      | $$  \ $$|__/  \ $$| $$       /$$$$$$/$$$$  /$$   /$$
| $$$$$   | $$  | $$  /$$$$$$/| $$$$$   | $$_  $$_  $$| $$  | $$
| $$__/   | $$  | $$ /$$____/ | $$__/   | $$ \ $$ \ $$| $$  | $$
| $$      | $$/$$ $$| $$      | $$      | $$ | $$ | $$| $$  | $$
| $$$$$$$$|  $$$$$$/| $$$$$$$$| $$$$$$$$| $$ | $$ | $$|  $$$$$$/
|________/ \____ $$$|________/|________/|__/ |__/ |__/ \______/
                \__/

 Website     : http://eq2emulator.net
 Forums      : http://eq2emulator.net/phpBB3/
 Contributors: http://eq2emulator.net/wiki/index.php/Developer:Contributors
 SVN         : http://svn.eq2emulator.net/svn/eq2server

For more detailed logging, modify 'Level' param the log_config.xml file.

17:30:28 I Init      : Starting EQ2Emulator WorldServer...
17:30:28 I DB        : Using database 'eq2emu' at localhost
17:30:28 I World     : Loading System Data...
17:30:31 I World     : Loaded System Data (took 3 seconds)
17:30:31 W Threaded  : Using Threaded loading of static data...
17:30:31 I Guilds    : Loading Guilds...
17:30:31 W Thread    : Spell Loading Thread started.
17:30:31 W Thread    : Item Loading Thread started.
17:30:31 I DB        : Using database 'eq2emu' at localhost
17:30:31 I DB        : Using database 'eq2emu' at localhost
17:30:31 I Spells    : Loading Spells...
17:30:31 I Items     : Loading Items...
17:30:31 I Guilds    :  Loaded 0 Guild(s)
17:30:31 I Recipes   : Loading Recipe Books...
17:30:31 I Recipes   : Loading Recipes...
17:30:31 I Tradeskills: Loading Tradeskill Events...
17:30:31 I AA        : Loading Alternate Advancements...
17:30:31 I AA        : Loaded 0 Alternate Advancement(s)
17:30:31 I AA        : Loading AA Tree Nodes...
17:30:32 I AA        : Loaded 271 AA Tree Nodes
17:30:32 I Titles    : Loading Titles...
17:30:32 I Languages : Loading Languages...
17:30:32 I Chat      : Loading channels...
17:30:32 I LUA       : Loading Spawn Scripts...
17:30:32 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/Generic/SpawnGroups.lua'
17:30:32 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/Generic/OgofMystic1.lua'
17:30:32 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/BeggarsCourt/aBrotherhoodenforcer1.lua'
17:30:32 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/BeggarsCourt/aBrotherhoodenforcer2.lua'
17:30:32 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/BeggarsCourt/aBrotherhoodenforcer3.lua'
17:30:32 E LUA       : Invalid Entry in spawn_scripts table for lua_script 'SpawnScripts/Commonlands/aspectraldefender.lua'
17:30:32 I LUA       : Loading Zone Scripts...
17:30:32 I World     : Loading House Zone Data...
17:30:32 I World     : Loading Heroic OP Data...
17:30:32 I World     : Loading Race Types Data...
17:30:32 I World     : - Loaded 0 Race Types
17:30:32 I World     : Waiting for load threads to finish.
17:30:40 I Spells    : Loaded 22571 Spells (took 9 seconds)
17:30:40 I Spells    : Loading Spell Errors...
17:30:40 I Traits    : Loading Traits...
17:30:40 I Traits    : Loaded 74 Trait(s)
17:30:40 W Thread    : Spell Loading Thread completed.
17:30:40 I Items     : Loaded 153059 Total Items (took 9 seconds)
17:30:40 I Collect   : Loading Collections...
17:30:40 I Merchants : Loading Merchants...
17:30:40 I Quests    : Loading Quests...
17:30:41 W Thread    : Item Loading Thread completed.
17:30:41 I World     : Load threads finished.
17:30:41 I World     : Total World startup time: 13 seconds.
17:30:41 I Net       : World server listening on: X.X.X.X:9000
17:30:41 I Zone      : Starting static zones...
17:30:41 I Zone      : Loading new Zone 'GMHall'
17:30:41 W SPGrid    : SPGrid::Init() unable to open the map file for qey_guildhall_tier3. (zoneserver will continue to run fine without it)
17:30:41 I Console   : Type 'help' or '?' and press enter for menu options.
17:30:41 I NPC       : -Loading NPC data...
17:30:41 E DBCore    : #1055: Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'eq2emu.npc.min_level' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
Query:
SELECT npc.spawn_id, s.name, npc.min_level, npc.max_level, npc.enc_level, s.race, s.model_type, npc.class_, npc.gender, s.command_primary, s.command_secondary, s.show_name, npc.min_group_size, npc.max_group_size, npc.hair_type_id, npc.facial_hair_type_id, npc.wing_type_id, npc.chest_type_id, npc.legs_type_id, npc.soga_hair_type_id, npc.soga_facial_hair_type_id, s.attackable, s.show_level, s.targetable, s.show_command_icon, s.display_hand_icon, s.hp, s.power, s.size, s.collision_radius, npc.action_state, s.visual_state, npc.mood_state, npc.initial_state, npc.activity_status, s.faction_id, s.sub_title, s.merchant_id, s.merchant_type, s.size_offset, npc.attack_type, npc.ai_strategy+0, npc.spell_list_id, npc.secondary_spell_list_id, npc.skill_list_id, npc.secondary_skill_list_id, npc.equipment_list_id, npc.str, npc.sta, npc.wis, npc.intel, npc.agi, npc.heat, npc.cold, npc.magic, npc.mental, npc.divine, npc.disease, npc.poison, npc.aggro_radius, npc.cast_percentage, npc.randomize, npc.soga_model_type, npc.heroic_flag, npc.alignment, npc.elemental, npc.arcane, npc.noxious, s.savagery, s.dissonance, npc.hide_hood, npc.emote_state, s.prefix, s.suffix, s.last_name
FROM spawn s
INNER JOIN spawn_npcs npc
ON s.id = npc.spawn_id
INNER JOIN spawn_location_entry le
ON npc.spawn_id = le.spawn_id
INNER JOIN spawn_location_placement lp
ON le.spawn_location_id = lp.spawn_location_id
WHERE lp.zone_id = 1
GROUP BY s.id
17:30:41 I NPC       : --Loaded 0 NPC(s).
17:30:41 I NPC       : --Loaded 5 NPC Spell(s).
17:30:41 I NPC       : --Loaded 0 NPC Skill(s).
17:30:41 I NPC       : --Loaded 0 NPC Equipment Piece(s).
17:30:41 I World     : Connected to LoginServer: eq2emulator.net: 9100
17:30:42 I NPC       : --Loaded 0 NPC Appearance(s).
17:30:42 I NPC       : --Loaded 0 NPC Equipment Appearance(s).
17:30:42 I NPC       : -Load NPC data complete!
17:30:42 I Object    : -Loading Object data...
17:30:42 I Object    : -Load Object data complete!
17:30:42 I Sign      : -Loading Sign data...
17:30:42 I Sign      : -Load Sign data complete!
17:30:42 I Widget    : -Loading Widget data...
17:30:42 I Widget    : -Load Widget data complete!
17:30:42 I GSpawn    : -Loading Groundspawn data...
17:30:42 I GSpawn    : -Load Groundspawn data complete!
17:30:42 I Pet       : -Loading Pet data...
17:30:42 I Pet       : -Load Pet data complete!
17:30:42 I Loot      : -Loading Spawn loot data...
17:30:42 I Loot      : -Loading Global loot data...
17:30:42 I Loot      : -Loading Spawn loot data complete!
17:30:42 I Transport : -Loading Transporters...
17:30:42 I Transport : -Loading Transporters complete!
17:30:42 I Spawn     : Loaded for zone 'GMHall' (1):
        3 NPC(s), 71 Object(s), 0 Widget(s)
        0 Sign(s), 0 Ground Spawn(s), 0 Spawn Group(s)
        0 Spawn Group Association(s), 0 Spawn Group Chance(s)
17:30:42 E Zone      : Error adding spawn to zone
17:30:42 E Zone      : Error adding spawn to zone
17:30:42 E Zone      : Error adding spawn to zone
More errors after connecting and zoning:

Code: Select all

17:55:57 E LUA       : LUA Spawn command error: Could not find spawn with id of 4700096.
17:55:58 I Zone      : Starting zone shutdown timers...
17:56:09 E Database  : Error 1054 running MySQL query: Unknown column 's.lua_race_id' in 'field list'
SELECT npc.spawn_id, s.name, npc.min_level, npc.max_level, npc.enc_level, s.race, s.model_type, npc.class_, npc.gender, s.command_primary, s.command_secondary, s.show_name, npc.min_group_size, npc.max_group_size, npc.hair_type_id, npc.facial_hair_type_id, npc.wing_type_id, npc.chest_type_id, npc.legs_type_id, npc.soga_hair_type_id, npc.soga_facial_hair_type_id, s.attackable, s.show_level, s.targetable, s.show_command_icon, s.display_hand_icon, s.hp, s.power, s.size, s.collision_radius, npc.action_state, s.visual_state, npc.mood_state, npc.initial_state, npc.activity_status, s.faction_id, s.sub_title, s.merchant_id, s.merchant_type, s.size_offset, npc.attack_type, npc.ai_strategy+0, npc.spell_list_id, npc.secondary_spell_list_id, npc.skill_list_id, npc.secondary_skill_list_id, npc.equipment_list_id, npc.str, npc.sta, npc.wis, npc.intel, npc.agi, npc.heat, npc.cold, npc.magic, npc.mental, npc.divine, npc.disease, npc.poison, npc.aggro_radius, npc.cast_percentage, npc.randomize, npc.soga_model_type, npc.heroic_flag, npc.alignment, npc.elemental, npc.arcane, npc.noxious, s.savagery, s.dissonance, npc.hide_hood, npc.emote_state, s.prefix, s.suffix, s.lua_race_id, s.last_name
FROM spawn s
INNER JOIN spawn_npcs npc
ON npc.spawn_id = s.id
WHERE s.id = 4700096

17:56:09 E LUA       : LUA Spawn command error: Could not find spawn with id of 4700096.
17:56:13 E Database  : Error 1054 running MySQL query: Unknown column 's.lua_race_id' in 'field list'
SELECT npc.spawn_id, s.name, npc.min_level, npc.max_level, npc.enc_level, s.race, s.model_type, npc.class_, npc.gender, s.command_primary, s.command_secondary, s.show_name, npc.min_group_size, npc.max_group_size, npc.hair_type_id, npc.facial_hair_type_id, npc.wing_type_id, npc.chest_type_id, npc.legs_type_id, npc.soga_hair_type_id, npc.soga_facial_hair_type_id, s.attackable, s.show_level, s.targetable, s.show_command_icon, s.display_hand_icon, s.hp, s.power, s.size, s.collision_radius, npc.action_state, s.visual_state, npc.mood_state, npc.initial_state, npc.activity_status, s.faction_id, s.sub_title, s.merchant_id, s.merchant_type, s.size_offset, npc.attack_type, npc.ai_strategy+0, npc.spell_list_id, npc.secondary_spell_list_id, npc.skill_list_id, npc.secondary_skill_list_id, npc.equipment_list_id, npc.str, npc.sta, npc.wis, npc.intel, npc.agi, npc.heat, npc.cold, npc.magic, npc.mental, npc.divine, npc.disease, npc.poison, npc.aggro_radius, npc.cast_percentage, npc.randomize, npc.soga_model_type, npc.heroic_flag, npc.alignment, npc.elemental, npc.arcane, npc.noxious, s.savagery, s.dissonance, npc.hide_hood, npc.emote_state, s.prefix, s.suffix, s.lua_race_id, s.last_name
FROM spawn s
INNER JOIN spawn_npcs npc
ON npc.spawn_id = s.id
WHERE s.id = 4700096

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest