root/src/common/mmo.h @ 1

Revision 1, 12.9 kB (checked in by jinshiro, 17 years ago)
RevLine 
[1]1// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
2// For more information, see LICENCE in the main folder
3
4#ifndef _MMO_H_
5#define _MMO_H_
6
7#include "cbasetypes.h"
8#include <time.h>
9
10#define FIFOSIZE_SERVERLINK     256*1024
11
12//Remove/Comment this line to disable sc_data saving. [Skotlex]
13#define ENABLE_SC_SAVING
14//Remove/Comment this line to disable server-side hot-key saving support [Skotlex]
15//Note that newer clients no longer save hotkeys in the registry!
16#define HOTKEY_SAVING
17
18//The number is the max number of hotkeys to save (27 = 9 skills x 3 bars)
19#define MAX_HOTKEYS 27
20
21#define MAX_MAP_PER_SERVER 1024
22#define MAX_INVENTORY 100
23//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.
24#define MAX_CHARS 9
25//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]
26//Note: The client seems unable to receive data for more than 4 slots due to all related packets having a fixed size.
27#define MAX_SLOTS 4
28//Max amount of a single stacked item
29#define MAX_AMOUNT 30000
30#define MAX_ZENY 1000000000
31#define MAX_FAME 1000000000
32#define MAX_CART 100
33#define MAX_SKILL 1100 // Bumped to 1100 for new quest skills, will need to further increase one day... [DracoRPG]
34#define GLOBAL_REG_NUM 96
35#define ACCOUNT_REG_NUM 64
36#define ACCOUNT_REG2_NUM 16
37//Should hold the max of GLOBAL/ACCOUNT/ACCOUNT2 (needed for some arrays that hold all three)
38#define MAX_REG_NUM 96
39#define DEFAULT_WALK_SPEED 150
40#define MIN_WALK_SPEED 0
41#define MAX_WALK_SPEED 1000
42#define MAX_STORAGE 600
43#define MAX_GUILD_STORAGE 1000
44#define MAX_PARTY 12
45#define MAX_GUILD 16+10*6       // increased max guild members +6 per 1 extension levels [Lupus]
46#define MAX_GUILDPOSITION 20    // increased max guild positions to accomodate for all members [Valaris] (removed) [PoW]
47#define MAX_GUILDEXPULSION 32
48#define MAX_GUILDALLIANCE 16
49#define MAX_GUILDSKILL  15 // increased max guild skills because of new skills [Sara-chan]
50#define MAX_GUILDCASTLE 34      // Updated to include new entries for WoE:SE. [L0ne_W0lf]
51#define MAX_GUILDLEVEL 50
52#define MAX_GUARDIANS 8 //Local max per castle. [Skotlex]
53#define MAX_QUEST 25 //Max quests for a PC
54#define MAX_QUEST_OBJECTIVES 3 //Max quest objectives for a quest
55
56#define MIN_HAIR_STYLE battle_config.min_hair_style
57#define MAX_HAIR_STYLE battle_config.max_hair_style
58#define MIN_HAIR_COLOR battle_config.min_hair_color
59#define MAX_HAIR_COLOR battle_config.max_hair_color
60#define MIN_CLOTH_COLOR battle_config.min_cloth_color
61#define MAX_CLOTH_COLOR battle_config.max_cloth_color
62
63// for produce
64#define MIN_ATTRIBUTE 0
65#define MAX_ATTRIBUTE 4
66#define ATTRIBUTE_NORMAL 0
67#define MIN_STAR 0
68#define MAX_STAR 3
69
70#define MAX_STATUS_TYPE 5
71
72#define WEDDING_RING_M 2634
73#define WEDDING_RING_F 2635
74
75//For character names, title names, guilds, maps, etc.
76//Includes null-terminator as it is the length of the array.
77#define NAME_LENGTH (23 + 1)
78//For item names, which tend to have much longer names.
79#define ITEM_NAME_LENGTH 50
80//For Map Names, which the client considers to be 16 in length including the .gat extension
81#define MAP_NAME_LENGTH (11 + 1)
82#define MAP_NAME_LENGTH_EXT (MAP_NAME_LENGTH + 4)
83
84#define MAX_FRIENDS 40
85#define MAX_MEMOPOINTS 3
86
87//Size of the fame list arrays.
88#define MAX_FAME_LIST 10
89
90//Limits to avoid ID collision with other game objects
91#define START_ACCOUNT_NUM 2000000
92#define END_ACCOUNT_NUM 100000000
93
94//Base Homun skill.
95#define HM_SKILLBASE 8001
96#define MAX_HOMUNSKILL 16
97#define MAX_HOMUNCULUS_CLASS    16      //[orn]
98#define HM_CLASS_BASE 6001
99#define HM_CLASS_MAX (HM_CLASS_BASE+MAX_HOMUNCULUS_CLASS-1)
100
101//Mail System
102#define MAIL_MAX_INBOX 30
103#define MAIL_TITLE_LENGTH 40
104#define MAIL_BODY_LENGTH 200
105
106enum item_types {
107        IT_HEALING = 0,
108        IT_UNKNOWN, //1
109        IT_USABLE,  //2
110        IT_ETC,     //3
111        IT_WEAPON,  //4
112        IT_ARMOR,   //5
113        IT_CARD,    //6
114        IT_PETEGG,  //7
115        IT_PETARMOR,//8
116        IT_UNKNOWN2,//9
117        IT_AMMO,    //10
118        IT_DELAYCONSUME,//11
119        IT_MAX
120};
121
122
123//Questlog system [Kevin]
124typedef enum quest_state { Q_INACTIVE, Q_ACTIVE } quest_state;
125
126struct quest_objective {
127
128        char name[NAME_LENGTH];
129        int count;
130
131};
132
133struct quest {
134
135        int quest_id;
136        quest_state state;
137        int num_objectives;
138        int time;
139        struct quest_objective objectives[MAX_QUEST_OBJECTIVES];
140
141};
142
143struct item {
144        int id;
145        short nameid;
146        short amount;
147        unsigned short equip; // location(s) where item is equipped (using enum equip_pos for bitmasking)
148        char identify;
149        char refine;
150        char attribute;
151        short card[MAX_SLOTS];
152};
153
154struct point {
155        unsigned short map;
156        short x,y;
157};
158
159struct skill {
160        unsigned short id,lv,flag;
161};
162
163struct global_reg {
164        char str[32];
165        char value[256];
166};
167
168//Holds array of global registries, used by the char server and converter.
169struct accreg {
170        int account_id, char_id;
171        int reg_num;
172        struct global_reg reg[MAX_REG_NUM];
173};
174
175//For saving status changes across sessions. [Skotlex]
176struct status_change_data {
177        unsigned short type; //SC_type
178        int val1, val2, val3, val4, tick; //Remaining duration.
179};
180
181struct s_pet {
182        int account_id;
183        int char_id;
184        int pet_id;
185        short class_;
186        short level;
187        short egg_id;//pet egg id
188        short equip;//pet equip name_id
189        short intimate;//pet friendly
190        short hungry;//pet hungry
191        char name[NAME_LENGTH];
192        char rename_flag;
193        char incuvate;
194};
195
196struct s_homunculus {   //[orn]
197        char name[NAME_LENGTH];
198        int hom_id;
199        int char_id;
200        short class_;
201        int hp,max_hp,sp,max_sp;
202        unsigned int intimacy;  //[orn]
203        short hunger;
204        struct skill hskill[MAX_HOMUNSKILL]; //albator
205        short skillpts;
206        short level;
207        unsigned int exp;
208        short rename_flag;
209        short vaporize; //albator
210        int str ;
211        int agi ;
212        int vit ;
213        int int_ ;
214        int dex ;
215        int luk ;
216};
217
218struct s_friend {
219        int account_id;
220        int char_id;
221        char name[NAME_LENGTH];
222};
223
224#ifdef HOTKEY_SAVING
225struct hotkey {
226        unsigned int id;
227        unsigned short lv;
228        unsigned char type; // 0: item, 1: skill
229};
230#endif
231
232struct mmo_charstatus {
233        int char_id;
234        int account_id;
235        int partner_id;
236        int father;
237        int mother;
238        int child;
239
240        unsigned int base_exp,job_exp;
241        int zeny;
242
243        short class_;
244        unsigned short status_point,skill_point;
245        int hp,max_hp,sp,max_sp;
246        unsigned int option;
247        short manner;
248        unsigned char karma;
249        short hair,hair_color,clothes_color;
250        int party_id,guild_id,pet_id,hom_id;
251        int fame;
252
253        short weapon; // enum weapon_type
254        short shield; // view-id
255        short head_top,head_mid,head_bottom;
256
257        char name[NAME_LENGTH];
258        unsigned int base_level,job_level;
259        short str,agi,vit,int_,dex,luk;
260        unsigned char slot,sex;
261
262        uint32 mapip;
263        uint16 mapport;
264
265        struct point last_point,save_point,memo_point[MAX_MEMOPOINTS];
266        struct item inventory[MAX_INVENTORY],cart[MAX_CART];
267        struct skill skill[MAX_SKILL];
268
269        struct s_friend friends[MAX_FRIENDS]; //New friend system [Skotlex]
270#ifdef HOTKEY_SAVING
271        struct hotkey hotkeys[MAX_HOTKEYS];
272#endif
273        bool show_equip;
274};
275
276typedef enum mail_status {
277        MAIL_NEW,
278        MAIL_UNREAD,
279        MAIL_READ,
280} mail_status;
281
282struct mail_message {
283        unsigned int id;
284        int send_id;
285        char send_name[NAME_LENGTH];
286        int dest_id;
287        char dest_name[NAME_LENGTH];
288        char title[MAIL_TITLE_LENGTH];
289        char body[MAIL_BODY_LENGTH];
290
291        mail_status status;
292        time_t timestamp; // marks when the message was sent
293
294        int zeny;
295        struct item item;
296};
297
298struct mail_data {
299        short amount;
300        bool changed, full;
301        short unchecked, unread;
302        struct mail_message msg[MAIL_MAX_INBOX];
303};
304
305struct auction_data {
306        unsigned int auction_id;
307        int seller_id;
308        char seller_name[NAME_LENGTH];
309        int buyer_id;
310        char buyer_name[NAME_LENGTH];
311       
312        struct item item;
313        // This data is required for searching, as itemdb is not read by char server
314        char item_name[ITEM_NAME_LENGTH];
315        short type;
316
317        unsigned short hours;
318        int price, buynow;
319        time_t timestamp; // auction's end time
320        int auction_end_timer;
321};
322
323struct registry {
324        int global_num;
325        struct global_reg global[GLOBAL_REG_NUM];
326        int account_num;
327        struct global_reg account[ACCOUNT_REG_NUM];
328        int account2_num;
329        struct global_reg account2[ACCOUNT_REG2_NUM];
330};
331
332struct storage {
333        int dirty;
334        int account_id;
335        short storage_status;
336        short storage_amount;
337        struct item storage_[MAX_STORAGE];
338};
339
340struct guild_storage {
341        int dirty;
342        int guild_id;
343        short storage_status;
344        short storage_amount;
345        struct item storage_[MAX_GUILD_STORAGE];
346};
347
348struct gm_account {
349        int account_id;
350        int level;
351};
352
353struct party_member {
354        int account_id;
355        int char_id;
356        char name[NAME_LENGTH];
357        unsigned short class_;
358        unsigned short map;
359        unsigned short lv;
360        unsigned leader : 1,
361                 online : 1;
362};
363
364struct party {
365        int party_id;
366        char name[NAME_LENGTH];
367        unsigned char count; //Count of online characters.
368        unsigned exp : 1,
369                                item : 2; //&1: Party-Share (round-robin), &2: pickup style: shared.
370        struct party_member member[MAX_PARTY];
371};
372
373struct map_session_data;
374struct guild_member {
375        int account_id, char_id;
376        short hair,hair_color,gender,class_,lv;
377        unsigned int exp;
378        int exp_payper;
379        short online,position;
380        char name[NAME_LENGTH];
381        struct map_session_data *sd;
382        unsigned char modified;
383};
384
385struct guild_position {
386        char name[NAME_LENGTH];
387        int mode;
388        int exp_mode;
389        unsigned char modified;
390};
391
392struct guild_alliance {
393        int opposition;
394        int guild_id;
395        char name[NAME_LENGTH];
396};
397
398struct guild_expulsion {
399        char name[NAME_LENGTH];
400        char mes[40];
401        int account_id;
402};
403
404struct guild_skill {
405        int id,lv;
406};
407
408struct guild {
409        int guild_id;
410        short guild_lv, connect_member, max_member, average_lv;
411        unsigned int exp,next_exp;
412        int skill_point;
413        char name[NAME_LENGTH],master[NAME_LENGTH];
414        struct guild_member member[MAX_GUILD];
415        struct guild_position position[MAX_GUILDPOSITION];
416        char mes1[60],mes2[120];
417        int emblem_len,emblem_id;
418        char emblem_data[2048];
419        struct guild_alliance alliance[MAX_GUILDALLIANCE];
420        struct guild_expulsion expulsion[MAX_GUILDEXPULSION];
421        struct guild_skill skill[MAX_GUILDSKILL];
422#ifndef TXT_ONLY
423        unsigned short save_flag;
424#endif
425};
426
427struct guild_castle {
428        int castle_id;
429        int mapindex;
430        char castle_name[NAME_LENGTH];
431        char castle_event[NAME_LENGTH];
432        int guild_id;
433        int economy;
434        int defense;
435        int triggerE;
436        int triggerD;
437        int nextTime;
438        int payTime;
439        int createTime;
440        int visibleC;
441        struct {
442                unsigned visible : 1;
443                int id; // object id
444        } guardian[MAX_GUARDIANS];
445        int* temp_guardians; // ids of temporary guardians (mobs)
446        int temp_guardians_max;
447};
448
449// for Brandish Spear calculations
450struct square {
451        int val1[5];
452        int val2[5];
453};
454
455struct fame_list {
456        int id;
457        int fame;
458        char name[NAME_LENGTH];
459};
460
461enum {
462        GBI_EXP =1,             // ƒMƒ‹ƒh‚ÌEXP
463        GBI_GUILDLV,            // ƒMƒ‹ƒh‚ÌLv
464        GBI_SKILLPOINT,         // ƒMƒ‹ƒh‚̃XƒLƒ‹ƒ|ƒCƒ“ƒg
465        GBI_SKILLLV,            // ƒMƒ‹ƒhƒXƒLƒ‹Lv
466};
467
468enum {
469        GMI_POSITION    =0,             // ƒƒ“ƒo[‚Ì–ðE•ύX
470        GMI_EXP,
471        GMI_HAIR,
472        GMI_HAIR_COLOR,
473        GMI_GENDER,
474        GMI_CLASS,
475        GMI_LEVEL,
476};
477
478enum {
479        GD_SKILLBASE=10000,
480        GD_APPROVAL=10000,
481        GD_KAFRACONTRACT=10001,
482        GD_GUARDRESEARCH=10002,
483        GD_GUARDUP=10003,
484        GD_EXTENSION=10004,
485        GD_GLORYGUILD=10005,
486        GD_LEADERSHIP=10006,
487        GD_GLORYWOUNDS=10007,
488        GD_SOULCOLD=10008,
489        GD_HAWKEYES=10009,
490        GD_BATTLEORDER=10010,
491        GD_REGENERATION=10011,
492        GD_RESTORE=10012,
493        GD_EMERGENCYCALL=10013,
494        GD_DEVELOPMENT=10014,
495};
496
497
498//These mark the ID of the jobs, as expected by the client. [Skotlex]
499enum {
500        JOB_NOVICE,
501        JOB_SWORDMAN,
502        JOB_MAGE,
503        JOB_ARCHER,
504        JOB_ACOLYTE,
505        JOB_MERCHANT,
506        JOB_THIEF,
507        JOB_KNIGHT,
508        JOB_PRIEST,
509        JOB_WIZARD,
510        JOB_BLACKSMITH,
511        JOB_HUNTER,
512        JOB_ASSASSIN,
513        JOB_KNIGHT2,
514        JOB_CRUSADER,
515        JOB_MONK,
516        JOB_SAGE,
517        JOB_ROGUE,
518        JOB_ALCHEMIST,
519        JOB_BARD,
520        JOB_DANCER,
521        JOB_CRUSADER2,
522        JOB_WEDDING,
523        JOB_SUPER_NOVICE,
524        JOB_GUNSLINGER,
525        JOB_NINJA,
526        JOB_XMAS,
527        JOB_SUMMER,
528        JOB_MAX_BASIC,
529
530        JOB_NOVICE_HIGH = 4001,
531        JOB_SWORDMAN_HIGH,
532        JOB_MAGE_HIGH,
533        JOB_ARCHER_HIGH,
534        JOB_ACOLYTE_HIGH,
535        JOB_MERCHANT_HIGH,
536        JOB_THIEF_HIGH,
537        JOB_LORD_KNIGHT,
538        JOB_HIGH_PRIEST,
539        JOB_HIGH_WIZARD,
540        JOB_WHITESMITH,
541        JOB_SNIPER,
542        JOB_ASSASSIN_CROSS,
543        JOB_LORD_KNIGHT2,
544        JOB_PALADIN,
545        JOB_CHAMPION,
546        JOB_PROFESSOR,
547        JOB_STALKER,
548        JOB_CREATOR,
549        JOB_CLOWN,
550        JOB_GYPSY,
551        JOB_PALADIN2,
552
553        JOB_BABY,
554        JOB_BABY_SWORDMAN,
555        JOB_BABY_MAGE,
556        JOB_BABY_ARCHER,
557        JOB_BABY_ACOLYTE,
558        JOB_BABY_MERCHANT,
559        JOB_BABY_THIEF,
560        JOB_BABY_KNIGHT,
561        JOB_BABY_PRIEST,
562        JOB_BABY_WIZARD,
563        JOB_BABY_BLACKSMITH,
564        JOB_BABY_HUNTER,
565        JOB_BABY_ASSASSIN,
566        JOB_BABY_KNIGHT2,
567        JOB_BABY_CRUSADER,
568        JOB_BABY_MONK,
569        JOB_BABY_SAGE,
570        JOB_BABY_ROGUE,
571        JOB_BABY_ALCHEMIST,
572        JOB_BABY_BARD,
573        JOB_BABY_DANCER,
574        JOB_BABY_CRUSADER2,
575        JOB_SUPER_BABY,
576
577        JOB_TAEKWON,
578        JOB_STAR_GLADIATOR,
579        JOB_STAR_GLADIATOR2,
580        JOB_SOUL_LINKER,
581        JOB_MAX,
582};
583
584// sanity checks...
585#if MAX_ZENY > INT_MAX
586#error MAX_ZENY is too big
587#endif
588
589#endif /* _MMO_H_ */
Note: See TracBrowser for help on using the browser.