www.pudn.com > wow.rar > Character.h
// Copyright (C) 2004 Team Python
//
// This program 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 2 of the License, or
// (at your option) any later version.
//
// This program 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.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef WOWPYTHONSERVER_CHARACTER_H
#define WOWPYTHONSERVER_CHARACTER_H
#include "Unit.h"
//====================================================================
// Inventory
// Holds the display id and item type id for objects in
// a character's inventory
//====================================================================
enum Classes
{
WARRIOR=1,
PALADIN=2,
HUNTER=3,
ROGUE=4,
PRIEST=5,
SHAMAN=7,
MAGE=8,
WARLOCK=9,
DRUID=11,
};
struct ItemMember{
uint32 guid;
uint32 itemid;
};
struct Inventory{
uint32 displayId;
uint8 itemType;
};
struct quest_status{
quest_status(){
memset(m_questItemCount, 0, 16);
memset(m_questMobCount, 0, 16);
}
uint32 quest_id;
uint32 status;
uint32 m_questItemCount[4]; // number of items collected
uint32 m_questMobCount[4]; // number of monsters slain
};
struct spells{
uint16 spellId;
uint16 slotId;
};
//START OF LINA ACTION BAR
struct actions{
uint8 button;
uint8 type;
uint8 misc;
uint16 action;
};
//END OF LINA ACTION BAR
class Quest;
//====================================================================
// Character
// Class that holds every created character on the server.
//
// TODO: Attach characters to user accounts
//====================================================================
class Character : public Unit
{
friend class WorldServer;
friend class DatabaseInterface;
friend class GameClient;
friend class MiscHandler;
public:
Character ( );
~Character ( );
bool isPlayer() { return true; };
//void Create ( uint8 * data, uint16 length );
void Create ( uint32 guidlow, struct wowWData &data );
void Update( uint32 time );
void BuildEnumData( uint8 * data, uint8 * length );
void BuildUpdateBlock(UpdateMask *updateMask, uint8 * data, int* length) ;
// fill UpdateValues with data from a space seperated string of uint32s
virtual void LoadUpdateValues(uint8* data);
uint8 ToggleAFK() { m_afk = !m_afk; return m_afk; };
char* getName() { return (char*)m_name; };
char* getGuildName() { return (char*)m_guildname; };
void Die();
void KilledMonster(uint32 entry, uint32 guid);
void giveXP(uint32 xp_to_give, uint32 guidlow=0, uint32 guidhi=0);
uint32 Regen(uint32 curValue, uint32 maxValue, uint16 regenField, uint32* lastRegen);
// Quests
uint32 getQuestStatus(uint32 quest_id);
uint32 addNewQuest(uint32 quest_id, uint32 status=4);
void loadExistingQuest(struct quest_status qs);
void setQuestStatus(uint32 quest_id, uint32 new_status);
bool checkQuestStatus(uint32 quest_id);
uint16 getOpenQuestSlot();
uint16 getQuestSlot(uint32 quest_id);
// sets the needed bits for any quests in the player's log
void setQuestLogBits(UpdateMask *updateMask);
std::map getQuestStatusMap() { return mQuestStatus; };
inline const uint32* getSelectionPtr( ) { return m_curSelection; }
inline const uint32 & getSelection( ) { return m_curSelection[0]; }
inline const uint32 & getTarget( ) { return m_curTarget[0]; }
// Spells
void smsg_InitialSpells();
void addSpell(uint16 spell_id, uint16 slot_id=0xffff);
inline std::list getSpellList() { return m_spells; };
// groups
void SetInvited() { isinvited = 1; }
void SetLeader(char * name) { strcpy(groupleader , name); }
void SetInGroup() { isingroup = 1; }
int IsInGroup() { return isingroup == 1 ? 1 : 0; }
int IsInvited() { return isinvited == 1 ? 1 : 0; }
char * GetGroupLeader() { return groupleader; }
void UnSetInvited() { isinvited = 0; }
void UnSetInGroup() { isingroup = 0; }
void SwapItemInSlot(int srcslot, int destslot);
uint32 getItemIdBySlot(int slot) { return m_items[slot].itemid; }
uint32 getGuidBySlot(int slot) { return m_items[slot].guid; }
void AddItemToSlot(int slot, uint32 tempitemguid, uint32 tempitemid) {
m_items[slot].itemid = tempitemid;
m_items[slot].guid = tempitemguid;
}
uint32 getLootGUID() { return m_lootGuid[0]; };
uint32 getLootGUIDHigh() { return m_lootGuid[1]; };
void setLootGUID(uint32 guid1, uint32 guid2)
{
m_lootGuid[0] = guid1;
m_lootGuid[1] = guid2;
}
void updateItemStats();
inline void setNewPosition(float x, float y, float z)
{
m_newPos[0] = x;
m_newPos[1] = y;
m_newPos[2] = z;
}
inline void SetPosToNewPos()
{
setPosition(m_newPos[0], m_newPos[1], m_newPos[2], m_orientation, true);
}
GameClient *pClient; // pointer to this char's game client
///////////////////////////////Heal lasts some time - changed by nothin //////////////
uint32 m_healingDuration;
uint32 m_healingTimer;
uint32 m_replenish_field;
uint32 m_replenish_value;
uint32 m_spell;
//////////////////////////////////////////////////////////////////////////////////////
//START OF LINA ACTION BAR
inline std::list getActionList() { return m_actions; };
void addAction(uint8 button, uint16 action, uint8 type, uint8 misc);
void smsg_InitialActions();
//END OF LINA ACTION BAR
bool isAllreadyLearned(uint16 spell_id); //LINA
void giveStat(); //update stat each level up
uint32 lastSavedTime() { return m_lastSavedTime; };
void setLastSavedTime(uint32 s_time) { m_lastSavedTime = s_time; };
protected:
int m_accountId;
float m_newPos[3]; // temp vars to hold a new position (ie, to tell me where to worldport)
uint32 m_lootGuid[2];
char m_name[22]; // max 21 character name
uint8 m_outfitId;
uint16 m_guildId;
char m_guildname[22];
uint16 m_petInfoId; // pet display info id
uint16 m_petLevel; // pet experience level
uint16 m_petFamilyId; // pet creature family id
uint32 m_regenTimer;
// Inventory
// Foole's packet pages say to loop this 20 times, only 20 inv slots maybe?
Inventory m_inventory[20];
ItemMember m_items[39];
// AFK status
uint8 m_afk;
// guid of current target
uint32 m_curTarget[2];
// guid of current selection
uint32 m_curSelection[2];
// current quest statuses
typedef std::map StatusMap;
StatusMap mQuestStatus;
// some group shit
// might not be used
char groupleader[22];
int isingroup;
int isinvited;
// Timers
uint32 m_lastHpRegen;
uint32 m_lastManaRegen;
uint32 m_timeToSave;
uint32 m_lastSavedTime;
// Player Spells
std::list m_spells;
std::list m_actions; //LINA ACTION BAR
uint8 m_stat0, m_stat1, m_stat2, m_stat3, m_stat4;
uint8 stat0, stat1, stat2, stat3, stat4;
uint32 m_health;
uint32 m_mana;
};
#endif