Warhammer Online Emulator + Src

no problem :) thanks anyway :)


EDIT: No need for 1.3.1 currently, as my own PrivateServer Project is terminated :) I will concentrate on helping the community now... still looking for f_dump_statics
 
Last edited:
As I also wrote in a PM in the Wrath of Reckoning Forum, I would be honored to help :) I am not a c++ coder but able to learn into problems and have experience with the management of WoW and Aion Emus :)

I would be really glad to join the WOR team and help wherever I am able to :)

---------- Post added at 09:30 AM ---------- Previous post was at 09:24 AM ----------

Leo...how did you get the offset of the zones that are alredy fixed? (F_DUMP_Statics just seems to be a client_com that goes with a certain on_dump_statics, that kind of "changes" the offsets" - but I have no clue how to reach that via client

Code:
typedef void (ClientCom::*ClientHandler)();
static ClientHandler Handlers[0xFF+1] = {

....

&ClientCom::onDumpStatics , // "F_DUMP_STATICS"

Code:
void ClientCom::onDumpStatics() // Changing Offset
{
    uint32 unk1;
    uint16 unk2, unk3, offsetX, offsetY;
    m_readBuffer >> unk1 >> unk2 >> offsetX >> unk3 >> offsetY;

	if(m_Plr && ( m_Plr->GetOffX() != offsetX || m_Plr->GetOffY() != offsetY) )
		m_Plr->onPlayerMovementOffset(offsetX,offsetY);

}

Code:
void Player::onPlayerMovementOffset(uint16 offsetX,uint16 offsetY)
{
	if(offsetX > 998)
		offsetX = 998;
	if(offsetY > 998)
		offsetY = 998;

	m_OffSetX = offsetX;
	m_OffSetY = offsetY;

    m_zone_x = m_OffSetX << 12;
    m_zone_y = m_OffSetY << 12;

	ConvertWorldPos();


)...if it's just work of trying out, I can do that with some areas if you want :)


EDIT: hmmm, mayby we can get any log of that clientcom, then we propably would just have to take the two offset variables

UPDATE: At least I found the reason, why there WAS the cloth bug fixed but it isn't anymore... will still be difficult to integrate that into the current src, but at least an approach

---------- Post added at 11:02 AM ---------- Previous post was at 10:23 AM ----------

difficult, or even undoable. In the older revisions, there were still "eqipped_" slots in the character database and they were directly accessed by the server, now the howle process is a lot more complicate and at the moment I have no clue how to integrate these slots in this complicate process....
 
Last edited:
I didn't get that far, as I am no real coder :( I just noticed, that - in the old emus where the bug didn't exist - the equipment directly was read and written in/from the player database. In the old src, it is really easy to find the lines, where the server reads or writes them. Those squerys don't exist anymore, the howle code is much mure complicate at this point and I can't really follow the process of the player eq

---------- Post added at 02:05 PM ---------- Previous post was at 02:04 PM ----------

Are you sure, that the problem is only located in player.h ? That would make it more easy
 
As I wrote, I was not able to answer your PM, but if you want, you can write me a PM with your msn contact and I will contact you there :)
 
i notice theres 182 errors for quests so ill be fixing theses today :)
 
This code need to be converted from old emu to new

First is for Players Delete Item ->
Code:
void Item::Delete()
{
	Query* q = StatusDatabase::createQuery();
	std::stringstream ssSQL;
	ssSQL << "DELETE FROM player_items WHERE guid=";
	ssSQL << GetGuid() << ")";
    q->setQueryText(ssSQL.str());
    StatusDatabase::executeSynchronousQuery(q);
	delete q;
	delete this;
}

From here begin clothes to show for other players -> ->

player.cpp (need to be convert .. alot errors )

	bool del=false;
    for (int i=0; i<DorConstants::NumberOfEquipSlots; i++)
	{
        equippedItems[i]=q->getUint32();
		if( equippedItems[i] )
		{
			ItemProto * item = sStorage->GetItemByEntry( equippedItems[i] );
			if( Convert[i] && item)
			{
				stringstream zz;
				zz << "INSERT INTO `player_items` (guid,playerid,entry,slot_id,counts) VALUES(";
				zz << sStorage->GenerateGuid( TYPEID_ITEM ) << ",";
				zz << GetPlayerID() << ",";
				zz << item->entry << ",";
				zz << Convert[i] << ",";
				zz << "1" << ")";

				Query* d = StatusDatabase::createQuery();
				d->setQueryText(zz.str());
				StatusDatabase::executeSynchronousQuery(d);
			}
			del=true;
			equippedItems[i]=0;
		}
	}
    delete q;

	if(del)
	{
		Query* c = StatusDatabase::createQuery();
		stringstream zz;
		zz << "UPDATE `character` SET equipped_1=0,equipped_2=0,equipped_3=0,equipped_4=0,equipped_5=0,equipped_6=0,equipped_7=0,equipped_8=0,equipped_9=0,equipped_10=0,equipped_11=0,equipped_12=0,equipped_13=0,equipped_14=0,equipped_15=0,equipped_16=0,equipped_17=0,equipped_18=0,equipped_19=0,equipped_20=0 WHERE character_id="<<m_playerID;
		c->setQueryText(zz.str());
		StatusDatabase::executeSynchronousQuery(c);
	}
	m_ItemInterface = new ItemInterface(this);
	m_ItemInterface->Load();

player.h - added 

-> 	ItemInterface * m_ItemInterface;       // this is in enw emu
	std::map<uint16,Player*> m_inrange;  // neet to be added - no give errors when build client


WorldStatsDatabase.cpp ->

std::vector<CharacterInfo*>* StatusDatabase::loginCharList(uint32 accountID)
{
    Query* q = GLOBAL_STATUS_DB->createQuery();

    std::stringstream ssSQL;
    ssSQL << "SELECT character_id, name, model, zone, equipped_1, level, career, realm, heldleft, race, last_time_played FROM `character` WHERE account_id=" << accountID;
	q->setQueryText(ssSQL.str());

    GLOBAL_STATUS_DB->executeSynchronousQuery(q); ///- this query can be executed synchronously as time isn't critical
	// q->fetchRow();

    std::vector<CharacterInfo*>* v = new std::vector<CharacterInfo*>();
    while (q->fetchRow())
    {
		
        CharacterInfo* ci = new CharacterInfo;
        ci->ID = q->getUint32();

        std::ostringstream oss;

        oss << "<SummaryData version=\"9\" blockTypeId=\"1\">";
        oss << "<Name>";
        oss << q->getString();
        oss << "</Name>";
        oss << "<Imagenum>";
        oss << q->getUint32();
        oss << "</Imagenum>";
        oss << "<Region>";
        oss << q->getUint32();
        oss << "</Region>";
        oss << "<WornList capacity=\"1\">"; //: note voluntarily cut. Goes to 15 on commercial server
        oss << "<Worn index=\"1\">" << q->getUint32() << "</Worn>";
        oss << "</WornList>";
        oss << "<ReadiedList capacity=\"5\">";
        oss << "<Readied index=\"0\">1916</Readied>"; //we still need to figure out what is readied.
        oss << "</ReadiedList>";
        oss << "<Level>";
        oss << q->getUint32();
        oss << "</Level>";
        oss << "<CharClass>";
        oss << q->getUint32();
        oss << "</CharClass>";
        oss << "<Realm>";
        oss << q->getUint32();
        oss << "</Realm>";
        oss << "<HeldLeft>";
        oss << q->getUint32();
        oss << "</HeldLeft>";
        oss << "<Race>";
        oss << q->getUint32();
        oss << "</Race>";
        oss << "<FeatureHigh>2147483648</FeatureHigh>"; //??
        oss << "<FeatureLow>1495468152</FeatureLow>";
        oss << "<RevisionId>97769940</RevisionId>";
        oss << "</SummaryData>";

        ci->xmlDesc.assign(oss.str()); 
        ci->lastTimePlayed = q->getUint32();

        v->push_back(ci);
    }


    delete q;
    return v;
}

ADDED NEW Charcaters SQL :
 
Last edited:
i didnt mean to be a staff member but if you wanna help the community of our server then please its your choice you look very helpful tho i might put you as a moderator for the forum =] i really like your english vocab let me gues your stompaorkz from wrath?
 
Back