int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tick, int sdelay, int ddelay, int64 sdamage, int div, int type, int64 sdamage2); // area
void clif_skill_warppoint(struct map_session_data* sd, uint16 skill_id, uint16 skill_lv, unsigned short map1, unsigned short map2, unsigned short map3, unsigned short map4);
void clif_skill_memomessage(struct map_session_data* sd, int type);
void clif_skill_teleportmessage(struct map_session_data *sd, int type);
void clif_skill_produce_mix_list(struct map_session_data *sd, int skill_id, int trigger);
void clif_cooking_list(struct map_session_data *sd, int trigger, uint16 skill_id, int qty, int list_type);
void clif_broadcast(struct block_list* bl, const char* mes, int len, int type, enum send_target target);
void clif_broadcast2(struct block_list* bl, const char* mes, int len, unsigned long fontColor, short fontType, short fontSize, short fontAlign, short fontY, enum send_target target);
#define MAX_MAP_PER_SERVER 1500 /// Increased to allow creation of Instance Maps
#define MAX_INVENTORY 100 ///Maximum items in player inventory
/** Max number of characters per account. Note that changing this setting alone is not enough if the client is not hexed to support more characters as well.
* Max value tested was 265 */
#define MAX_CHARS 9
/** Number of slots carded equipment can have. Never set to less than 4 as they are also used to keep the data of forged items/equipment. [skotlex]
* Note: The client seems unable to receive data for more than 4 slots due to all related packets having a fixed size. */
#define MAX_SLOTS 4
#define MAX_AMOUNT 30000 ////Max amount of a single stacked item
#define MAX_ZENY 2000000000 ///Max zeny
#define MAX_BANK_ZENY SINT32_MAX ///Max zeny in Bank
#define MAX_FAME 1000000000 ///Max fame points
#define MAX_CART 100 ///Maximum item in cart
#define MAX_SKILL 5020 ///Maximum skill data
#define GLOBAL_REG_NUM 256 ///Max permanent character variables per char
#define ACCOUNT_REG_NUM 64 ///Max permanent local account variables per account
#define ACCOUNT_REG2_NUM 16 ///Max permanent global account variables per account
#define MAX_REG_NUM 256 ///Should hold the max of GLOBAL/ACCOUNT/ACCOUNT2 (needed for some arrays that hold all three)
#define DEFAULT_WALK_SPEED 150 ///Default walk speed
#define MIN_WALK_SPEED 0 ///Min walk speed
#define MAX_WALK_SPEED 1000 ///Max walk speed
#define MAX_STORAGE 600 ///Max number of storage slots a player can have, (up to ~850 tested)
#define MAX_GUILD_STORAGE 600 ///Max number of storage slots a guild
#define MAX_PARTY 12 ///Max party member
#define MAX_GUILD 16+10*6 ///Increased max guild members +6 per 1 extension levels [Lupus]
#define MAX_GUILDPOSITION 20 ///Increased max guild positions to accomodate for all members [Valaris] (removed) [PoW]
Question
anakawai
hay friend
i am have problem REJECTED SERVERS , I 've followed the problems that finished in the forum but no one is any effect at all .
does anyone willing to help me solve my problem ?
packet_db
//packet_db_ver: 45
packet_db_ver: default
clif.h
// Copyright © Athena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder
#ifndef _CLIF_H_
#define _CLIF_H_
#include "../common/cbasetypes.h"
#include "../common/db.h" //dbmap
//#include "../common/mmo.h"
struct Channel;
struct item;
struct storage_data;
struct guild_storage;
//#include "map.h"
struct block_list;
struct unit_data;
struct map_session_data;
struct homun_data;
struct pet_data;
struct mob_data;
struct npc_data;
struct chat_data;
struct flooritem_data;
struct skill_unit;
struct s_vending;
struct party;
struct party_data;
struct guild;
struct battleground_data;
struct quest;
struct party_booking_ad_info;
#include <stdarg.h>
enum
{// packet DB
MAX_PACKET_DB = 0xf00,
MAX_PACKET_VER = 30,
MAX_PACKET_POS = 20,
};
enum e_packet_ack {
ZC_ACK_OPEN_BANKING = 0,
ZC_ACK_BANKING_DEPOSIT,
ZC_ACK_BANKING_WITHDRAW,
ZC_BANKING_CHECK,
ZC_PERSONAL_INFOMATION,
ZC_PERSONAL_INFOMATION_CHN,
ZC_CLEAR_DIALOG,
//add otehr here
MAX_ACK_FUNC //auto upd len
};
struct s_packet_db {
short len;
void (*func)(int, struct map_session_data *);
short pos[MAX_PACKET_POS];
};
enum e_BANKING_DEPOSIT_ACK {
BDA_SUCCESS = 0x0,
BDA_ERROR = 0x1,
BDA_NO_MONEY = 0x2,
BDA_OVERFLOW = 0x3,
};
enum e_BANKING_WITHDRAW_ACK {
BWA_SUCCESS = 0x0,
BWA_NO_MONEY = 0x1,
BWA_UNKNOWN_ERROR = 0x2,
};
// packet_db[sERVER] is reserved for server use
#define SERVER 0
#define packet_len(cmd) packet_db[sERVER][cmd].len
extern struct s_packet_db packet_db[MAX_PACKET_VER+1][MAX_PACKET_DB+1];
extern int packet_db_ack[MAX_PACKET_VER + 1][MAX_ACK_FUNC + 1];
// local define
typedef enum send_target {
ALL_CLIENT,
ALL_SAMEMAP,
AREA, // area
AREA_WOS, // area, without self
AREA_WOC, // area, without chatrooms
AREA_WOSC, // area, without own chatroom
AREA_CHAT_WOC, // hearable area, without chatrooms
CHAT, // current chatroom
CHAT_WOS, // current chatroom, without self
PARTY,
PARTY_WOS,
PARTY_SAMEMAP,
PARTY_SAMEMAP_WOS,
PARTY_AREA,
PARTY_AREA_WOS,
GUILD,
GUILD_WOS,
GUILD_SAMEMAP,
GUILD_SAMEMAP_WOS,
GUILD_AREA,
GUILD_AREA_WOS,
GUILD_NOBG,
DUEL,
DUEL_WOS,
SELF,
BG, // BattleGround System
BG_WOS,
BG_SAMEMAP,
BG_SAMEMAP_WOS,
BG_AREA,
BG_AREA_WOS,
} send_target;
typedef enum emotion_type {
E_GASP = 0, //
E_WHAT, //
E_HO,
E_LV,
E_SWT,
E_IC,
E_AN,
E_AG,
E_CASH, //
E_DOTS, //
E_SCISSORS, //
--- 10
E_ROCK, //
E_PAPER, //
E_KOREA,
E_LV2,
E_THX,
E_WAH,
E_SRY,
E_HEH,
E_SWT2,
E_HMM, // --- 20
E_NO1,
E_NO, //
E_OMG,
E_OH,
E_X,
E_HLP,
E_GO,
E_SOB,
E_GG,
E_KIS, // --- 30
E_KIS2,
E_PIF,
E_OK,
E_MUTE, // red
used for muted characters
E_INDONESIA,
E_BZZ, //
, /stare
E_RICE,
E_AWSM, //
, /cool
E_MEH,
E_SHY, // --- 40
E_PAT, //
, /goodboy
E_MP, // /mp, /sptime
E_SLUR,
E_COM, //
, /comeon
E_YAWN, //
, /sleepy
E_GRAT, // /grat, /congrats
E_HP, // /hp, /hptime
E_PHILIPPINES,
E_MALAYSIA,
E_SINGAPORE, // --- 50
E_BRAZIL,
E_FLASH, // /fsh
E_SPIN, // /spin
E_SIGH,
E_DUM, // /dum
E_LOUD, // /crwd
E_OTL, // /otl, /desp
E_DICE1,
E_DICE2,
E_DICE3, // --- 60
E_DICE4,
E_DICE5,
E_DICE6,
E_INDIA,
E_LUV, // /love
E_RUSSIA,
E_VIRGIN,
E_MOBILE,
E_MAIL,
E_CHINESE, // --- 70
E_ANTENNA1,
E_ANTENNA2,
E_ANTENNA3,
E_HUM,
E_ABS,
E_OOPS,
E_SPIT,
E_ENE,
E_PANIC,
E_WHISP, // --- 80
E_YUT1,
E_YUT2,
E_YUT3,
E_YUT4,
E_YUT5,
E_YUT6,
E_YUT7,
//
E_MAX
} emotion_type;
typedef enum clr_type
{
CLR_OUTSIGHT = 0,
CLR_DEAD,
CLR_RESPAWN,
CLR_TELEPORT,
CLR_TRICKDEAD,
} clr_type;
enum map_property
{// clif_map_property
MAPPROPERTY_NOTHING = 0,
MAPPROPERTY_FREEPVPZONE = 1,
MAPPROPERTY_EVENTPVPZONE = 2,
MAPPROPERTY_AGITZONE = 3,
MAPPROPERTY_PKSERVERZONE = 4, // message "You are in a PK area. Please beware of sudden attacks." in color 0x9B9BFF (light red)
MAPPROPERTY_PVPSERVERZONE = 5,
MAPPROPERTY_DENYSKILLZONE = 6,
};
enum map_type
{// clif_map_type
MAPTYPE_VILLAGE = 0,
MAPTYPE_VILLAGE_IN = 1,
MAPTYPE_FIELD = 2,
MAPTYPE_DUNGEON = 3,
MAPTYPE_ARENA = 4,
MAPTYPE_PENALTY_FREEPKZONE = 5,
MAPTYPE_NOPENALTY_FREEPKZONE = 6,
MAPTYPE_EVENT_GUILDWAR = 7,
MAPTYPE_AGIT = 8,
MAPTYPE_DUNGEON2 = 9,
MAPTYPE_DUNGEON3 = 10,
MAPTYPE_PKSERVER = 11,
MAPTYPE_PVPSERVER = 12,
MAPTYPE_DENYSKILL = 13,
MAPTYPE_TURBOTRACK = 14,
MAPTYPE_JAIL = 15,
MAPTYPE_MONSTERTRACK = 16,
MAPTYPE_PORINGBATTLE = 17,
MAPTYPE_AGIT_SIEGEV15 = 18,
MAPTYPE_BATTLEFIELD = 19,
MAPTYPE_PVP_TOURNAMENT = 20,
//Map types 21 - 24 not used.
MAPTYPE_SIEGE_LOWLEVEL = 25,
//Map types 26 - 28 remains opens for future types.
MAPTYPE_UNUSED = 29,
};
enum useskill_fail_cause
{// clif_skill_fail
USESKILL_FAIL_LEVEL = 0,
USESKILL_FAIL_SP_INSUFFICIENT = 1,
USESKILL_FAIL_HP_INSUFFICIENT = 2,
USESKILL_FAIL_STUFF_INSUFFICIENT = 3,
USESKILL_FAIL_SKILLINTERVAL = 4,
USESKILL_FAIL_MONEY = 5,
USESKILL_FAIL_THIS_WEAPON = 6,
USESKILL_FAIL_REDJAMSTONE = 7,
USESKILL_FAIL_BLUEJAMSTONE = 8,
USESKILL_FAIL_WEIGHTOVER = 9,
USESKILL_FAIL = 10,
USESKILL_FAIL_TOTARGET = 11,
USESKILL_FAIL_ANCILLA_NUMOVER = 12,
USESKILL_FAIL_HOLYWATER = 13,
USESKILL_FAIL_ANCILLA = 14,
USESKILL_FAIL_DUPLICATE_RANGEIN = 15,
USESKILL_FAIL_NEED_OTHER_SKILL = 16,
USESKILL_FAIL_NEED_HELPER = 17,
USESKILL_FAIL_INVALID_DIR = 18,
USESKILL_FAIL_SUMMON = 19,
USESKILL_FAIL_SUMMON_NONE = 20,
USESKILL_FAIL_IMITATION_SKILL_NONE = 21,
USESKILL_FAIL_DUPLICATE = 22,
USESKILL_FAIL_CONDITION = 23,
USESKILL_FAIL_PAINTBRUSH = 24,
USESKILL_FAIL_DRAGON = 25,
USESKILL_FAIL_POS = 26,
USESKILL_FAIL_HELPER_SP_INSUFFICIENT = 27,
USESKILL_FAIL_NEER_WALL = 28,
USESKILL_FAIL_NEED_EXP_1PERCENT = 29,
USESKILL_FAIL_CHORUS_SP_INSUFFICIENT = 30,
USESKILL_FAIL_GC_WEAPONBLOCKING = 31,
USESKILL_FAIL_GC_POISONINGWEAPON = 32,
USESKILL_FAIL_MADOGEAR = 33,
USESKILL_FAIL_NEED_EQUIPMENT_KUNAI = 34,
USESKILL_FAIL_TOTARGET_PLAYER = 35,
USESKILL_FAIL_SIZE = 36,
USESKILL_FAIL_CANONBALL = 37,
//XXX_USESKILL_FAIL_II_MADOGEAR_ACCELERATION = 38,
//XXX_USESKILL_FAIL_II_MADOGEAR_HOVERING_BOOSTER = 39,
USESKILL_FAIL_MADOGEAR_HOVERING = 40,
//XXX_USESKILL_FAIL_II_MADOGEAR_SELFDESTRUCTION_DEVICE = 41,
//XXX_USESKILL_FAIL_II_MADOGEAR_SHAPESHIFTER = 42,
USESKILL_FAIL_GUILLONTINE_POISON = 43,
//XXX_USESKILL_FAIL_II_MADOGEAR_COOLING_DEVICE = 44,
//XXX_USESKILL_FAIL_II_MADOGEAR_MAGNETICFIELD_GENERATOR = 45,
//XXX_USESKILL_FAIL_II_MADOGEAR_BARRIER_GENERATOR = 46,
//XXX_USESKILL_FAIL_II_MADOGEAR_OPTICALCAMOUFLAGE_GENERATOR = 47,
//XXX_USESKILL_FAIL_II_MADOGEAR_REPAIRKIT = 48,
//XXX_USESKILL_FAIL_II_MONKEY_SPANNER = 49,
USESKILL_FAIL_MADOGEAR_RIDE = 50,
USESKILL_FAIL_SPELLBOOK = 51,
USESKILL_FAIL_SPELLBOOK_DIFFICULT_SLEEP = 52,
USESKILL_FAIL_SPELLBOOK_PRESERVATION_POINT = 53,
USESKILL_FAIL_SPELLBOOK_READING = 54,
//XXX_USESKILL_FAIL_II_FACE_PAINTS = 55,
//XXX_USESKILL_FAIL_II_MAKEUP_BRUSH = 56,
USESKILL_FAIL_CART = 57,
//XXX_USESKILL_FAIL_II_THORNS_SEED = 58,
//XXX_USESKILL_FAIL_II_BLOOD_SUCKER_SEED = 59,
USESKILL_FAIL_NO_MORE_SPELL = 60,
//XXX_USESKILL_FAIL_II_BOMB_MUSHROOM_SPORE = 61,
//XXX_USESKILL_FAIL_II_GASOLINE_BOOMB = 62,
//XXX_USESKILL_FAIL_II_OIL_BOTTLE = 63,
//XXX_USESKILL_FAIL_II_EXPLOSION_POWDER = 64,
//XXX_USESKILL_FAIL_II_SMOKE_POWDER = 65,
//XXX_USESKILL_FAIL_II_TEAR_GAS = 66,
//XXX_USESKILL_FAIL_II_HYDROCHLORIC_ACID_BOTTLE = 67,
//XXX_USESKILL_FAIL_II_HELLS_PLANT_BOTTLE = 68,
//XXX_USESKILL_FAIL_II_MANDRAGORA_FLOWERPOT = 69,
USESKILL_FAIL_MANUAL_NOTIFY = 70,
USESKILL_FAIL_NEED_ITEM = 71,
USESKILL_FAIL_NEED_EQUIPMENT = 72,
USESKILL_FAIL_COMBOSKILL = 73,
USESKILL_FAIL_SPIRITS = 74,
USESKILL_FAIL_EXPLOSIONSPIRITS = 75,
USESKILL_FAIL_HP_TOOMANY = 76,
USESKILL_FAIL_NEED_ROYAL_GUARD_BANDING = 77,
USESKILL_FAIL_NEED_EQUIPPED_WEAPON_CLASS = 78,
USESKILL_FAIL_EL_SUMMON = 79,
USESKILL_FAIL_RELATIONGRADE = 80,
USESKILL_FAIL_STYLE_CHANGE_FIGHTER = 81,
USESKILL_FAIL_STYLE_CHANGE_GRAPPLER = 82,
USESKILL_FAIL_THERE_ARE_NPC_AROUND = 83,
USESKILL_FAIL_NEED_MORE_BULLET = 84,
};
enum clif_messages {
MERC_MSG_BASE = 1266, //0x4f2
SKILL_CANT_USE_AREA = 0x536,
VIEW_EQUIP_FAIL = 0x54d,
USAGE_FAIL = 0x783,
ADDITEM_TO_CART_FAIL_WEIGHT = 0x0,
ADDITEM_TO_CART_FAIL_COUNT = 0x1,
};
enum e_personalinfo {
PINFO_BASIC = 0,
PINFO_PREMIUM,
PINFO_SERVER,
PINFO_CAFE,
PINFO_MAX,
};
int clif_setip(const char* ip);
void clif_setbindip(const char* ip);
void clif_setport(uint16 port);
uint32 clif_getip(void);
uint32 clif_refresh_ip(void);
uint16 clif_getport(void);
void packetdb_readdb(void);
void clif_authok(struct map_session_data *sd);
void clif_authrefuse(int fd, uint8 error_code);
void clif_authfail_fd(int fd, int type);
void clif_charselectok(int id, uint8 ok);
void clif_dropflooritem(struct flooritem_data* fitem);
void clif_clearflooritem(struct flooritem_data *fitem, int fd);
void clif_clearunit_single(int id, clr_type type, int fd);
void clif_clearunit_area(struct block_list* bl, clr_type type);
void clif_clearunit_delayed(struct block_list* bl, clr_type type, unsigned int tick);
int clif_spawn(struct block_list *bl); //area
void clif_walkok(struct map_session_data *sd); // self
void clif_move(struct unit_data *ud); //area
void clif_changemap(struct map_session_data *sd, short m, int x, int y); //self
void clif_changemapserver(struct map_session_data* sd, unsigned short map_index, int x, int y, uint32 ip, uint16 port); //self
void clif_blown(struct block_list *bl); // area
void clif_slide(struct block_list *bl, int x, int y); // area
void clif_fixpos(struct block_list *bl); // area
void clif_npcbuysell(struct map_session_data* sd, int id); //self
void clif_buylist(struct map_session_data *sd, struct npc_data *nd); //self
void clif_selllist(struct map_session_data *sd); //self
void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes); //self
void clif_scriptnext(struct map_session_data *sd,int npcid); //self
void clif_scriptclose(struct map_session_data *sd, int npcid); //self
void clif_scriptclear(struct map_session_data *sd, int npcid); //self
void clif_scriptmenu(struct map_session_data* sd, int npcid, const char* mes); //self
void clif_scriptinput(struct map_session_data *sd, int npcid); //self
void clif_scriptinputstr(struct map_session_data *sd, int npcid); // self
void clif_cutin(struct map_session_data* sd, const char* image, int type); //self
void clif_viewpoint(struct map_session_data *sd, int npc_id, int type, int x, int y, int id, int color); //self
void clif_additem(struct map_session_data *sd, int n, int amount, int fail); // self
void clif_dropitem(struct map_session_data *sd,int n,int amount); //self
void clif_delitem(struct map_session_data *sd,int n,int amount, short reason); //self
void clif_updatestatus(struct map_session_data *sd,int type); //self
void clif_changestatus(struct map_session_data* sd,int type,int val); //area
int clif_damage(struct block_list* src, struct block_list* dst, unsigned int tick, int sdelay, int ddelay, int64 sdamage, int div, int type, int64 sdamage2); // area
void clif_takeitem(struct block_list* src, struct block_list* dst);
void clif_sitting(struct block_list* bl);
void clif_standing(struct block_list* bl);
void clif_changelook(struct block_list *bl,int type,int val); // area
void clif_changetraplook(struct block_list *bl,int val); // area
void clif_refreshlook(struct block_list *bl,int id,int type,int val,enum send_target target); //area specified in 'target'
void clif_arrowequip(struct map_session_data *sd,int val); //self
void clif_arrow_fail(struct map_session_data *sd,int type); //self
void clif_arrow_create_list(struct map_session_data *sd); //self
void clif_statusupack(struct map_session_data *sd,int type,int ok,int val); // self
void clif_equipitemack(struct map_session_data *sd,int n,int pos,int ok); // self
void clif_unequipitemack(struct map_session_data *sd,int n,int pos,int ok); // self
void clif_misceffect(struct block_list* bl,int type); // area
void clif_changeoption(struct block_list* bl); // area
void clif_changeoption2(struct block_list* bl); // area
void clif_useitemack(struct map_session_data *sd,int index,int amount,bool ok); // self
void clif_GlobalMessage(struct block_list* bl, const char* message,enum send_target target);
void clif_createchat(struct map_session_data* sd, int flag); // self
void clif_dispchat(struct chat_data* cd, int fd); // area or fd
void clif_joinchatfail(struct map_session_data *sd,int flag); // self
void clif_joinchatok(struct map_session_data *sd,struct chat_data* cd); // self
void clif_addchat(struct chat_data* cd,struct map_session_data *sd); // chat
void clif_changechatowner(struct chat_data* cd, struct map_session_data* sd); // chat
void clif_clearchat(struct chat_data *cd,int fd); // area or fd
void clif_leavechat(struct chat_data* cd, struct map_session_data* sd, bool flag); // chat
void clif_changechatstatus(struct chat_data* cd); // chat
void clif_refresh(struct map_session_data *sd); // self
void clif_fame_blacksmith(struct map_session_data *sd, int points);
void clif_fame_alchemist(struct map_session_data *sd, int points);
void clif_fame_taekwon(struct map_session_data *sd, int points);
void clif_emotion(struct block_list *bl,int type);
void clif_talkiebox(struct block_list* bl, const char* talkie);
void clif_wedding_effect(struct block_list *bl);
void clif_divorced(struct map_session_data* sd, const char* name);
void clif_callpartner(struct map_session_data *sd);
void clif_playBGM(struct map_session_data* sd, const char* name);
void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const char* name, int type);
void clif_soundeffectall(struct block_list* bl, const char* name, int type, enum send_target coverage);
void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, unsigned int tick);
void clif_parse_LoadEndAck(int fd,struct map_session_data *sd);
void clif_hotkeys_send(struct map_session_data *sd);
// trade
void clif_traderequest(struct map_session_data* sd, const char* name);
void clif_tradestart(struct map_session_data* sd, uint8 type);
void clif_tradeadditem(struct map_session_data* sd, struct map_session_data* tsd, int index, int amount);
void clif_tradeitemok(struct map_session_data* sd, int index, int fail);
void clif_tradedeal_lock(struct map_session_data* sd, int fail);
void clif_tradecancelled(struct map_session_data* sd);
void clif_tradecompleted(struct map_session_data* sd, int fail);
void clif_tradeundo(struct map_session_data* sd);
// storage
void clif_storagelist(struct map_session_data* sd, struct item* items, int items_length);
void clif_updatestorageamount(struct map_session_data* sd, int amount, int max_amount);
void clif_storageitemadded(struct map_session_data* sd, struct item* i, int index, int amount);
void clif_storageitemremoved(struct map_session_data* sd, int index, int amount);
void clif_storageclose(struct map_session_data* sd);
int clif_insight(struct block_list *bl,va_list ap); // map_forallinmovearea callback
int clif_outsight(struct block_list *bl,va_list ap); // map_forallinmovearea callback
void clif_class_change(struct block_list *bl,int class_,int type);
#define clif_mob_class_change(md, class_) clif_class_change(&md->bl, class_, 1)
void clif_skillinfoblock(struct map_session_data *sd);
void clif_skillup(struct map_session_data *sd, uint16 skill_id, int lv, int range, int upgradable);
void clif_skillinfo(struct map_session_data *sd,int skill, int inf);
void clif_addskill(struct map_session_data *sd, int id);
void clif_deleteskill(struct map_session_data *sd, int id);
void clif_skillcasting(struct block_list* bl, int src_id, int dst_id, int dst_x, int dst_y, uint16 skill_id, int property, int casttime);
void clif_skillcastcancel(struct block_list* bl);
void clif_skill_fail(struct map_session_data *sd,uint16 skill_id,enum useskill_fail_cause cause,int btype);
void clif_skill_cooldown(struct map_session_data *sd, uint16 skill_id, unsigned int tick);
int clif_skill_damage(struct block_list *src,struct block_list *dst,unsigned int tick,int sdelay,int ddelay,int64 sdamage,int div,uint16 skill_id,uint16 skill_lv,int type);
//int clif_skill_damage2(struct block_list *src,struct block_list *dst,unsigned int tick,int sdelay,int ddelay,int damage,int div,uint16 skill_id,uint16 skill_lv,int type);
int clif_skill_nodamage(struct block_list *src,struct block_list *dst,uint16 skill_id,int heal,int fail);
void clif_skill_poseffect(struct block_list *src,uint16 skill_id,int val,int x,int y,int tick);
void clif_skill_estimation(struct map_session_data *sd,struct block_list *dst);
void clif_skill_warppoint(struct map_session_data* sd, uint16 skill_id, uint16 skill_lv, unsigned short map1, unsigned short map2, unsigned short map3, unsigned short map4);
void clif_skill_memomessage(struct map_session_data* sd, int type);
void clif_skill_teleportmessage(struct map_session_data *sd, int type);
void clif_skill_produce_mix_list(struct map_session_data *sd, int skill_id, int trigger);
void clif_cooking_list(struct map_session_data *sd, int trigger, uint16 skill_id, int qty, int list_type);
void clif_produceeffect(struct map_session_data* sd,int flag,int nameid);
void clif_skill_setunit(struct skill_unit *unit);
void clif_skill_delunit(struct skill_unit *unit);
void clif_skillunit_update(struct block_list* bl);
void clif_autospell(struct map_session_data *sd,uint16 skill_lv);
void clif_devotion(struct block_list *src, struct map_session_data *tsd);
void clif_spiritball(struct block_list *bl);
void clif_combo_delay(struct block_list *bl,int wait);
void clif_bladestop(struct block_list *src, int dst_id, int active);
void clif_changemapcell(int fd, int16 m, int x, int y, int type, enum send_target target);
#define clif_status_load(bl, type, flag) clif_status_change((bl), (type), (flag), 0, 0, 0, 0)
void clif_status_change(struct block_list *bl,int type,int flag,int tick,int val1, int val2, int val3);
void clif_wis_message(int fd, const char* nick, const char* mes, int mes_len);
void clif_wis_end(int fd, int flag);
void clif_solved_charname(int fd, int charid, const char* name);
void clif_charnameack(int fd, struct block_list *bl);
void clif_charnameupdate(struct map_session_data *ssd);
void clif_use_card(struct map_session_data *sd,int idx);
void clif_insert_card(struct map_session_data *sd,int idx_equip,int idx_card,int flag);
void clif_inventorylist(struct map_session_data *sd);
void clif_equiplist(struct map_session_data *sd);
void clif_cart_additem(struct map_session_data *sd,int n,int amount,int fail);
void clif_cart_additem_ack(struct map_session_data *sd, uint8 flag);
void clif_cart_delitem(struct map_session_data *sd,int n,int amount);
void clif_cartlist(struct map_session_data *sd);
void clif_clearcart(int fd);
void clif_item_identify_list(struct map_session_data *sd);
void clif_item_identified(struct map_session_data *sd,int idx,int flag);
void clif_item_repair_list(struct map_session_data *sd, struct map_session_data *dstsd, int lv);
void clif_item_repaireffect(struct map_session_data *sd, int idx, int flag);
void clif_item_damaged(struct map_session_data* sd, unsigned short position);
void clif_item_refine_list(struct map_session_data *sd);
void clif_item_skill(struct map_session_data *sd,uint16 skill_id,uint16 skill_lv);
void clif_mvp_effect(struct map_session_data *sd);
void clif_mvp_item(struct map_session_data *sd,int nameid);
void clif_mvp_exp(struct map_session_data *sd, unsigned int exp);
void clif_mvp_noitem(struct map_session_data* sd);
void clif_changed_dir(struct block_list *bl, enum send_target target);
// vending
void clif_openvendingreq(struct map_session_data* sd, int num);
void clif_showvendingboard(struct block_list* bl, const char* message, int fd);
void clif_closevendingboard(struct block_list* bl, int fd);
void clif_vendinglist(struct map_session_data* sd, int id, struct s_vending* vending);
void clif_buyvending(struct map_session_data* sd, int index, int amount, int fail);
void clif_openvending(struct map_session_data* sd, int id, struct s_vending* vending);
void clif_vendingreport(struct map_session_data* sd, int index, int amount);
void clif_movetoattack(struct map_session_data *sd,struct block_list *bl);
// party
void clif_party_created(struct map_session_data *sd,int result);
void clif_party_member_info(struct party_data *p, struct map_session_data *sd);
void clif_party_info(struct party_data* p, struct map_session_data *sd);
void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd);
void clif_party_inviteack(struct map_session_data* sd, const char* nick, int result);
void clif_party_option(struct party_data *p,struct map_session_data *sd,int flag);
void clif_party_withdraw(struct party_data* p, struct map_session_data* sd, int account_id, const char* name, int flag);
void clif_party_message(struct party_data* p, int account_id, const char* mes, int len);
void clif_party_xy(struct map_session_data *sd);
void clif_party_xy_single(int fd, struct map_session_data *sd);
void clif_party_hp(struct map_session_data *sd);
void clif_hpmeter_single(int fd, int id, unsigned int hp, unsigned int maxhp);
// guild
void clif_guild_created(struct map_session_data *sd,int flag);
void clif_guild_belonginfo(struct map_session_data *sd, struct guild *g);
void clif_guild_masterormember(struct map_session_data *sd);
void clif_guild_basicinfo(struct map_session_data *sd);
void clif_guild_allianceinfo(struct map_session_data *sd);
void clif_guild_memberlist(struct map_session_data *sd);
void clif_guild_skillinfo(struct map_session_data* sd);
void clif_guild_send_onlineinfo(struct map_session_data *sd); //[LuzZza]
void clif_guild_memberlogin_notice(struct guild *g,int idx,int flag);
void clif_guild_invite(struct map_session_data *sd,struct guild *g);
void clif_guild_inviteack(struct map_session_data *sd,int flag);
void clif_guild_leave(struct map_session_data *sd,const char *name,const char *mes);
void clif_guild_expulsion(struct map_session_data* sd, const char* name, const char* mes, int account_id);
void clif_guild_positionchanged(struct guild *g,int idx);
void clif_guild_memberpositionchanged(struct guild *g,int idx);
void clif_guild_emblem(struct map_session_data *sd,struct guild *g);
void clif_guild_emblem_area(struct block_list* bl);
void clif_guild_notice(struct map_session_data* sd, struct guild* g);
void clif_guild_message(struct guild *g,int account_id,const char *mes,int len);
void clif_guild_reqalliance(struct map_session_data *sd,int account_id,const char *name);
void clif_guild_allianceack(struct map_session_data *sd,int flag);
void clif_guild_delalliance(struct map_session_data *sd,int guild_id,int flag);
void clif_guild_oppositionack(struct map_session_data *sd,int flag);
void clif_guild_broken(struct map_session_data *sd,int flag);
void clif_guild_xy(struct map_session_data *sd);
void clif_guild_xy_single(int fd, struct map_session_data *sd);
void clif_guild_xy_remove(struct map_session_data *sd);
// Battleground
void clif_bg_hp(struct map_session_data *sd);
void clif_bg_xy(struct map_session_data *sd);
void clif_bg_xy_remove(struct map_session_data *sd);
void clif_bg_message(struct battleground_data *bg, int src_id, const char *name, const char *mes, int len);
void clif_bg_updatescore(int16 m);
void clif_bg_updatescore_single(struct map_session_data *sd);
void clif_sendbgemblem_area(struct map_session_data *sd);
void clif_sendbgemblem_single(int fd, struct map_session_data *sd);
// Instancing
void clif_instance_create(struct map_session_data *sd, const char *name, int num, int flag);
void clif_instance_changewait(struct map_session_data *sd, int num, int flag);
void clif_instance_status(struct map_session_data *sd, const char *name, unsigned int limit1, unsigned int limit2, int flag);
void clif_instance_changestatus(struct map_session_data *sd, int type, unsigned int limit, int flag);
// Custom Fonts
void clif_font(struct map_session_data *sd);
// atcommand
void clif_displaymessage(const int fd, const char* mes);
void clif_disp_onlyself(struct map_session_data *sd, const char *mes, int len);
void clif_disp_message(struct block_list* src, const char* mes, int len, enum send_target target);
void clif_broadcast(struct block_list* bl, const char* mes, int len, int type, enum send_target target);
void clif_broadcast2(struct block_list* bl, const char* mes, int len, unsigned long fontColor, short fontType, short fontSize, short fontAlign, short fontY, enum send_target target);
void clif_heal(int fd,int type,int val);
void clif_resurrection(struct block_list *bl,int type);
void clif_map_property(struct map_session_data* sd, enum map_property property);
void clif_maptypeproperty2(struct block_list *bl,enum send_target t);
void clif_pvpset(struct map_session_data *sd, int pvprank, int pvpnum,int type);
void clif_map_property_mapall(int map, enum map_property property);
void clif_refine(int fd, int fail, int index, int val);
void clif_upgrademessage(int fd, int result, int item_id);
//petsystem
void clif_catch_process(struct map_session_data *sd);
void clif_pet_roulette(struct map_session_data *sd,int data);
void clif_sendegg(struct map_session_data *sd);
void clif_send_petstatus(struct map_session_data *sd);
void clif_send_petdata(struct map_session_data* sd, struct pet_data* pd, int type, int param);
#define clif_pet_equip(sd, pd) clif_send_petdata(sd, pd, 3, (pd)->vd.head_bottom)
#define clif_pet_equip_area(pd) clif_send_petdata(NULL, pd, 3, (pd)->vd.head_bottom)
#define clif_pet_performance(pd, param) clif_send_petdata(NULL, pd, 4, param)
void clif_pet_emotion(struct pet_data *pd,int param);
void clif_pet_food(struct map_session_data *sd,int foodid,int fail);
//friends list
int clif_friendslist_toggle_sub(struct map_session_data *sd,va_list ap);
void clif_friendslist_send(struct map_session_data *sd);
void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_data *f_sd, int type);
void clif_weather(int16 m); // [Valaris]
void clif_specialeffect(struct block_list* bl, int type, enum send_target target); // special effects [Valaris]
void clif_specialeffect_single(struct block_list* bl, int type, int fd);
void clif_messagecolor(struct block_list* bl, unsigned long color, const char* msg); // Mob/Npc color talk [snakeDrak]
void clif_specialeffect_value(struct block_list* bl, int effect_id, int num, send_target target);
void clif_GM_kickack(struct map_session_data *sd, int id);
void clif_GM_kick(struct map_session_data *sd,struct map_session_data *tsd);
void clif_manner_message(struct map_session_data* sd, uint32 type);
void clif_GM_silence(struct map_session_data* sd, struct map_session_data* tsd, uint8 type);
void clif_disp_overhead(struct block_list *bl, const char* mes);
void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, unsigned short *lhand);
void clif_party_xy_remove(struct map_session_data *sd); //Fix for minimap [Kevin]
void clif_gospel_info(struct map_session_data *sd, int type);
void clif_feel_req(int fd, struct map_session_data *sd, uint16 skill_lv);
void clif_starskill(struct map_session_data* sd, const char* mapname, int monster_id, unsigned char star, unsigned char result);
void clif_feel_info(struct map_session_data* sd, unsigned char feel_level, unsigned char type);
void clif_hate_info(struct map_session_data *sd, unsigned char hate_level,int class_, unsigned char type);
void clif_mission_info(struct map_session_data *sd, int mob_id, unsigned char progress);
void clif_feel_hate_reset(struct map_session_data *sd);
// [blackhole89]
void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag);
int clif_homskillinfoblock(struct map_session_data *sd);
void clif_homskillup(struct map_session_data *sd, uint16 skill_id); //[orn]
int clif_hom_food(struct map_session_data *sd,int foodid,int fail); //[orn]
void clif_send_homdata(struct map_session_data *sd, int state, int param); //[orn]
void clif_equiptickack(struct map_session_data* sd, int flag);
void clif_viewequip_ack(struct map_session_data* sd, struct map_session_data* tsd);
void clif_equipcheckbox(struct map_session_data* sd);
void clif_msg(struct map_session_data* sd, unsigned short id);
void clif_msg_value(struct map_session_data* sd, unsigned short id, int value);
void clif_msg_skill(struct map_session_data* sd, uint16 skill_id, int msg_id);
//quest system [Kevin] [inkfish]
void clif_quest_send_list(struct map_session_data * sd);
void clif_quest_send_mission(struct map_session_data * sd);
void clif_quest_add(struct map_session_data * sd, struct quest * qd, int index);
void clif_quest_delete(struct map_session_data * sd, int quest_id);
void clif_quest_update_status(struct map_session_data * sd, int quest_id, bool active);
void clif_quest_update_objective(struct map_session_data * sd, struct quest * qd, int index);
void clif_quest_show_event(struct map_session_data *sd, struct block_list *bl, short state, short color);
void clif_displayexp(struct map_session_data *sd, unsigned int exp, char type, bool quest);
int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target type);
int do_init_clif(void);
void do_final_clif(void);
// MAIL SYSTEM
void clif_Mail_window(int fd, int flag);
void clif_Mail_read(struct map_session_data *sd, int mail_id);
void clif_Mail_delete(int fd, int mail_id, short fail);
void clif_Mail_return(int fd, int mail_id, short fail);
void clif_Mail_send(int fd, bool fail);
void clif_Mail_new(int fd, int mail_id, const char *sender, const char *title);
void clif_Mail_refreshinbox(struct map_session_data *sd);
void clif_Mail_getattachment(int fd, uint8 flag);
// AUCTION SYSTEM
void clif_Auction_openwindow(struct map_session_data *sd);
void clif_Auction_results(struct map_session_data *sd, short count, short pages, uint8 *buf);
void clif_Auction_message(int fd, unsigned char flag);
void clif_Auction_close(int fd, unsigned char flag);
void clif_parse_Auction_cancelreg(int fd, struct map_session_data *sd);
void clif_bossmapinfo(int fd, struct mob_data *md, short flag);
void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd);
// ADOPTION
void clif_Adopt_reply(struct map_session_data *sd, int type);
// MERCENARIES
void clif_mercenary_info(struct map_session_data *sd);
void clif_mercenary_skillblock(struct map_session_data *sd);
void clif_mercenary_message(struct map_session_data* sd, int message);
void clif_mercenary_updatestatus(struct map_session_data *sd, int type);
// RENTAL SYSTEM
void clif_rental_time(int fd, int nameid, int seconds);
void clif_rental_expired(int fd, int index, int nameid);
// BOOK READING
void clif_readbook(int fd, int book_id, int page);
// Show Picker
void clif_party_show_picker(struct map_session_data * sd, struct item * item_data);
// Progress Bar [inkfish]
void clif_progressbar(struct map_session_data * sd, unsigned long color, unsigned int second);
void clif_progressbar_abort(struct map_session_data * sd);
void clif_PartyBookingRegisterAck(struct map_session_data *sd, int flag);
void clif_PartyBookingDeleteAck(struct map_session_data* sd, int flag);
void clif_PartyBookingSearchAck(int fd, struct party_booking_ad_info** results, int count, bool more_result);
void clif_PartyBookingUpdateNotify(struct map_session_data* sd, struct party_booking_ad_info* pb_ad);
void clif_PartyBookingDeleteNotify(struct map_session_data* sd, int index);
void clif_PartyBookingInsertNotify(struct map_session_data* sd, struct party_booking_ad_info* pb_ad);
/* Bank System [Yommy/Hercules] */
void clif_bank_deposit (struct map_session_data *sd, enum e_BANKING_DEPOSIT_ACK reason);
void clif_bank_withdraw (struct map_session_data *sd,enum e_BANKING_WITHDRAW_ACK reason);
void clif_parse_BankDeposit (int fd, struct map_session_data *sd);
void clif_parse_BankWithdraw (int fd, struct map_session_data *sd);
void clif_parse_BankCheck (int fd, struct map_session_data *sd);
void clif_parse_BankOpen (int fd, struct map_session_data *sd);
void clif_parse_BankClose (int fd, struct map_session_data *sd);
void clif_showdigit(struct map_session_data* sd, unsigned char type, int value);
/// Buying Store System
void clif_buyingstore_open(struct map_session_data* sd);
void clif_buyingstore_open_failed(struct map_session_data* sd, unsigned short result, unsigned int weight);
void clif_buyingstore_myitemlist(struct map_session_data* sd);
void clif_buyingstore_entry(struct map_session_data* sd);
void clif_buyingstore_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd);
void clif_buyingstore_disappear_entry(struct map_session_data* sd);
void clif_buyingstore_disappear_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd);
void clif_buyingstore_itemlist(struct map_session_data* sd, struct map_session_data* pl_sd);
void clif_buyingstore_trade_failed_buyer(struct map_session_data* sd, short result);
void clif_buyingstore_update_item(struct map_session_data* sd, unsigned short nameid, unsigned short amount);
void clif_buyingstore_delete_item(struct map_session_data* sd, short index, unsigned short amount, int price);
void clif_buyingstore_trade_failed_seller(struct map_session_data* sd, short result, unsigned short nameid);
/// Search Store System
void clif_search_store_info_ack(struct map_session_data* sd);
void clif_search_store_info_failed(struct map_session_data* sd, unsigned char reason);
void clif_open_search_store_info(struct map_session_data* sd);
void clif_search_store_info_click_ack(struct map_session_data* sd, short x, short y);
/// Cash Shop
void clif_cashshop_result( struct map_session_data* sd, uint16 item_id, uint16 result );
void clif_cashshop_open( struct map_session_data* sd );
void clif_display_pinfo(struct map_session_data *sd, int type);
/**
* 3CeAM
**/
void clif_msgtable(int fd, int line);
void clif_msgtable_num(int fd, int line, int num);
int clif_elementalconverter_list(struct map_session_data *sd);
void clif_millenniumshield(struct map_session_data *sd, short shields );
int clif_spellbook_list(struct map_session_data *sd);
int clif_magicdecoy_list(struct map_session_data *sd, uint16 skill_lv, short x, short y);
int clif_poison_list(struct map_session_data *sd, uint16 skill_lv);
int clif_autoshadowspell_list(struct map_session_data *sd);
int clif_status_load_notick(struct block_list *bl,int type,int flag,int val1, int val2, int val3);
int clif_status_load_single(int fd, int id,int type,int flag,int val1, int val2, int val3);
int clif_skill_itemlistwindow( struct map_session_data *sd, uint16 skill_id, uint16 skill_lv );
void clif_elemental_info(struct map_session_data *sd);
void clif_elemental_updatestatus(struct map_session_data *sd, int type);
void clif_talisman(struct map_session_data *sd, short type);
void clif_snap( struct block_list *bl, short x, short y );
void clif_monster_hp_bar( struct mob_data* md, int fd );
/**
* Color Table
**/
enum clif_colors {
COLOR_RED,
COLOR_WHITE,
COLOR_MAX
};
unsigned long color_table[color_MAX];
int clif_colormes(struct map_session_data * sd, unsigned long color, const char* msg);
void clif_channel_msg(struct Channel *channel, struct map_session_data *sd, char *msg, short color);
#define clif_menuskill_clear(sd) (sd)->menuskill_id = (sd)->menuskill_val = (sd)->menuskill_val2 = 0;
void clif_ranklist(struct map_session_data *sd, int16 rankingType);
void clif_update_rankingpoint(struct map_session_data *sd, int rankingtype, int point);
//void clif_broadcast_obtain_special_item(); ///TODO!
#endif /* _CLIF_H_ */
mmo.h
// Copyright © Athena Dev Teams - Licensed under GNU GPL
// For more information, see LICENCE in the main folder
#ifndef _MMO_H_
#define _MMO_H_
#include "cbasetypes.h"
#include "../common/db.h"
#include <time.h>
// server->client protocol version
// 0 - pre-?
// 1 - ? - 0x196
// 2 - ? - 0x78, 0x79
// 3 - ? - 0x1c8, 0x1c9, 0x1de
// 4 - ? - 0x1d7, 0x1d8, 0x1d9, 0x1da
// 5 - 2003-12-18aSakexe+ - 0x1ee, 0x1ef, 0x1f0, ?0x1c4, 0x1c5?
// 6 - 2004-03-02aSakexe+ - 0x1f4, 0x1f5
// 7 - 2005-04-11aSakexe+ - 0x229, 0x22a, 0x22b, 0x22c
// see conf/battle/client.conf for other version
#ifndef PACKETVER
//#define PACKETVER 20130807
#define PACKETVER 20120410
#endif
///Remove/Comment this line to disable sc_data saving. [skotlex]
#define ENABLE_SC_SAVING
/** Remove/Comment this line to disable server-side hot-key saving support [skotlex]
* Note that newer clients no longer save hotkeys in the registry! */
#define HOTKEY_SAVING
#if PACKETVER < 20090603
// (27 = 9 skills x 3 bars) (0x02b9,191)
#define MAX_HOTKEYS 27
#elif PACKETVER < 20090617
// (36 = 9 skills x 4 bars) (0x07d9,254)
#define MAX_HOTKEYS 36
#else
// (38 = 9 skills x 4 bars & 2 Quickslots)(0x07d9,268)
#define MAX_HOTKEYS 38
#endif
#define MAX_MAP_PER_SERVER 1500 /// Increased to allow creation of Instance Maps
#define MAX_INVENTORY 100 ///Maximum items in player inventory
/** Max number of characters per account. Note that changing this setting alone is not enough if the client is not hexed to support more characters as well.
* Max value tested was 265 */
#define MAX_CHARS 9
/** Number of slots carded equipment can have. Never set to less than 4 as they are also used to keep the data of forged items/equipment. [skotlex]
* Note: The client seems unable to receive data for more than 4 slots due to all related packets having a fixed size. */
#define MAX_SLOTS 4
#define MAX_AMOUNT 30000 ////Max amount of a single stacked item
#define MAX_ZENY 2000000000 ///Max zeny
#define MAX_BANK_ZENY SINT32_MAX ///Max zeny in Bank
#define MAX_FAME 1000000000 ///Max fame points
#define MAX_CART 100 ///Maximum item in cart
#define MAX_SKILL 5020 ///Maximum skill data
#define GLOBAL_REG_NUM 256 ///Max permanent character variables per char
#define ACCOUNT_REG_NUM 64 ///Max permanent local account variables per account
#define ACCOUNT_REG2_NUM 16 ///Max permanent global account variables per account
#define MAX_REG_NUM 256 ///Should hold the max of GLOBAL/ACCOUNT/ACCOUNT2 (needed for some arrays that hold all three)
#define DEFAULT_WALK_SPEED 150 ///Default walk speed
#define MIN_WALK_SPEED 0 ///Min walk speed
#define MAX_WALK_SPEED 1000 ///Max walk speed
#define MAX_STORAGE 600 ///Max number of storage slots a player can have, (up to ~850 tested)
#define MAX_GUILD_STORAGE 600 ///Max number of storage slots a guild
#define MAX_PARTY 12 ///Max party member
#define MAX_GUILD 16+10*6 ///Increased max guild members +6 per 1 extension levels [Lupus]
#define MAX_GUILDPOSITION 20 ///Increased max guild positions to accomodate for all members [Valaris] (removed) [PoW]
#define MAX_GUILDEXPULSION 32 ///Max Guild expulsion
#define MAX_GUILDALLIANCE 16 ///Max Guild alliance
#define MAX_GUILDSKILL 15 ///Increased max guild skills because of new skills [sara-chan]
#define MAX_GUILDLEVEL 50 ///Max Guild level
#define MAX_GUARDIANS 8 ///Local max per castle. If this value is increased, need to add more fields on MySQL `guild_castle` table [skotlex]
#define MAX_QUEST_DB 2800 ///Max quests that the server will load
#define MAX_QUEST_OBJECTIVES 3 ///Max quest objectives for a quest
// for produce
#define MIN_ATTRIBUTE 0
#define MAX_ATTRIBUTE 4
#define ATTRIBUTE_NORMAL 0
#define MIN_STAR 0
#define MAX_STAR 3
#define MAX_STATUS_TYPE 5
#define WEDDING_RING_M 2634
#define WEDDING_RING_F 2635
//For character names, title names, guilds, maps, etc.
//Includes null-terminator as it is the length of the array.
#define NAME_LENGTH (23 + 1)
//For item names, which tend to have much longer names.
#define ITEM_NAME_LENGTH 50
//For Map Names, which the client considers to be 16 in length including the .gat extension
#define MAP_NAME_LENGTH (11 + 1)
#define MAP_NAME_LENGTH_EXT (MAP_NAME_LENGTH + 4)
//Pincode Length
#define PINCODE_LENGTH 4
#define MAX_FRIENDS 40
#define MAX_MEMOPOINTS 3
#define MAX_SKILLCOOLDOWN 20
//Size of the fame list arrays.
#define MAX_FAME_LIST 10
//Limits to avoid ID collision with other game objects
#define START_ACCOUNT_NUM 2000000
#define END_ACCOUNT_NUM 100000000
#define START_CHAR_NUM 150000
//Guilds
#define MAX_GUILDMES1 60
#define MAX_GUILDMES2 120
//Base Homun skill.
#define HM_SKILLBASE 8001
#define MAX_HOMUNSKILL 43
#define MAX_HOMUNCULUS_CLASS 52 //[orn], Increased to 60 from 16 to allow new Homun-S.
#define HM_CLASS_BASE 6001
#define HM_CLASS_MAX (HM_CLASS_BASE+MAX_HOMUNCULUS_CLASS-1)
//Mail System
#define MAIL_MAX_INBOX 30
#define MAIL_TITLE_LENGTH 40
#define MAIL_BODY_LENGTH 200
//Mercenary System
#define MC_SKILLBASE 8201
#define MAX_MERCSKILL 40
#define MAX_MERCENARY_CLASS 61
//Elemental System
#define MAX_ELEMENTALSKILL 42
#define EL_SKILLBASE 8401
#define MAX_ELESKILLTREE 3
#define MAX_ELEMENTAL_CLASS 12
#define EL_CLASS_BASE 2114
#define EL_CLASS_MAX (EL_CLASS_BASE+MAX_ELEMENTAL_CLASS-1)
enum item_types {
IT_HEALING = 0,
IT_UNKNOWN, //1
IT_USABLE, //2
IT_ETC, //3
IT_ARMOR, //4
IT_WEAPON, //5
IT_CARD, //6
IT_PETEGG, //7
IT_PETARMOR,//8
IT_UNKNOWN2,//9
IT_AMMO, //10
IT_DELAYCONSUME,//11
IT_SHADOWGEAR, //12
IT_CASH = 18,
IT_MAX
};
//Questlog system [Kevin] [inkfish]
typedef enum quest_state { Q_INACTIVE, Q_ACTIVE, Q_COMPLETE } quest_state;
struct quest {
int quest_id;
unsigned int time;
int count[MAX_QUEST_OBJECTIVES];
quest_state state;
};
struct item {
int id;
short nameid;
short amount;
unsigned int equip; // location(s) where item is equipped (using enum equip_pos for bitmasking)
char identify;
char refine;
char attribute;
short card[MAX_SLOTS];
unsigned int expire_time;
char favorite, bound;
uint64 unique_id;
};
struct point {
unsigned short map;
short x,y;
};
enum e_skill_flag
{
SKILL_FLAG_PERMANENT,
SKILL_FLAG_TEMPORARY,
SKILL_FLAG_PLAGIARIZED,
SKILL_FLAG_REPLACED_LV_0, // temporary skill overshadowing permanent skill of level 'N - SKILL_FLAG_REPLACED_LV_0',
SKILL_FLAG_PERM_GRANTED, // permanent, granted through someway e.g. script
SKILL_FLAG_TMP_COMBO, //@FIXME for homon combo atm
//...
};
struct s_skill {
unsigned short id;
unsigned char lv;
unsigned char flag; // see enum e_skill_flag
};
struct global_reg {
char str[32];
char value[256];
};
//Holds array of global registries, used by the char server and converter.
struct accreg {
int account_id, char_id;
int reg_num;
struct global_reg reg[MAX_REG_NUM];
};
//For saving status changes across sessions. [skotlex]
struct status_change_data {
unsigned short type; //SC_type
long val1, val2, val3, val4, tick; //Remaining duration.
};
#define MAX_BONUS_SCRIPT_LENGTH 1024
struct bonus_script_data {
char script[MAX_BONUS_SCRIPT_LENGTH];
long tick;
char type;
short flag, icon;
};
struct skill_cooldown_data {
unsigned short skill_id;
long tick;
};
struct storage_data {
int storage_amount;
struct item items[MAX_STORAGE];
};
struct guild_storage {
int dirty;
int guild_id;
short storage_status;
short storage_amount;
struct item items[MAX_GUILD_STORAGE];
unsigned short lock;
};
struct s_pet {
int account_id;
int char_id;
int pet_id;
short class_;
short level;
short egg_id;//pet egg id
short equip;//pet equip name_id
short intimate;//pet friendly
short hungry;//pet hungry
char name[NAME_LENGTH];
char rename_flag;
char incuvate;
};
struct s_homunculus { //[orn]
char name[NAME_LENGTH];
int hom_id;
int char_id;
short class_;
short prev_class;
int hp,max_hp,sp,max_sp;
unsigned int intimacy; //[orn]
short hunger;
struct s_skill hskill[MAX_HOMUNSKILL]; //albator
short skillpts;
short level;
unsigned int exp;
short rename_flag;
short vaporize; //albator
int str ;
int agi ;
int vit ;
int int_ ;
int dex ;
int luk ;
char spiritball; //for homun S [lighta]
};
struct s_mercenary {
int mercenary_id;
int char_id;
short class_;
int hp, sp;
unsigned int kill_count;
unsigned int life_time;
};
struct s_elemental {
int elemental_id;
int char_id;
short class_;
int mode;
int hp, sp, max_hp, max_sp, matk, atk, atk2;
short hit, flee, amotion, def, mdef;
int life_time;
};
struct s_friend {
int account_id;
int char_id;
char name[NAME_LENGTH];
};
#ifdef HOTKEY_SAVING
struct hotkey {
unsigned int id;
unsigned short lv;
unsigned char type; // 0: item, 1: skill
};
#endif
struct mmo_charstatus {
int char_id;
int account_id;
int partner_id;
int father;
int mother;
int child;
unsigned int base_exp,job_exp;
int zeny;
int bank_vault;
short class_;
unsigned int status_point,skill_point;
int hp,max_hp,sp,max_sp;
unsigned int option;
short manner;
unsigned char karma;
short hair,hair_color,clothes_color;
int party_id,guild_id,pet_id,hom_id,mer_id,ele_id;
int fame;
// Mercenary Guilds Rank
int arch_faith, arch_calls;
int spear_faith, spear_calls;
int sword_faith, sword_calls;
short weapon; // enum weapon_type
short shield; // view-id
short head_top,head_mid,head_bottom;
short robe;
char name[NAME_LENGTH];
unsigned int base_level,job_level;
short str,agi,vit,int_,dex,luk;
unsigned char slot,sex;
uint32 mapip;
uint16 mapport;
struct point last_point,save_point,memo_point[MAX_MEMOPOINTS];
struct item inventory[MAX_INVENTORY],cart[MAX_CART];
struct storage_data storage;
struct s_skill skill[MAX_SKILL];
struct s_friend friends[MAX_FRIENDS]; //New friend system [skotlex]
#ifdef HOTKEY_SAVING
struct hotkey hotkeys[MAX_HOTKEYS];
#endif
bool show_equip;
short rename;
time_t delete_date;
time_t unban_time;
// Char server addon system
unsigned int character_moves;
bool cashshop_sent; // Whether the player has received the CashShop list
};
typedef enum mail_status {
MAIL_NEW,
MAIL_UNREAD,
MAIL_READ,
} mail_status;
struct mail_message {
int id;
int send_id;
char send_name[NAME_LENGTH];
int dest_id;
char dest_name[NAME_LENGTH];
char title[MAIL_TITLE_LENGTH];
char body[MAIL_BODY_LENGTH];
mail_status status;
time_t timestamp; // marks when the message was sent
int zeny;
struct item item;
};
struct mail_data {
short amount;
bool full;
short unchecked, unread;
struct mail_message msg[MAIL_MAX_INBOX];
};
struct auction_data {
unsigned int auction_id;
int seller_id;
char seller_name[NAME_LENGTH];
int buyer_id;
char buyer_name[NAME_LENGTH];
struct item item;
// This data is required for searching, as itemdb is not read by char server
char item_name[iTEM_NAME_LENGTH];
short type;
unsigned short hours;
int price, buynow;
time_t timestamp; // auction's end time
int auction_end_timer;
};
struct registry {
int global_num;
struct global_reg global[GLOBAL_REG_NUM];
int account_num;
struct global_reg account[ACCOUNT_REG_NUM];
int account2_num;
struct global_reg account2[ACCOUNT_REG2_NUM];
};
struct party_member {
int account_id;
int char_id;
char name[NAME_LENGTH];
unsigned short class_;
unsigned short map;
unsigned short lv;
unsigned leader : 1,
online : 1;
};
struct party {
int party_id;
char name[NAME_LENGTH];
unsigned char count; //Count of online characters.
unsigned exp : 1,
item : 2; //&1: Party-Share (round-robin), &2: pickup style: shared.
struct party_member member[MAX_PARTY];
};
struct map_session_data;
struct guild_member {
int account_id, char_id;
short hair,hair_color,gender,class_,lv;
uint64 exp;
int exp_payper;
short online,position;
char name[NAME_LENGTH];
struct map_session_data *sd;
unsigned char modified;
};
struct guild_position {
char name[NAME_LENGTH];
int mode;
int exp_mode;
unsigned char modified;
};
struct guild_alliance {
int opposition;
int guild_id;
char name[NAME_LENGTH];
};
struct guild_expulsion {
char name[NAME_LENGTH];
char mes[40];
int account_id;
};
struct guild_skill {
int id,lv;
};
struct Channel;
struct guild {
int guild_id;
short guild_lv, connect_member, max_member, average_lv;
uint64 exp;
unsigned int next_exp;
int skill_point;
char name[NAME_LENGTH],master[NAME_LENGTH];
struct guild_member member[MAX_GUILD];
struct guild_position position[MAX_GUILDPOSITION];
char mes1[MAX_GUILDMES1],mes2[MAX_GUILDMES2];
int emblem_len,emblem_id;
char emblem_data[2048];
struct guild_alliance alliance[MAX_GUILDALLIANCE];
struct guild_expulsion expulsion[MAX_GUILDEXPULSION];
struct guild_skill skill[MAX_GUILDSKILL];
struct Channel *channel;
/* TODO: still used for something? */
unsigned short save_flag; // for TXT saving
};
struct guild_castle {
int castle_id;
int mapindex;
char castle_name[NAME_LENGTH];
char castle_event[NAME_LENGTH];
int guild_id;
int economy;
int defense;
int triggerE;
int triggerD;
int nextTime;
int payTime;
int createTime;
int visibleC;
struct {
unsigned visible : 1;
int id; // object id
} guardian[MAX_GUARDIANS];
int* temp_guardians; // ids of temporary guardians (mobs)
int temp_guardians_max;
};
struct fame_list {
int id;
int fame;
char name[NAME_LENGTH];
};
enum { //Change Guild Infos
GBI_EXP =1, // Guild Experience (EXP)
GBI_GUILDLV, // Guild level
GBI_SKILLPOINT, // Guild skillpoints
GBI_SKILLLV, // Guild skill_lv ?? seem unused
};
enum { //Change Member Infos
GMI_POSITION =0,
GMI_EXP,
GMI_HAIR,
GMI_HAIR_COLOR,
GMI_GENDER,
GMI_CLASS,
GMI_LEVEL,
};
enum e_guild_skill {
GD_SKILLBASE=10000,
GD_APPROVAL=10000,
GD_KAFRACONTRACT=10001,
GD_GUARDRESEARCH=10002,
GD_GUARDUP=10003,
GD_EXTENSION=10004,
GD_GLORYGUILD=10005,
GD_LEADERSHIP=10006,
GD_GLORYWOUNDS=10007,
GD_SOULCOLD=10008,
GD_HAWKEYES=10009,
GD_BATTLEORDER=10010,
GD_REGENERATION=10011,
GD_RESTORE=10012,
GD_EMERGENCYCALL=10013,
GD_DEVELOPMENT=10014,
GD_ITEMEMERGENCYCALL=10015,
GD_MAX,
};
//These mark the ID of the jobs, as expected by the client. [skotlex]
enum {
JOB_NOVICE,
JOB_SWORDMAN,
JOB_MAGE,
JOB_ARCHER,
JOB_ACOLYTE,
JOB_MERCHANT,
JOB_THIEF,
JOB_KNIGHT,
JOB_PRIEST,
JOB_WIZARD,
JOB_BLACKSMITH,
JOB_HUNTER,
JOB_ASSASSIN,
JOB_KNIGHT2,
JOB_CRUSADER,
JOB_MONK,
JOB_SAGE,
JOB_ROGUE,
JOB_ALCHEMIST,
JOB_BARD,
JOB_DANCER,
JOB_CRUSADER2,
JOB_WEDDING,
JOB_SUPER_NOVICE,
JOB_GUNSLINGER,
JOB_NINJA,
JOB_XMAS,
JOB_SUMMER,
JOB_HANBOK,
JOB_OKTOBERFEST,
JOB_MAX_BASIC,
JOB_NOVICE_HIGH = 4001,
JOB_SWORDMAN_HIGH,
JOB_MAGE_HIGH,
JOB_ARCHER_HIGH,
JOB_ACOLYTE_HIGH,
JOB_MERCHANT_HIGH,
JOB_THIEF_HIGH,
JOB_LORD_KNIGHT,
JOB_HIGH_PRIEST,
JOB_HIGH_WIZARD,
JOB_WHITESMITH,
JOB_SNIPER,
JOB_ASSASSIN_CROSS,
JOB_LORD_KNIGHT2,
JOB_PALADIN,
JOB_CHAMPION,
JOB_PROFESSOR,
JOB_STALKER,
JOB_CREATOR,
JOB_CLOWN,
JOB_GYPSY,
JOB_PALADIN2,
JOB_BABY,
JOB_BABY_SWORDMAN,
JOB_BABY_MAGE,
JOB_BABY_ARCHER,
JOB_BABY_ACOLYTE,
JOB_BABY_MERCHANT,
JOB_BABY_THIEF,
JOB_BABY_KNIGHT,
JOB_BABY_PRIEST,
JOB_BABY_WIZARD,
JOB_BABY_BLACKSMITH,
JOB_BABY_HUNTER,
JOB_BABY_ASSASSIN,
JOB_BABY_KNIGHT2,
JOB_BABY_CRUSADER,
JOB_BABY_MONK,
JOB_BABY_SAGE,
JOB_BABY_ROGUE,
JOB_BABY_ALCHEMIST,
JOB_BABY_BARD,
JOB_BABY_DANCER,
JOB_BABY_CRUSADER2,
JOB_SUPER_BABY,
JOB_TAEKWON,
JOB_STAR_GLADIATOR,
JOB_STAR_GLADIATOR2,
JOB_SOUL_LINKER,
JOB_GANGSI,
JOB_DEATH_KNIGHT,
JOB_DARK_COLLECTOR,
JOB_RUNE_KNIGHT = 4054,
JOB_WARLOCK,
JOB_RANGER,
JOB_ARCH_BISHOP,
JOB_MECHANIC,
JOB_GUILLOTINE_CROSS,
JOB_RUNE_KNIGHT_T,
JOB_WARLOCK_T,
JOB_RANGER_T,
JOB_ARCH_BISHOP_T,
JOB_MECHANIC_T,
JOB_GUILLOTINE_CROSS_T,
JOB_ROYAL_GUARD,
JOB_SORCERER,
JOB_MINSTREL,
JOB_WANDERER,
JOB_SURA,
JOB_GENETIC,
JOB_SHADOW_CHASER,
JOB_ROYAL_GUARD_T,
JOB_SORCERER_T,
JOB_MINSTREL_T,
JOB_WANDERER_T,
JOB_SURA_T,
JOB_GENETIC_T,
JOB_SHADOW_CHASER_T,
JOB_RUNE_KNIGHT2,
JOB_RUNE_KNIGHT_T2,
JOB_ROYAL_GUARD2,
JOB_ROYAL_GUARD_T2,
JOB_RANGER2,
JOB_RANGER_T2,
JOB_MECHANIC2,
JOB_MECHANIC_T2,
JOB_BABY_RUNE = 4096,
JOB_BABY_WARLOCK,
JOB_BABY_RANGER,
JOB_BABY_BISHOP,
JOB_BABY_MECHANIC,
JOB_BABY_CROSS,
JOB_BABY_GUARD,
JOB_BABY_SORCERER,
JOB_BABY_MINSTREL,
JOB_BABY_WANDERER,
JOB_BABY_SURA,
JOB_BABY_GENETIC,
JOB_BABY_CHASER,
JOB_BABY_RUNE2,
JOB_BABY_GUARD2,
JOB_BABY_RANGER2,
JOB_BABY_MECHANIC2,
JOB_SUPER_NOVICE_E = 4190,
JOB_SUPER_BABY_E,
JOB_KAGEROU = 4211,
JOB_OBORO,
JOB_REBELLION = 4215,
JOB_MAX,
};
enum {
SEX_FEMALE = 0,
SEX_MALE,
SEX_SERVER
};
// sanity checks...
#if MAX_ZENY > INT_MAX
#error MAX_ZENY is too big
#endif
#endif /* _MMO_H_ */
clientinfo.xml
Version 30
Client and Server
Server rathena 17704 and server 20140409 include diff WDGSkipPacketHeaderObfuscation
please help me for problem this my server and described in detail
Edited by anakawaiLink to comment
Share on other sites
8 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.