-Add some src basic documentation.

-Change some remaining -1 for status ending timer.
-Move some hardcoded msg in msg_athena
-Small optimisation on battle_attr_fix

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16835 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
glighta 2012-10-29 06:33:43 +00:00
parent d4fe086e5d
commit 7a6a529548
37 changed files with 1303 additions and 875 deletions

View File

@ -6,8 +6,9 @@
// // English message // // English message
// msg_number: translated message // msg_number: translated message
// 0-499: reserved for GM commands // 0-410: reserved for GM commands
// 500-999 reserved for others // 500-900 reserved for others
// 900-1300 @atcommand
// To disable a string (%s) field, make it's max length 0: // To disable a string (%s) field, make it's max length 0:
// eg: // eg:
@ -302,12 +303,13 @@
284: Leadership transferred. 284: Leadership transferred.
285: You've become the party leader. 285: You've become the party leader.
286: There's been no change in the setting. 286: There's been no change in the setting.
287: You cannot change party leaders on this map.
//Missing stuff for @killer related commands. //Missing stuff for @killer related commands.
287: Killer state reset.
288: You are no longer killable. 288: You are no longer killable.
289: The player is now killable. 289: The player is now killable.
290: The player is no longer killable. 290: The player is no longer killable.
291: Weather effects will dispell on warp/refresh 291: Weather effects will dispell on warp/refresh
292: Killer state reset.
// Guild Castles Number // Guild Castles Number
// -------------------- // --------------------
//299: ?? Castles //299: ?? Castles
@ -374,6 +376,7 @@
362: Duel: You can't use @reject without a duel invitation. 362: Duel: You can't use @reject without a duel invitation.
363: Duel: The duel invitation has been rejected. 363: Duel: The duel invitation has been rejected.
364: Duel: You can't invite %s because he/she isn't on the same map. 364: Duel: You can't invite %s because he/she isn't on the same map.
365: Duel: Can't use %s in duel.
// @duel (part 2) // @duel (part 2)
370: -- Duels: %d/%d, Members: %d/%d, Max players: %d -- 370: -- Duels: %d/%d, Members: %d/%d, Max players: %d --
371: -- Duels: %d/%d, Members: %d/%d -- 371: -- Duels: %d/%d, Members: %d/%d --
@ -412,6 +415,30 @@
405: War of Emperium SE has been ended. 405: War of Emperium SE has been ended.
406: War of Emperium SE is currently not in progress. 406: War of Emperium SE is currently not in progress.
//chrif related
410: Need disconnection to perform change-sex request...
411: Your sex has been changed (need disconnection by the server)...
412: Your account has 'Unregistered'.
413: Your account has an 'Incorrect Password'...
414: Your account has expired.
415: Your account has been rejected from server.
416: Your account has been blocked by the GM Team.
417: Your Game's EXE file is not the latest version.
418: Your account has been prohibited to log in.
419: Server is jammed due to over populated.
420: Your account has not more authorised.
421: Your account has been totally erased.
423: Your account has been banished until
424: Login-server has been asked to %s the player '%.*s'.
425: The player '%.*s' doesn't exist.
426: Your GM level don't authorise you to %s the player '%.*s'.
427: Login-server is offline. Impossible to %s the player '%.*s'.
428: block
429: ban
430: unblock
431: unban
432: change the sex of
// Homunculus messages // Homunculus messages
450: You already have a homunculus 450: You already have a homunculus
@ -589,8 +616,18 @@
667: You're not dead. 667: You're not dead.
668: Your actual memo positions are: 668: Your actual memo positions are:
669: You broke target's weapon 669: You broke target's weapon
670: You can't leave battleground guilds.
//670-899 free 671: Friend already exists.
672: Name not found in list.
673: This action can't be performed at the moment. Please try again later.
674: Friend removed
675: Cannot send mails too fast!!.
676: Alliances cannot be made during Guild Wars!
677: Alliances cannot be broken during Guild Wars!
678: You no longer are the Guild Master.
679: You have become the Guild Master!
680: You have been recovered!
//681-899 free
//------------------------------------ //------------------------------------
// More atcommands message // More atcommands message
@ -640,8 +677,8 @@
// @jobchange // @jobchange
922: Please enter a job ID. 922: Please enter a job ID.
923: You can not change to this job by command.
//923-979 free (future jobs?) //924-979 free (future jobs?)
// @kami // @kami
980: Please enter a message (usage: @kami <message>). 980: Please enter a message (usage: @kami <message>).

View File

@ -126,7 +126,7 @@ struct char_session_data {
int found_char[MAX_CHARS]; // ids of chars on this account int found_char[MAX_CHARS]; // ids of chars on this account
char email[40]; // e-mail (default: a@a.com) by [Yor] char email[40]; // e-mail (default: a@a.com) by [Yor]
time_t expiration_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited) time_t expiration_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited)
int group_id; int group_id; // permission
uint32 version; uint32 version;
uint8 clienttype; uint8 clienttype;
char new_name[NAME_LENGTH]; char new_name[NAME_LENGTH];
@ -3367,7 +3367,7 @@ int search_mapserver(unsigned short map, uint32 ip, uint16 port)
return -1; return -1;
} }
// char_mapifの初期化処理現在はinter_mapif初期化のみ // Initialization process (currently only initialization inter_mapif)
static int char_mapif_init(int fd) static int char_mapif_init(int fd)
{ {
return inter_mapif_init(fd); return inter_mapif_init(fd);
@ -4728,7 +4728,7 @@ int do_init(int argc, char **argv)
ShowInfo("Finished reading the char-server configuration.\n"); ShowInfo("Finished reading the char-server configuration.\n");
inter_init_sql((argc > 2) ? argv[2] : inter_cfgName); // inter server テハア篳ュ inter_init_sql((argc > 2) ? argv[2] : inter_cfgName); // inter server configuration
ShowInfo("Finished reading the inter-server configuration.\n"); ShowInfo("Finished reading the inter-server configuration.\n");
ShowInfo("Initializing char server.\n"); ShowInfo("Initializing char server.\n");
@ -4764,10 +4764,10 @@ int do_init(int argc, char **argv)
add_timer_func_list(broadcast_user_count, "broadcast_user_count"); add_timer_func_list(broadcast_user_count, "broadcast_user_count");
add_timer_interval(gettick() + 1000, broadcast_user_count, 0, 0, 5 * 1000); add_timer_interval(gettick() + 1000, broadcast_user_count, 0, 0, 5 * 1000);
// ??? // Timer to clear (online_char_db)
add_timer_func_list(chardb_waiting_disconnect, "chardb_waiting_disconnect"); add_timer_func_list(chardb_waiting_disconnect, "chardb_waiting_disconnect");
// ??? // Online Data timers (checking if char still connected)
add_timer_func_list(online_data_cleanup, "online_data_cleanup"); add_timer_func_list(online_data_cleanup, "online_data_cleanup");
add_timer_interval(gettick() + 1000, online_data_cleanup, 0, 0, 600 * 1000); add_timer_interval(gettick() + 1000, online_data_cleanup, 0, 0, 600 * 1000);

View File

@ -1142,7 +1142,7 @@ int mapif_guild_castle_dataload(int fd, int sz, int *castle_ids)
// Packet received from map server // Packet received from map server
// ギルド作成要求 // Guild creation request
int mapif_parse_CreateGuild(int fd,int account_id,char *name,struct guild_member *master) int mapif_parse_CreateGuild(int fd,int account_id,char *name,struct guild_member *master)
{ {
struct guild *g; struct guild *g;
@ -1837,11 +1837,13 @@ int mapif_parse_GuildMasterChange(int fd, int guild_id, const char* name, int le
return mapif_guild_master_changed(g, g->member[0].account_id, g->member[0].char_id); return mapif_guild_master_changed(g, g->member[0].account_id, g->member[0].char_id);
} }
// map server からの通信 // Communication from the map server
// ・1パケットのみ解析すること // - Can analyzed only one by one packet
// ・パケット長データはinter.cにセットしておくこと // Data packet length that you set to inter.c
// ・パケット長チェックや、RFIFOSKIPは呼び出し元で行われるので行ってはならない //- Shouldn't do checking and packet length, RFIFOSKIP is done by the caller
// ・エラーなら0(false)、そうでないなら1(true)をかえさなければならない // Must Return
// 1 : ok
// 0 : error
int inter_guild_parse_frommap(int fd) int inter_guild_parse_frommap(int fd)
{ {
RFIFOHEAD(fd); RFIFOHEAD(fd);
@ -1871,7 +1873,7 @@ int inter_guild_parse_frommap(int fd)
return 1; return 1;
} }
// サーバーから脱退要求(キャラ削除用) //Leave request from the server (for deleting character from guild)
int inter_guild_leave(int guild_id, int account_id, int char_id) int inter_guild_leave(int guild_id, int account_id, int char_id)
{ {
return mapif_parse_GuildLeave(-1, guild_id, account_id, char_id, 0, "** Character Deleted **"); return mapif_parse_GuildLeave(-1, guild_id, account_id, char_id, 0, "** Character Deleted **");

View File

@ -324,9 +324,10 @@ int party_check_empty(struct party_data *p)
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// map serverへの通信 // Communication to the map server
// パーティ作成可否
// Create a party whether or not
int mapif_party_created(int fd,int account_id,int char_id,struct party *p) int mapif_party_created(int fd,int account_id,int char_id,struct party *p)
{ {
WFIFOHEAD(fd, 39); WFIFOHEAD(fd, 39);
@ -348,7 +349,7 @@ int mapif_party_created(int fd,int account_id,int char_id,struct party *p)
return 0; return 0;
} }
// パーティ情報見つからず //Party information not found
static void mapif_party_noinfo(int fd, int party_id, int char_id) static void mapif_party_noinfo(int fd, int party_id, int char_id)
{ {
WFIFOHEAD(fd, 12); WFIFOHEAD(fd, 12);
@ -359,7 +360,8 @@ static void mapif_party_noinfo(int fd, int party_id, int char_id)
WFIFOSET(fd,12); WFIFOSET(fd,12);
ShowWarning("int_party: info not found (party_id=%d char_id=%d)\n", party_id, char_id); ShowWarning("int_party: info not found (party_id=%d char_id=%d)\n", party_id, char_id);
} }
// パーティ情報まとめ送り
//Digest party information
static void mapif_party_info(int fd, struct party* p, int char_id) static void mapif_party_info(int fd, struct party* p, int char_id)
{ {
unsigned char buf[8 + sizeof(struct party)]; unsigned char buf[8 + sizeof(struct party)];
@ -373,7 +375,8 @@ static void mapif_party_info(int fd, struct party* p, int char_id)
else else
mapif_send(fd,buf,WBUFW(buf,2)); mapif_send(fd,buf,WBUFW(buf,2));
} }
// パーティメンバ追加可否
//Whether or not additional party members
int mapif_party_memberadded(int fd, int party_id, int account_id, int char_id, int flag) { int mapif_party_memberadded(int fd, int party_id, int account_id, int char_id, int flag) {
WFIFOHEAD(fd, 15); WFIFOHEAD(fd, 15);
WFIFOW(fd,0) = 0x3822; WFIFOW(fd,0) = 0x3822;
@ -386,7 +389,7 @@ int mapif_party_memberadded(int fd, int party_id, int account_id, int char_id, i
return 0; return 0;
} }
// パーティ設定変更通知 // Party setting change notification
int mapif_party_optionchanged(int fd,struct party *p,int account_id,int flag) int mapif_party_optionchanged(int fd,struct party *p,int account_id,int flag)
{ {
unsigned char buf[16]; unsigned char buf[16];
@ -403,7 +406,7 @@ int mapif_party_optionchanged(int fd,struct party *p,int account_id,int flag)
return 0; return 0;
} }
// パーティ脱退通知 //Withdrawal notification party
int mapif_party_withdraw(int party_id,int account_id, int char_id) { int mapif_party_withdraw(int party_id,int account_id, int char_id) {
unsigned char buf[16]; unsigned char buf[16];
@ -415,7 +418,7 @@ int mapif_party_withdraw(int party_id,int account_id, int char_id) {
return 0; return 0;
} }
// パーティマップ更新通知 //Party map update notification
int mapif_party_membermoved(struct party *p,int idx) int mapif_party_membermoved(struct party *p,int idx)
{ {
unsigned char buf[20]; unsigned char buf[20];
@ -431,7 +434,7 @@ int mapif_party_membermoved(struct party *p,int idx)
return 0; return 0;
} }
// パーティ解散通知 //Dissolution party notification
int mapif_party_broken(int party_id,int flag) int mapif_party_broken(int party_id,int flag)
{ {
unsigned char buf[16]; unsigned char buf[16];
@ -442,7 +445,8 @@ int mapif_party_broken(int party_id,int flag)
//printf("int_party: broken %d\n",party_id); //printf("int_party: broken %d\n",party_id);
return 0; return 0;
} }
// パーティ内発言
//Remarks in the party
int mapif_party_message(int party_id,int account_id,char *mes,int len, int sfd) int mapif_party_message(int party_id,int account_id,char *mes,int len, int sfd)
{ {
unsigned char buf[512]; unsigned char buf[512];
@ -456,7 +460,7 @@ int mapif_party_message(int party_id,int account_id,char *mes,int len, int sfd)
} }
//------------------------------------------------------------------- //-------------------------------------------------------------------
// map serverからの通信 // Communication from the map server
// Create Party // Create Party
@ -507,7 +511,8 @@ int mapif_parse_CreateParty(int fd, char *name, int item, int item2, struct part
return 0; return 0;
} }
// パーティ情報要求
// Party information request
static void mapif_parse_PartyInfo(int fd, int party_id, int char_id) static void mapif_parse_PartyInfo(int fd, int party_id, int char_id)
{ {
struct party_data *p; struct party_data *p;
@ -518,7 +523,8 @@ static void mapif_parse_PartyInfo(int fd, int party_id, int char_id)
else else
mapif_party_noinfo(fd, party_id, char_id); mapif_party_noinfo(fd, party_id, char_id);
} }
// パーティ追加要求
// Add a player to party request
int mapif_parse_PartyAddMember(int fd, int party_id, struct party_member *member) int mapif_parse_PartyAddMember(int fd, int party_id, struct party_member *member)
{ {
struct party_data *p; struct party_data *p;
@ -556,7 +562,7 @@ int mapif_parse_PartyAddMember(int fd, int party_id, struct party_member *member
return 0; return 0;
} }
// パーティー設定変更要求 //Party setting change request
int mapif_parse_PartyChangeOption(int fd,int party_id,int account_id,int exp,int item) int mapif_parse_PartyChangeOption(int fd,int party_id,int account_id,int exp,int item)
{ {
struct party_data *p; struct party_data *p;
@ -576,7 +582,8 @@ int mapif_parse_PartyChangeOption(int fd,int party_id,int account_id,int exp,int
inter_party_tosql(&p->party, PS_BASIC, 0); inter_party_tosql(&p->party, PS_BASIC, 0);
return 0; return 0;
} }
// パーティ脱退要求
//Request leave party
int mapif_parse_PartyLeave(int fd, int party_id, int account_id, int char_id) int mapif_parse_PartyLeave(int fd, int party_id, int account_id, int char_id)
{ {
struct party_data *p; struct party_data *p;
@ -684,7 +691,7 @@ int mapif_parse_PartyChangeMap(int fd, int party_id, int account_id, int char_id
return 0; return 0;
} }
// パーティ解散要求 //Request party dissolution
int mapif_parse_BreakParty(int fd,int party_id) int mapif_parse_BreakParty(int fd,int party_id)
{ {
struct party_data *p; struct party_data *p;
@ -697,7 +704,8 @@ int mapif_parse_BreakParty(int fd,int party_id)
mapif_party_broken(fd,party_id); mapif_party_broken(fd,party_id);
return 0; return 0;
} }
// パーティメッセージ送信
//Party sending the message
int mapif_parse_PartyMessage(int fd,int party_id,int account_id,char *mes,int len) int mapif_parse_PartyMessage(int fd,int party_id,int account_id,char *mes,int len)
{ {
return mapif_party_message(party_id,account_id,mes,len, fd); return mapif_party_message(party_id,account_id,mes,len, fd);
@ -727,11 +735,14 @@ int mapif_parse_PartyLeaderChange(int fd,int party_id,int account_id,int char_id
return 1; return 1;
} }
// map server からの通信
// ・1パケットのみ解析すること // Communication from the map server
// ・パケット長データはinter.cにセットしておくこと //-Analysis that only one packet
// ・パケット長チェックや、RFIFOSKIPは呼び出し元で行われるので行ってはならない // Data packet length is set to inter.c that you
// ・エラーなら0(false)、そうでないなら1(true)をかえさなければならない // Do NOT go and check the packet length, RFIFOSKIP is done by the caller
// Return :
// 0 : error
// 1 : ok
int inter_party_parse_frommap(int fd) int inter_party_parse_frommap(int fd)
{ {
RFIFOHEAD(fd); RFIFOHEAD(fd);
@ -751,7 +762,7 @@ int inter_party_parse_frommap(int fd)
return 1; return 1;
} }
// サーバーから脱退要求(キャラ削除用) //Leave request from the server (for delete character)
int inter_party_leave(int party_id,int account_id, int char_id) int inter_party_leave(int party_id,int account_id, int char_id)
{ {
return mapif_parse_PartyLeave(-1,party_id,account_id, char_id); return mapif_parse_PartyLeave(-1,party_id,account_id, char_id);

View File

@ -28,8 +28,8 @@
#include <sys/stat.h> // for stat/lstat/fstat - [Dekamaster/Ultimate GM Tool] #include <sys/stat.h> // for stat/lstat/fstat - [Dekamaster/Ultimate GM Tool]
#define WISDATA_TTL (60*1000) // Wisデータの生存時間(60秒) #define WISDATA_TTL (60*1000) //Wis data Time To Live (60 seconds)
#define WISDELLIST_MAX 256 // Wisデータ削除リストの要素数 #define WISDELLIST_MAX 256 // Number of elements in the list Delete data Wis
Sql* sql_handle = NULL; Sql* sql_handle = NULL;
@ -1203,11 +1203,11 @@ int inter_parse_frommap(int fd)
int cmd; int cmd;
int len = 0; int len = 0;
cmd = RFIFOW(fd,0); cmd = RFIFOW(fd,0);
// inter鯖管轄かを調べる // Check is valid packet entry
if(cmd < 0x3000 || cmd >= 0x3000 + ARRAYLENGTH(inter_recv_packet_length) || inter_recv_packet_length[cmd - 0x3000] == 0) if(cmd < 0x3000 || cmd >= 0x3000 + ARRAYLENGTH(inter_recv_packet_length) || inter_recv_packet_length[cmd - 0x3000] == 0)
return 0; return 0;
// パケット長を調べる // Check packet length
if((len = inter_check_length(fd, inter_recv_packet_length[cmd - 0x3000])) == 0) if((len = inter_check_length(fd, inter_recv_packet_length[cmd - 0x3000])) == 0)
return 2; return 2;

View File

@ -2743,7 +2743,7 @@ void* linkdb_search( struct linkdb_node** head, void *key)
while( node ) { while( node ) {
if( node->key == key ) { if( node->key == key ) {
if( node->prev && n > 5 ) { if( node->prev && n > 5 ) {
// 処理効率改善の為にheadに移動させる //Moving the head in order to improve processing efficiency
if(node->prev) node->prev->next = node->next; if(node->prev) node->prev->next = node->next;
if(node->next) node->next->prev = node->prev; if(node->next) node->next->prev = node->prev;
node->next = *head; node->next = *head;
@ -2790,7 +2790,7 @@ void linkdb_replace( struct linkdb_node** head, void *key, void *data )
while( node ) { while( node ) {
if( node->key == key ) { if( node->key == key ) {
if( node->prev && n > 5 ) { if( node->prev && n > 5 ) {
// 処理効率改善の為にheadに移動させる //Moving the head in order to improve processing efficiency
if(node->prev) node->prev->next = node->next; if(node->prev) node->prev->next = node->next;
if(node->next) node->next->prev = node->prev; if(node->next) node->next->prev = node->prev;
node->next = *head; node->next = *head;
@ -2804,7 +2804,7 @@ void linkdb_replace( struct linkdb_node** head, void *key, void *data )
node = node->next; node = node->next;
n++; n++;
} }
// 見つからないので挿入 //Insert because it can not find
linkdb_insert( head, key, data ); linkdb_insert( head, key, data );
} }

View File

@ -536,15 +536,15 @@ struct fame_list {
char name[NAME_LENGTH]; char name[NAME_LENGTH];
}; };
enum { enum { //Change Guild Infos
GBI_EXP =1, // ギルドのEXP GBI_EXP =1, // Guild Experience (EXP)
GBI_GUILDLV, // ギルドのLv GBI_GUILDLV, // Guild level
GBI_SKILLPOINT, // ギルドのスキルポイント GBI_SKILLPOINT, // Guild skillpoints
GBI_SKILLLV, // ギルドスキルLv GBI_SKILLLV, // Guild skilllv ?? seem unused
}; };
enum { enum { //Change Member Infos
GMI_POSITION =0, // メンバーの役職変更 GMI_POSITION =0,
GMI_EXP, GMI_EXP,
GMI_HAIR, GMI_HAIR,
GMI_HAIR_COLOR, GMI_HAIR_COLOR,

View File

@ -1151,7 +1151,7 @@ ACMD_FUNC(jobchange)
if (job == 13 || job == 21 || job == 22 || job == 26 || job == 27 || job == 4014 || job == 4022 || job == 4036 || job == 4044 || job == 4048 if (job == 13 || job == 21 || job == 22 || job == 26 || job == 27 || job == 4014 || job == 4022 || job == 4036 || job == 4044 || job == 4048
|| (job >= JOB_RUNE_KNIGHT2 && job <= JOB_MECHANIC_T2) || (job >= JOB_BABY_RUNE2 && job <= JOB_BABY_MECHANIC2) || (job >= JOB_RUNE_KNIGHT2 && job <= JOB_MECHANIC_T2) || (job >= JOB_BABY_RUNE2 && job <= JOB_BABY_MECHANIC2)
) // Deny direct transformation into dummy jobs ) // Deny direct transformation into dummy jobs
{clif_displaymessage(fd, "You can not change to this job by command."); {clif_displaymessage(fd, msg_txt(923)); //"You can not change to this job by command."
return 0;} return 0;}
if (pcdb_checkid(job)) if (pcdb_checkid(job))
@ -5196,7 +5196,7 @@ ACMD_FUNC(killer)
if(sd->state.killer) if(sd->state.killer)
clif_displaymessage(fd, msg_txt(241)); clif_displaymessage(fd, msg_txt(241));
else { else {
clif_displaymessage(fd, msg_txt(287)); clif_displaymessage(fd, msg_txt(292));
pc_stop_attack(sd); pc_stop_attack(sd);
} }
return 0; return 0;
@ -7461,17 +7461,17 @@ ACMD_FUNC(size)
int size = 0; int size = 0;
nullpo_retr(-1, sd); nullpo_retr(-1, sd);
size = cap_value(atoi(message),0,2); size = cap_value(atoi(message),SZ_SMALL,SZ_BIG);
if(sd->state.size) { if(sd->state.size) {
sd->state.size = 0; sd->state.size = SZ_SMALL;
pc_setpos(sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_TELEPORT); pc_setpos(sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_TELEPORT);
} }
sd->state.size = size; sd->state.size = size;
if( size == 1 ) if( size == SZ_MEDIUM )
clif_specialeffect(&sd->bl,420,AREA); clif_specialeffect(&sd->bl,420,AREA);
else if( size == 2 ) else if( size == SZ_BIG )
clif_specialeffect(&sd->bl,422,AREA); clif_specialeffect(&sd->bl,422,AREA);
clif_displaymessage(fd, msg_txt(1303)); // Size change applied. clif_displaymessage(fd, msg_txt(1303)); // Size change applied.
@ -7491,14 +7491,14 @@ ACMD_FUNC(sizeall)
for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) { for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) {
if( pl_sd->state.size != size ) { if( pl_sd->state.size != size ) {
if( pl_sd->state.size ) { if( pl_sd->state.size ) {
pl_sd->state.size = 0; pl_sd->state.size = SZ_SMALL;
pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, CLR_TELEPORT); pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, CLR_TELEPORT);
} }
pl_sd->state.size = size; pl_sd->state.size = size;
if( size == 1 ) if( size == SZ_MEDIUM )
clif_specialeffect(&pl_sd->bl,420,AREA); clif_specialeffect(&pl_sd->bl,420,AREA);
else if( size == 2 ) else if( size == SZ_BIG )
clif_specialeffect(&pl_sd->bl,422,AREA); clif_specialeffect(&pl_sd->bl,422,AREA);
} }
} }
@ -7528,19 +7528,19 @@ ACMD_FUNC(sizeguild)
return -1; return -1;
} }
size = cap_value(size,0,2); size = cap_value(size,SZ_SMALL,SZ_BIG);
for( i = 0; i < g->max_member; i++ ) { for( i = 0; i < g->max_member; i++ ) {
if( (pl_sd = g->member[i].sd) && pl_sd->state.size != size ) { if( (pl_sd = g->member[i].sd) && pl_sd->state.size != size ) {
if( pl_sd->state.size ) { if( pl_sd->state.size ) {
pl_sd->state.size = 0; pl_sd->state.size = SZ_SMALL;
pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, CLR_TELEPORT); pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, CLR_TELEPORT);
} }
pl_sd->state.size = size; pl_sd->state.size = size;
if( size == 1 ) if( size == SZ_MEDIUM )
clif_specialeffect(&pl_sd->bl,420,AREA); clif_specialeffect(&pl_sd->bl,420,AREA);
else if( size == 2 ) else if( size == SZ_BIG )
clif_specialeffect(&pl_sd->bl,422,AREA); clif_specialeffect(&pl_sd->bl,422,AREA);
} }
} }

View File

@ -197,7 +197,7 @@ struct block_list* battle_getenemyarea(struct block_list *src, int x, int y, int
return bl_list[rnd()%c]; return bl_list[rnd()%c];
} }
// ダ??[ジの遅延 // Dammage delayed info
struct delay_damage { struct delay_damage {
int src_id; int src_id;
int target_id; int target_id;
@ -350,29 +350,38 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
} }
} }
} }
if( tsc && tsc->count ) { if( tsc && tsc->count ) { //since an atk can only have one type let's optimise this a bit
if( tsc->data[SC_SPIDERWEB] && atk_elem == ELE_FIRE ){ switch(atk_elem){
case ELE_FIRE:
if (tsc->data[SC_SPIDERWEB]) {
tsc->data[SC_SPIDERWEB]->val1 = 0; // free to move now tsc->data[SC_SPIDERWEB]->val1 = 0; // free to move now
if( tsc->data[SC_SPIDERWEB]->val2-- > 0 ) if( tsc->data[SC_SPIDERWEB]->val2-- > 0 )
damage <<= 1; // double damage damage <<= 1; // double damage
if( tsc->data[SC_SPIDERWEB]->val2 == 0 ) if( tsc->data[SC_SPIDERWEB]->val2 == 0 )
status_change_end(target, SC_SPIDERWEB, INVALID_TIMER); status_change_end(target, SC_SPIDERWEB, INVALID_TIMER);
} }
if( tsc->data[SC_ORATIO] && atk_elem == ELE_HOLY ) if( tsc->data[SC_THORNSTRAP])
ratio += tsc->data[SC_ORATIO]->val1 * 2; status_change_end(target, SC_THORNSTRAP, INVALID_TIMER);
if( tsc->data[SC_VENOMIMPRESS] && atk_elem == ELE_POISON ) if( tsc->data[SC_FIRE_CLOAK_OPTION])
ratio += tsc->data[SC_VENOMIMPRESS]->val2;
if( tsc->data[SC_THORNSTRAP] && atk_elem == ELE_FIRE )
status_change_end(target, SC_THORNSTRAP, -1);
if( tsc->data[SC_FIRE_CLOAK_OPTION] && atk_elem == ELE_FIRE )
damage -= damage * tsc->data[SC_FIRE_CLOAK_OPTION]->val2 / 100; damage -= damage * tsc->data[SC_FIRE_CLOAK_OPTION]->val2 / 100;
if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB){ if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB){
if( atk_elem == ELE_WIND)
damage = damage * 150 / 100;
if( atk_elem == ELE_FIRE )
status_change_end(target, SC_CRYSTALIZE, INVALID_TIMER); status_change_end(target, SC_CRYSTALIZE, INVALID_TIMER);
} }
break;
case ELE_HOLY:
if( tsc->data[SC_ORATIO])
ratio += tsc->data[SC_ORATIO]->val1 * 2;
break;
case ELE_POISON:
if( tsc->data[SC_VENOMIMPRESS])
ratio += tsc->data[SC_VENOMIMPRESS]->val2;
break;
case ELE_WIND:
if( tsc->data[SC_CRYSTALIZE] && target->type != BL_MOB)
damage = damage * 150 / 100;
break;
} }
} //end tsc check
if( src && src->type == BL_PC ){ if( src && src->type == BL_PC ){
struct map_session_data *sd = BL_CAST(BL_PC, src); struct map_session_data *sd = BL_CAST(BL_PC, src);
int s; int s;
@ -395,7 +404,9 @@ int battle_attr_fix(struct block_list *src, struct block_list *target, int damag
} }
/*========================================== /*==========================================
* ??[??I計算 * Check dammage trough status.
* ATK may be MISS, BLOCKED FAIL, reduc, increase, end status...
* After this we apply bg/gvg reduction
*------------------------------------------*/ *------------------------------------------*/
int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damage *d,int damage,int skill_num,int skill_lv) int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damage *d,int damage,int skill_num,int skill_lv)
{ {
@ -1002,7 +1013,7 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama
} }
/*========================================== /*==========================================
* HP/SP吸収の計算 * HP/SP drain calculation
*------------------------------------------*/ *------------------------------------------*/
static int battle_calc_drain(int damage, int rate, int per) static int battle_calc_drain(int damage, int rate, int per)
{ {
@ -1021,7 +1032,7 @@ static int battle_calc_drain(int damage, int rate, int per)
} }
/*========================================== /*==========================================
* ?C練ダ??[ * Passif skill dammages increases
*------------------------------------------*/ *------------------------------------------*/
int battle_addmastery(struct map_session_data *sd,struct block_list *target,int dmg,int type) int battle_addmastery(struct map_session_data *sd,struct block_list *target,int dmg,int type)
{ {
@ -2158,7 +2169,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
&& sd->inventory_data[index]->type == IT_WEAPON ) && sd->inventory_data[index]->type == IT_WEAPON )
skillratio += max(10000 - sd->inventory_data[index]->weight, 0) / 10; skillratio += max(10000 - sd->inventory_data[index]->weight, 0) / 10;
skillratio += 50 * pc_checkskill(sd,LK_SPIRALPIERCE); skillratio += 50 * pc_checkskill(sd,LK_SPIRALPIERCE);
} // (1 + [(Caster Base Level - 100) / 200]) } // (1 + [(Casters Base Level - 100) / 200])
skillratio = skillratio * (100 + (status_get_lv(src)-100) / 2) / 100; skillratio = skillratio * (100 + (status_get_lv(src)-100) / 2) / 100;
break; break;
case RK_WINDCUTTER: case RK_WINDCUTTER:
@ -2333,7 +2344,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
skillratio += -100 + 15 * 200; skillratio += -100 + 15 * 200;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case LG_SHIELDSPELL:// [(Caster痴 Base Level x 4) + (Shield DEF x 10) + (Caster痴 VIT x 2)] % case LG_SHIELDSPELL:// [(Casters Base Level x 4) + (Shield DEF x 10) + (Casters VIT x 2)] %
if( sd ) { if( sd ) {
struct item_data *shield_data = sd->inventory_data[sd->equip_index[EQI_HAND_L]]; struct item_data *shield_data = sd->inventory_data[sd->equip_index[EQI_HAND_L]];
skillratio = status_get_lv(src) * 4 + status_get_vit(src) * 2; skillratio = status_get_lv(src) * 4 + status_get_vit(src) * 2;
@ -2374,34 +2385,34 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case SR_SKYNETBLOW: case SR_SKYNETBLOW:
//ATK [{(Skill Level x 80) + (Caster AGI)} x Caster Base Level / 100] % //ATK [{(Skill Level x 80) + (Caster AGI)} x Caster Base Level / 100] %
skillratio = 80 * skill_lv + sstatus->agi; skillratio = 80 * skill_lv + sstatus->agi;
if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_DRAGONCOMBO )//ATK [{(Skill Level x 100) + (Caster AGI) + 150} x Caster Base Level / 100] % if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_DRAGONCOMBO )//ATK [{(Skill Level x 100) + (Caster AGI) + 150} x Caster Base Level / 100] %
skillratio = 100 * skill_lv + sstatus->agi + 150; skillratio = 100 * skill_lv + sstatus->agi + 150;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case SR_EARTHSHAKER: case SR_EARTHSHAKER:
if( tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING] || // [(Skill Level x 150) x (Caster Base Level / 100) + (Caster INT x 3)] % if( tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING] || // [(Skill Level x 150) x (Caster Base Level / 100) + (Caster INT x 3)] %
tsc->data[SC_CHASEWALK] || tsc->data[SC_CLOAKINGEXCEED] || tsc->data[SC__INVISIBILITY]) ){ tsc->data[SC_CHASEWALK] || tsc->data[SC_CLOAKINGEXCEED] || tsc->data[SC__INVISIBILITY]) ){
skillratio = 150 * skill_lv; skillratio = 150 * skill_lv;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
skillratio += sstatus->int_ * 3; skillratio += sstatus->int_ * 3;
}else{ //[(Skill Level x 50) x (Caster Base Level / 100) + (Caster INT x 2)] % }else{ //[(Skill Level x 50) x (Caster Base Level / 100) + (Caster INT x 2)] %
skillratio += 50 * (skill_lv-2); skillratio += 50 * (skill_lv-2);
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
skillratio += sstatus->int_ * 2; skillratio += sstatus->int_ * 2;
} }
break; break;
case SR_FALLENEMPIRE:// ATK [(Skill Level x 150 + 100) x Caster Base Level / 150] % case SR_FALLENEMPIRE:// ATK [(Skill Level x 150 + 100) x Caster Base Level / 150] %
skillratio += 150 *skill_lv; skillratio += 150 *skill_lv;
RE_LVL_DMOD(150); RE_LVL_DMOD(150);
break; break;
case SR_TIGERCANNON:// ATK [((Caster consumed HP + SP) / 4) x Caster Base Level / 100] % case SR_TIGERCANNON:// ATK [((Caster consumed HP + SP) / 4) x Caster Base Level / 100] %
{ {
int hp = sstatus->max_hp * (10 + 2 * skill_lv) / 100, int hp = sstatus->max_hp * (10 + 2 * skill_lv) / 100,
sp = sstatus->max_sp * (6 + skill_lv) / 100; sp = sstatus->max_sp * (6 + skill_lv) / 100;
skillratio = (hp+sp) / 4; skillratio = (hp+sp) / 4;
if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE ) // ATK [((Caster consumed HP + SP) / 2) x Caster Base Level / 100] % if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE ) // ATK [((Caster consumed HP + SP) / 2) x Caster Base Level / 100] %
skillratio = (hp+sp) / 2; skillratio = (hp+sp) / 2;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
} }
@ -2415,15 +2426,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
RE_LVL_DMOD(150); RE_LVL_DMOD(150);
break; break;
case SR_KNUCKLEARROW: case SR_KNUCKLEARROW:
if( wflag&4 ){ // ATK [(Skill Level x 150) + (1000 x Target current weight / Maximum weight) + (Target Base Level x 5) x (Caster Base Level / 150)] % if( wflag&4 ){ // ATK [(Skill Level x 150) + (1000 x Target current weight / Maximum weight) + (Target Base Level x 5) x (Caster Base Level / 150)] %
skillratio = 150 * skill_lv + status_get_lv(target) * 5 * (status_get_lv(src) / 100) ; skillratio = 150 * skill_lv + status_get_lv(target) * 5 * (status_get_lv(src) / 100) ;
if( tsd && tsd->weight ) if( tsd && tsd->weight )
skillratio += 100 * (tsd->weight / tsd->max_weight); skillratio += 100 * (tsd->weight / tsd->max_weight);
}else // ATK [(Skill Level x 100 + 500) x Caster Base Level / 100] % }else // ATK [(Skill Level x 100 + 500) x Caster Base Level / 100] %
skillratio += 400 + (100 * skill_lv); skillratio += 400 + (100 * skill_lv);
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case SR_WINDMILL: // ATK [(Caster Base Level + Caster DEX) x Caster Base Level / 100] % case SR_WINDMILL: // ATK [(Caster Base Level + Caster DEX) x Caster Base Level / 100] %
skillratio = status_get_lv(src) + sstatus->dex; skillratio = status_get_lv(src) + sstatus->dex;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
@ -2443,14 +2454,14 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
skillratio += 300 * skill_lv - 100; skillratio += 300 * skill_lv - 100;
RE_LVL_DMOD(150); RE_LVL_DMOD(150);
break; break;
case SR_RIDEINLIGHTNING: // ATK [{(Skill Level x 200) + Additional Damage} x Caster Base Level / 100] % case SR_RIDEINLIGHTNING: // ATK [{(Skill Level x 200) + Additional Damage} x Caster Base Level / 100] %
if( (sstatus->rhw.ele) == ELE_WIND || (sstatus->lhw.ele) == ELE_WIND ) if( (sstatus->rhw.ele) == ELE_WIND || (sstatus->lhw.ele) == ELE_WIND )
skillratio += skill_lv * 50; skillratio += skill_lv * 50;
skillratio += -100 + 200 * skill_lv; skillratio += -100 + 200 * skill_lv;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case WM_REVERBERATION_MELEE: case WM_REVERBERATION_MELEE:
// ATK [{(Skill Level x 100) + 300} x Caster Base Level / 100] // ATK [{(Skill Level x 100) + 300} x Caster Base Level / 100]
skillratio += 200 + 100 * pc_checkskill(sd, WM_REVERBERATION); skillratio += 200 + 100 * pc_checkskill(sd, WM_REVERBERATION);
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
@ -2468,7 +2479,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
skillratio += 400; skillratio += 400;
break; break;
case GN_CART_TORNADO: case GN_CART_TORNADO:
// ATK [( Skill Level x 50 ) + ( Cart Weight / ( 150 - Caster Base STR ))] + ( Cart Remodeling Skill Level x 50 )] % // ATK [( Skill Level x 50 ) + ( Cart Weight / ( 150 - Caster Base STR ))] + ( Cart Remodeling Skill Level x 50 )] %
skillratio = 50 * skill_lv; skillratio = 50 * skill_lv;
if( sd && sd->cart_weight) if( sd && sd->cart_weight)
skillratio += sd->cart_weight/10 / max(150-sstatus->str,1) + pc_checkskill(sd, GN_REMODELING_CART) * 50; skillratio += sd->cart_weight/10 / max(150-sstatus->str,1) + pc_checkskill(sd, GN_REMODELING_CART) * 50;
@ -2587,7 +2598,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if(sd) if(sd)
ATK_ADD( 40 * pc_checkskill(sd, RA_RESEARCHTRAP) ); ATK_ADD( 40 * pc_checkskill(sd, RA_RESEARCHTRAP) );
break; break;
case RA_WUGDASH://(Caster Current Weight x 10 / 8) case RA_WUGDASH ://(Caster Current Weight x 10 / 8)
if( sd && sd->weight ) if( sd && sd->weight )
ATK_ADD( sd->weight / 8 ); ATK_ADD( sd->weight / 8 );
case RA_WUGSTRIKE: case RA_WUGSTRIKE:
@ -2609,13 +2620,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
ATK_ADD ( (sstatus->max_sp * (1 + skill_lv * 2 / 10)) + 40 * status_get_lv(src) ); ATK_ADD ( (sstatus->max_sp * (1 + skill_lv * 2 / 10)) + 40 * status_get_lv(src) );
} }
break; break;
case SR_TIGERCANNON: // (Tiger Cannon skill level x 240) + (Target Base Level x 40) case SR_TIGERCANNON: // (Tiger Cannon skill level x 240) + (Target Base Level x 40)
ATK_ADD( skill_lv * 240 + status_get_lv(target) * 40 ); ATK_ADD( skill_lv * 240 + status_get_lv(target) * 40 );
if( sc && sc->data[SC_COMBO] if( sc && sc->data[SC_COMBO]
&& sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE ) // (Tiger Cannon skill level x 500) + (Target Base Level x 40) && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE ) // (Tiger Cannon skill level x 500) + (Target Base Level x 40)
ATK_ADD( skill_lv * 500 + status_get_lv(target) * 40 ); ATK_ADD( skill_lv * 500 + status_get_lv(target) * 40 );
break; break;
case SR_FALLENEMPIRE:// [(Target Size value + Skill Level - 1) x Caster STR] + [(Target current weight x Caster DEX / 120)] case SR_FALLENEMPIRE:// [(Target Size value + Skill Level - 1) x Caster STR] + [(Target current weight x Caster DEX / 120)]
ATK_ADD( ((tstatus->size+1)*2 + skill_lv - 1) * sstatus->str); ATK_ADD( ((tstatus->size+1)*2 + skill_lv - 1) * sstatus->str);
if( tsd && tsd->weight ){ if( tsd && tsd->weight ){
ATK_ADD( (tsd->weight/10) * sstatus->dex / 120 ); ATK_ADD( (tsd->weight/10) * sstatus->dex / 120 );
@ -2854,7 +2865,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
ATK_ADD(10*sc->data[SC_GN_CARTBOOST]->val1); ATK_ADD(10*sc->data[SC_GN_CARTBOOST]->val1);
if(sc->data[SC_GT_CHANGE] && sc->data[SC_GT_CHANGE]->val2){ if(sc->data[SC_GT_CHANGE] && sc->data[SC_GT_CHANGE]->val2){
struct block_list *bl; // ATK increase: ATK [{(Caster DEX / 4) + (Caster STR / 2)} x Skill Level / 5] struct block_list *bl; // ATK increase: ATK [{(Caster DEX / 4) + (Caster STR / 2)} x Skill Level / 5]
if( (bl = map_id2bl(sc->data[SC_GT_CHANGE]->val2)) ) if( (bl = map_id2bl(sc->data[SC_GT_CHANGE]->val2)) )
ATK_ADD( ( status_get_dex(bl)/4 + status_get_str(bl)/2 ) * sc->data[SC_GT_CHANGE]->val1 / 5 ); ATK_ADD( ( status_get_dex(bl)/4 + status_get_str(bl)/2 ) * sc->data[SC_GT_CHANGE]->val1 / 5 );
} }
@ -3710,8 +3721,8 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case WL_HELLINFERNO: case WL_HELLINFERNO:
skillratio = 300 * skill_lv; skillratio = 300 * skill_lv;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
// Shadow: MATK [{( Skill Level x 300 ) x ( Caster Base Level / 100 ) x 4/5 }] % // Shadow: MATK [{( Skill Level x 300 ) x ( Caster Base Level / 100 ) x 4/5 }] %
// Fire : MATK [{( Skill Level x 300 ) x ( Caster Base Level / 100 ) /5 }] % // Fire : MATK [{( Skill Level x 300 ) x ( Caster Base Level / 100 ) /5 }] %
if( mflag&ELE_DARK ){ skillratio *= 4; s_ele = ELE_DARK; } if( mflag&ELE_DARK ){ skillratio *= 4; s_ele = ELE_DARK; }
skillratio /= 5; skillratio /= 5;
break; break;
@ -3755,7 +3766,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
skillratio = (skillratio + 200) * skill_lv; skillratio = (skillratio + 200) * skill_lv;
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
case LG_SHIELDSPELL:// [(Caster痴 Base Level x 4) + (Shield MDEF x 100) + (Caster痴 INT x 2)] % case LG_SHIELDSPELL:// [(Casters Base Level x 4) + (Shield MDEF x 100) + (Casters INT x 2)] %
if( sd ) { if( sd ) {
skillratio = status_get_lv(src) * 4 + sd->bonus.shieldmdef * 100 + status_get_int(src) * 2; skillratio = status_get_lv(src) * 4 + sd->bonus.shieldmdef * 100 + status_get_int(src) * 2;
} else } else
@ -3768,7 +3779,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
skillratio += 50 * skill_lv; skillratio += 50 * skill_lv;
break; break;
case WM_REVERBERATION_MAGIC: case WM_REVERBERATION_MAGIC:
// MATK [{(Skill Level x 100) + 100} x Caster Base Level / 100] % // MATK [{(Skill Level x 100) + 100} x Casters Base Level / 100] %
skillratio += 100 * (sd ? pc_checkskill(sd, WM_REVERBERATION) : 1); skillratio += 100 * (sd ? pc_checkskill(sd, WM_REVERBERATION) : 1);
RE_LVL_DMOD(100); RE_LVL_DMOD(100);
break; break;
@ -4052,7 +4063,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
} }
/*========================================== /*==========================================
* ??[ * Calculate Misc dammage for skillid
*------------------------------------------*/ *------------------------------------------*/
struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int mflag) struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *target,int skill_num,int skill_lv,int mflag)
{ {
@ -4235,7 +4246,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
md.damage = 100 + 200 * skill_lv + sstatus->int_; md.damage = 100 + 200 * skill_lv + sstatus->int_;
break; break;
case GN_HELLS_PLANT_ATK: case GN_HELLS_PLANT_ATK:
//[{( Hell Plant Skill Level x Caster痴 Base Level ) x 10 } + {( Caster痴 INT x 7 ) / 2 } x { 18 + ( Caster痴 Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level )) //[{( Hell Plant Skill Level x Casters Base Level ) x 10 } + {( Casters INT x 7 ) / 2 } x { 18 + ( Casters Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level ))
md.damage = ( skill_lv * status_get_lv(src) * 10 ) + ( sstatus->int_ * 7 / 2 ) * ( 18 + (sd?sd->status.job_level:0) / 4 ) * ( 5 / (10 - (sd?pc_checkskill(sd,AM_CANNIBALIZE):0)) ); md.damage = ( skill_lv * status_get_lv(src) * 10 ) + ( sstatus->int_ * 7 / 2 ) * ( 18 + (sd?sd->status.job_level:0) / 4 ) * ( 5 / (10 - (sd?pc_checkskill(sd,AM_CANNIBALIZE):0)) );
break; break;
case KO_HAPPOKUNAI: case KO_HAPPOKUNAI:
@ -4395,7 +4406,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
return md; return md;
} }
/*========================================== /*==========================================
* ??[?<EFBFBD>? * Battle main entry, from skill_attack
*------------------------------------------*/ *------------------------------------------*/
struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int count) struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int count)
{ {
@ -4435,7 +4446,7 @@ int battle_calc_return_damage(struct block_list* bl, struct block_list *src, int
rdamage = (*dmg) * sc->data[SC_REFLECTDAMAGE]->val2 / 100; rdamage = (*dmg) * sc->data[SC_REFLECTDAMAGE]->val2 / 100;
if( rdamage > max_damage ) rdamage = max_damage; if( rdamage > max_damage ) rdamage = max_damage;
}else if( sc && sc->data[SC_CRESCENTELBOW] && !is_boss(src) && rnd()%100 < sc->data[SC_CRESCENTELBOW]->val2 ){ }else if( sc && sc->data[SC_CRESCENTELBOW] && !is_boss(src) && rnd()%100 < sc->data[SC_CRESCENTELBOW]->val2 ){
//ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}] //ATK [{(Target HP / 100) x Skill Level} x Caster Base Level / 125] % + [Received damage x {1 + (Skill Level x 0.2)}]
int ratio = (status_get_hp(src) / 100) * sc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(bl) / 125; int ratio = (status_get_hp(src) / 100) * sc->data[SC_CRESCENTELBOW]->val1 * status_get_lv(bl) / 125;
if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK if (ratio > 5000) ratio = 5000; // Maximum of 5000% ATK
rdamage = rdamage * ratio / 100 + (*dmg) * (10 + sc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10; rdamage = rdamage * ratio / 100 + (*dmg) * (10 + sc->data[SC_CRESCENTELBOW]->val1 * 20 / 10) / 10;
@ -4564,7 +4575,7 @@ int battle_damage_area( struct block_list *bl, va_list ap) {
return 0; return 0;
} }
/*========================================== /*==========================================
* ??U撃?<EFBFBD>? * Do a basic physical attack (call trough unit_attack_timer)
*------------------------------------------*/ *------------------------------------------*/
enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* target, unsigned int tick, int flag) { enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* target, unsigned int tick, int flag) {
struct map_session_data *sd = NULL, *tsd = NULL; struct map_session_data *sd = NULL, *tsd = NULL;
@ -4631,13 +4642,12 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
} }
} }
} }
if (sc && sc->count) {
if (sc && sc->data[SC_CLOAKING] && !(sc->data[SC_CLOAKING]->val4&2)) if (sc->data[SC_CLOAKING] && !(sc->data[SC_CLOAKING]->val4 & 2))
status_change_end(src, SC_CLOAKING, INVALID_TIMER); status_change_end(src, SC_CLOAKING, INVALID_TIMER);
else if (sc->data[SC_CLOAKINGEXCEED] && !(sc->data[SC_CLOAKINGEXCEED]->val4 & 2))
if (sc && sc->data[SC_CLOAKINGEXCEED] && !(sc->data[SC_CLOAKINGEXCEED]->val4&2))
status_change_end(src, SC_CLOAKINGEXCEED, INVALID_TIMER); status_change_end(src, SC_CLOAKINGEXCEED, INVALID_TIMER);
}
if( tsc && tsc->data[SC_AUTOCOUNTER] && status_check_skilluse(target, src, KN_AUTOCOUNTER, 1) ) if( tsc && tsc->data[SC_AUTOCOUNTER] && status_check_skilluse(target, src, KN_AUTOCOUNTER, 1) )
{ {
int dir = map_calc_dir(target,src->x,src->y); int dir = map_calc_dir(target,src->x,src->y);
@ -5123,7 +5133,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
//All else not specified is an invalid target. //All else not specified is an invalid target.
default: default:
return 0; return 0;
} } //end switch actual target
switch( t_bl->type ) switch( t_bl->type )
{ //Checks on target master { //Checks on target master
@ -5152,7 +5162,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
break; break;
} }
default: break; //other type doesn't have slave yet default: break; //other type doesn't have slave yet
} } //end switch master target
switch( src->type ) { //Checks on actual src type switch( src->type ) { //Checks on actual src type
case BL_PET: case BL_PET:
@ -5179,7 +5189,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->class_ == MOBID_EMPERIUM && flag&BCT_ENEMY) if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->class_ == MOBID_EMPERIUM && flag&BCT_ENEMY)
return 0; //mercenary may not attack Emperium return 0; //mercenary may not attack Emperium
break; break;
} } //end switch actual src
switch( s_bl->type ) switch( s_bl->type )
{ //Checks on source master { //Checks on source master
@ -5233,7 +5243,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if (t_bl->type != s_bl->type) if (t_bl->type != s_bl->type)
state |= BCT_ENEMY; state |= BCT_ENEMY;
break; break;
} } //end switch on src master
if( (flag&BCT_ALL) == BCT_ALL ) if( (flag&BCT_ALL) == BCT_ALL )
{ //All actually stands for all attackable chars { //All actually stands for all attackable chars
@ -5293,7 +5303,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
) )
state &= ~BCT_ENEMY; state &= ~BCT_ENEMY;
} }
} }//end map_flag_vs chk rivality
else else
{ //Non pvp/gvg, check party/guild settings. { //Non pvp/gvg, check party/guild settings.
if( flag&BCT_PARTY || state&BCT_ENEMY ) if( flag&BCT_PARTY || state&BCT_ENEMY )
@ -5309,7 +5319,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if(s_guild && t_guild && (s_guild == t_guild || guild_isallied(s_guild, t_guild))) if(s_guild && t_guild && (s_guild == t_guild || guild_isallied(s_guild, t_guild)))
state |= BCT_GUILD; state |= BCT_GUILD;
} }
} } //end non pvp/gvg chk rivality
if( !state ) //If not an enemy, nor a guild, nor party, nor yourself, it's neutral. if( !state ) //If not an enemy, nor a guild, nor party, nor yourself, it's neutral.
state = BCT_NEUTRAL; state = BCT_NEUTRAL;
@ -5320,7 +5330,8 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
return (flag&state)?1:-1; return (flag&state)?1:-1;
} }
/*========================================== /*==========================================
* * Check if can attack from this range
* Basic check then calling path_search for obstacle etc..
*------------------------------------------*/ *------------------------------------------*/
bool battle_check_range(struct block_list *src, struct block_list *bl, int range) bool battle_check_range(struct block_list *src, struct block_list *bl, int range)
{ {

View File

@ -14,24 +14,24 @@ typedef enum damage_lv {
ATK_DEF // attack connected ATK_DEF // attack connected
} damage_lv; } damage_lv;
// ダメージ // dammage structure
struct Damage { struct Damage {
int damage,damage2; int damage,damage2; //right, left dmg
int type,div_; int type,div_; //chk clif_damage for type @TODO add an enum ? ; nb of hit
int amotion,dmotion; int amotion,dmotion;
int blewcount; int blewcount; //nb of knockback
int flag; int flag; //chk BF_* flag, (enum below)
enum damage_lv dmg_lv; //ATK_LUCKY,ATK_FLEE,ATK_DEF enum damage_lv dmg_lv; //ATK_LUCKY,ATK_FLEE,ATK_DEF
}; };
// 属性表読み込みはpc.c、battle_attr_fixで使用 //(Used in read pc.c,) attribute table (battle_attr_fix)
extern int attr_fix_table[4][10][10]; extern int attr_fix_table[4][10][10];
struct map_session_data; struct map_session_data;
struct mob_data; struct mob_data;
struct block_list; struct block_list;
// ダメージ計算 // Damage Calculation
struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int count); struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int count);
@ -42,12 +42,12 @@ void battle_drain(struct map_session_data *sd, struct block_list *tbl, int rdama
int battle_attr_ratio(int atk_elem,int def_type, int def_lv); int battle_attr_ratio(int atk_elem,int def_type, int def_lv);
int battle_attr_fix(struct block_list *src, struct block_list *target, int damage,int atk_elem,int def_type, int def_lv); int battle_attr_fix(struct block_list *src, struct block_list *target, int damage,int atk_elem,int def_type, int def_lv);
// ダメージ最終計算 // Final calculation Damage
int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damage *d,int damage,int skill_num,int skill_lv); int battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damage *d,int damage,int skill_num,int skill_lv);
int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag); int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag);
int battle_calc_bg_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag); int battle_calc_bg_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag);
enum { // 最終計算のフラグ enum { // Flag of the final calculation
BF_WEAPON = 0x0001, BF_WEAPON = 0x0001,
BF_MAGIC = 0x0002, BF_MAGIC = 0x0002,
BF_MISC = 0x0004, BF_MISC = 0x0004,
@ -62,10 +62,10 @@ enum { //
int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, struct block_list *target, int attack_type, int skill_id, int skill_lv, int damage, enum damage_lv dmg_lv, int ddelay); int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, struct block_list *target, int attack_type, int skill_id, int skill_lv, int damage, enum damage_lv dmg_lv, int ddelay);
// 通常攻撃処理まとめ // Summary normal attack treatment (basic attack)
enum damage_lv battle_weapon_attack( struct block_list *bl,struct block_list *target,unsigned int tick,int flag); enum damage_lv battle_weapon_attack( struct block_list *bl,struct block_list *target,unsigned int tick,int flag);
// 各種パラメータを得る // Accessors
struct block_list* battle_get_master(struct block_list *src); struct block_list* battle_get_master(struct block_list *src);
struct block_list* battle_gettargeted(struct block_list *target); struct block_list* battle_gettargeted(struct block_list *target);
struct block_list* battle_getenemy(struct block_list *target, int type, int range); struct block_list* battle_getenemy(struct block_list *target, int type, int range);
@ -93,7 +93,7 @@ int battle_check_target(struct block_list *src, struct block_list *target,int fl
bool battle_check_range(struct block_list *src,struct block_list *bl,int range); bool battle_check_range(struct block_list *src,struct block_list *bl,int range);
void battle_consume_ammo(struct map_session_data* sd, int skill, int lv); void battle_consume_ammo(struct map_session_data* sd, int skill, int lv);
// 設定 // Settings
#define MIN_HAIR_STYLE battle_config.min_hair_style #define MIN_HAIR_STYLE battle_config.min_hair_style
#define MAX_HAIR_STYLE battle_config.max_hair_style #define MAX_HAIR_STYLE battle_config.max_hair_style

View File

@ -156,11 +156,11 @@ int chat_joinchat(struct map_session_data* sd, int chatid, const char* pass)
pc_setchatid(sd,cd->bl.id); pc_setchatid(sd,cd->bl.id);
clif_joinchatok(sd,cd); // 新たに参加した人には全員のリスト clif_joinchatok(sd, cd); //To the person who newly joined the list of all
clif_addchat(cd,sd); // 既に中に居た人には追加した人の報告 clif_addchat(cd, sd); //Reports To the person who already in the chat
clif_dispchat(cd,0); // 周囲の人には人数変化報告 clif_dispchat(cd, 0); //Reported number of changes to the people around
chat_triggerevent(cd); // イベント chat_triggerevent(cd); //Event
return 0; return 0;
} }
@ -372,7 +372,7 @@ int chat_deletenpcchat(struct npc_data* nd)
} }
/*========================================== /*==========================================
* * Trigger npc event when we enter the chatroom
*------------------------------------------*/ *------------------------------------------*/
int chat_triggerevent(struct chat_data *cd) int chat_triggerevent(struct chat_data *cd)
{ {

View File

@ -730,7 +730,7 @@ int chrif_charselectreq(struct map_session_data* sd, uint32 s_ip)
} }
/*========================================== /*==========================================
* * Search Char trough id on char serv
*------------------------------------------*/ *------------------------------------------*/
int chrif_searchcharid(int char_id) int chrif_searchcharid(int char_id)
{ {
@ -803,7 +803,7 @@ int chrif_changesex(struct map_session_data *sd)
WFIFOW(char_fd,30) = 5; WFIFOW(char_fd,30) = 5;
WFIFOSET(char_fd,44); WFIFOSET(char_fd,44);
clif_displaymessage(sd->fd, "Need disconnection to perform change-sex request..."); clif_displaymessage(sd->fd, msg_txt(410)); //"Need disconnection to perform change-sex request..."
if (sd->fd) if (sd->fd)
clif_authfail_fd(sd->fd, 15); clif_authfail_fd(sd->fd, 15);
@ -835,20 +835,16 @@ static void chrif_char_ask_name_answer(int acc, const char* player_name, uint16
return; return;
} }
switch( type ) { if(type>0 && type<=5)
case 1 : action = "block"; break; sprintf(action,msg_txt(427+type)); //block|ban|unblock|unban|change the sex of
case 2 : action = "ban"; break; else
case 3 : action = "unblock"; break; sprintf(action,"???");
case 4 : action = "unban"; break;
case 5 : action = "change the sex of"; break;
default: action = "???"; break;
}
switch( answer ) { switch( answer ) {
case 0 : sprintf(output, "Login-server has been asked to %s the player '%.*s'.", action, NAME_LENGTH, player_name); break; case 0 : sprintf(output, msg_txt(424), action, NAME_LENGTH, player_name); break;
case 1 : sprintf(output, "The player '%.*s' doesn't exist.", NAME_LENGTH, player_name); break; case 1 : sprintf(output, msg_txt(425), NAME_LENGTH, player_name); break;
case 2 : sprintf(output, "Your GM level don't authorise you to %s the player '%.*s'.", action, NAME_LENGTH, player_name); break; case 2 : sprintf(output, msg_txt(426), action, NAME_LENGTH, player_name); break;
case 3 : sprintf(output, "Login-server is offline. Impossible to %s the player '%.*s'.", action, NAME_LENGTH, player_name); break; case 3 : sprintf(output, msg_txt(427), action, NAME_LENGTH, player_name); break;
default: output[0] = '\0'; break; default: output[0] = '\0'; break;
} }
@ -856,7 +852,7 @@ static void chrif_char_ask_name_answer(int acc, const char* player_name, uint16
} }
/*========================================== /*==========================================
* (modified by Yor) * Request char server to change sex of char (modified by Yor)
*------------------------------------------*/ *------------------------------------------*/
int chrif_changedsex(int fd) int chrif_changedsex(int fd)
{ {
@ -902,7 +898,7 @@ int chrif_changedsex(int fd)
// save character // save character
sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
// do same modify in login-server for the account, but no in char-server (it ask again login_id1 to login, and don't remember it) // do same modify in login-server for the account, but no in char-server (it ask again login_id1 to login, and don't remember it)
clif_displaymessage(sd->fd, "Your sex has been changed (need disconnection by the server)..."); clif_displaymessage(sd->fd, msg_txt(411)); //"Your sex has been changed (need disconnection by the server)..."
set_eof(sd->fd); // forced to disconnect for the change set_eof(sd->fd); // forced to disconnect for the change
map_quit(sd); // Remove leftovers (e.g. autotrading) [Paradox924X] map_quit(sd); // Remove leftovers (e.g. autotrading) [Paradox924X]
} }
@ -1003,26 +999,20 @@ int chrif_accountban(int fd)
sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
if (RFIFOB(fd,6) == 0) // 0: change of statut, 1: ban if (RFIFOB(fd,6) == 0) // 0: change of statut, 1: ban
{ {
switch (RFIFOL(fd,7)) { // status or final date of a banishment int ret_status = RFIFOL(fd,7); // status or final date of a banishment
case 1: clif_displaymessage(sd->fd, "Your account has 'Unregistered'."); break; if(0<ret_status && ret_status<=9)
case 2: clif_displaymessage(sd->fd, "Your account has an 'Incorrect Password'..."); break; clif_displaymessage(sd->fd, msg_txt(411+ret_status));
case 3: clif_displaymessage(sd->fd, "Your account has expired."); break; else if(ret_status==100)
case 4: clif_displaymessage(sd->fd, "Your account has been rejected from server."); break; clif_displaymessage(sd->fd, msg_txt(421));
case 5: clif_displaymessage(sd->fd, "Your account has been blocked by the GM Team."); break; else
case 6: clif_displaymessage(sd->fd, "Your Game's EXE file is not the latest version."); break; clif_displaymessage(sd->fd, msg_txt(420)); //"Your account has not more authorised."
case 7: clif_displaymessage(sd->fd, "Your account has been prohibited to log in."); break;
case 8: clif_displaymessage(sd->fd, "Server is jammed due to over populated."); break;
case 9: clif_displaymessage(sd->fd, "Your account has not more authorised."); break;
case 100: clif_displaymessage(sd->fd, "Your account has been totally erased."); break;
default: clif_displaymessage(sd->fd, "Your account has not more authorised."); break;
}
} }
else if (RFIFOB(fd,6) == 1) // 0: change of statut, 1: ban else if (RFIFOB(fd,6) == 1) // 0: change of statut, 1: ban
{ {
time_t timestamp; time_t timestamp;
char tmpstr[2048]; char tmpstr[2048];
timestamp = (time_t)RFIFOL(fd,7); // status or final date of a banishment timestamp = (time_t)RFIFOL(fd,7); // status or final date of a banishment
strcpy(tmpstr, "Your account has been banished until "); strcpy(tmpstr, msg_txt(423)); //"Your account has been banished until "
strftime(tmpstr + strlen(tmpstr), 24, "%d-%m-%Y %H:%M:%S", localtime(&timestamp)); strftime(tmpstr + strlen(tmpstr), 24, "%d-%m-%Y %H:%M:%S", localtime(&timestamp));
clif_displaymessage(sd->fd, tmpstr); clif_displaymessage(sd->fd, tmpstr);
} }
@ -1399,10 +1389,10 @@ int chrif_parse(int fd)
cmd = RFIFOW(fd,0); cmd = RFIFOW(fd,0);
if (cmd < 0x2af8 || cmd >= 0x2af8 + ARRAYLENGTH(packet_len_table) || packet_len_table[cmd-0x2af8] == 0) if (cmd < 0x2af8 || cmd >= 0x2af8 + ARRAYLENGTH(packet_len_table) || packet_len_table[cmd-0x2af8] == 0)
{ {
int r = intif_parse(fd); // intifに渡す int r = intif_parse(fd); // Passed on to the intif
if (r == 1) continue; // intifで処理した if (r == 1) continue; // Treated in intif
if (r == 2) return 0; // intifで処理したが、データが足りない if (r == 2) return 0; // Didn't have enough data (len==-1)
ShowWarning("chrif_parse: session #%d, intif_parse failed (unrecognized command 0x%.4x).\n", fd, cmd); ShowWarning("chrif_parse: session #%d, intif_parse failed (unrecognized command 0x%.4x).\n", fd, cmd);
set_eof(fd); set_eof(fd);
@ -1478,8 +1468,8 @@ int send_usercount_tochar(int tid, unsigned int tick, int id, intptr_t data)
} }
/*========================================== /*==========================================
* timer関数 * timerFunction
* map鯖に繋がっているクライアント人数をchar鯖へ送る * Send to char the number of client connected to map
*------------------------------------------*/ *------------------------------------------*/
int send_users_tochar(void) int send_users_tochar(void)
{ {
@ -1508,8 +1498,8 @@ int send_users_tochar(void)
} }
/*========================================== /*==========================================
* timer関数 * timerFunction
* char鯖との接続を確認し * Chk the connection to char server, (if it down)
*------------------------------------------*/ *------------------------------------------*/
static int check_connect_char_server(int tid, unsigned int tick, int id, intptr_t data) static int check_connect_char_server(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -1591,7 +1581,7 @@ int auth_db_final(DBKey key, DBData *data, va_list ap)
} }
/*========================================== /*==========================================
* * Destructor
*------------------------------------------*/ *------------------------------------------*/
int do_final_chrif(void) int do_final_chrif(void)
{ {

View File

@ -191,7 +191,10 @@ int map_fd;
static int clif_parse (int fd); static int clif_parse (int fd);
/*========================================== /*==========================================
* map鯖のip設定 * map<EFBFBD>I<EFBFBD><EFBFBD>ip<EFBFBD>ݒ<EFBFBD>
*------------------------------------------*/
/*==========================================
* Ip setting of map-server
*------------------------------------------*/ *------------------------------------------*/
int clif_setip(const char* ip) int clif_setip(const char* ip)
{ {
@ -1357,9 +1360,9 @@ int clif_spawn(struct block_list *bl)
int i; int i;
if (sd->spiritball > 0) if (sd->spiritball > 0)
clif_spiritball(sd); clif_spiritball(sd);
if(sd->state.size==2) // tiny/big players [Valaris] if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
clif_specialeffect(bl,423,AREA); clif_specialeffect(bl,423,AREA);
else if(sd->state.size==1) else if(sd->state.size==SZ_MEDIUM)
clif_specialeffect(bl,421,AREA); clif_specialeffect(bl,421,AREA);
if( sd->bg_id && map[sd->bl.m].flag.battleground ) if( sd->bg_id && map[sd->bl.m].flag.battleground )
clif_sendbgemblem_area(sd); clif_sendbgemblem_area(sd);
@ -1384,9 +1387,9 @@ int clif_spawn(struct block_list *bl)
case BL_MOB: case BL_MOB:
{ {
TBL_MOB *md = ((TBL_MOB*)bl); TBL_MOB *md = ((TBL_MOB*)bl);
if(md->special_state.size==2) // tiny/big mobs [Valaris] if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
clif_specialeffect(&md->bl,423,AREA); clif_specialeffect(&md->bl,423,AREA);
else if(md->special_state.size==1) else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect(&md->bl,421,AREA); clif_specialeffect(&md->bl,421,AREA);
} }
break; break;
@ -1587,18 +1590,18 @@ static void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_
{ {
TBL_PC *sd = ((TBL_PC*)bl); TBL_PC *sd = ((TBL_PC*)bl);
// clif_movepc(sd); // clif_movepc(sd);
if(sd->state.size==2) // tiny/big players [Valaris] if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
clif_specialeffect(&sd->bl,423,AREA); clif_specialeffect(&sd->bl,423,AREA);
else if(sd->state.size==1) else if(sd->state.size==SZ_MEDIUM)
clif_specialeffect(&sd->bl,421,AREA); clif_specialeffect(&sd->bl,421,AREA);
} }
break; break;
case BL_MOB: case BL_MOB:
{ {
TBL_MOB *md = ((TBL_MOB*)bl); TBL_MOB *md = ((TBL_MOB*)bl);
if(md->special_state.size==2) // tiny/big mobs [Valaris] if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
clif_specialeffect(&md->bl,423,AREA); clif_specialeffect(&md->bl,423,AREA);
else if(md->special_state.size==1) else if(md->special_state.size==SZ_MEDIUM)
clif_specialeffect(&md->bl,421,AREA); clif_specialeffect(&md->bl,421,AREA);
} }
break; break;
@ -3211,7 +3214,7 @@ void clif_arrowequip(struct map_session_data *sd,int val)
fd=sd->fd; fd=sd->fd;
WFIFOHEAD(fd, packet_len(0x013c)); WFIFOHEAD(fd, packet_len(0x013c));
WFIFOW(fd,0)=0x013c; WFIFOW(fd,0)=0x013c;
WFIFOW(fd,2)=val+2;//矢のアイテムID WFIFOW(fd,2)=val+2; //Item ID of the arrow
WFIFOSET(fd,packet_len(0x013c)); WFIFOSET(fd,packet_len(0x013c));
} }
@ -4101,9 +4104,9 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl)
{ {
TBL_PC* tsd = (TBL_PC*)bl; TBL_PC* tsd = (TBL_PC*)bl;
clif_getareachar_pc(sd, tsd); clif_getareachar_pc(sd, tsd);
if(tsd->state.size==2) // tiny/big players [Valaris] if(tsd->state.size==SZ_BIG) // tiny/big players [Valaris]
clif_specialeffect_single(bl,423,sd->fd); clif_specialeffect_single(bl,423,sd->fd);
else if(tsd->state.size==1) else if(tsd->state.size==SZ_MEDIUM)
clif_specialeffect_single(bl,421,sd->fd); clif_specialeffect_single(bl,421,sd->fd);
if( tsd->bg_id && map[tsd->bl.m].flag.battleground ) if( tsd->bg_id && map[tsd->bl.m].flag.battleground )
clif_sendbgemblem_single(sd->fd,tsd); clif_sendbgemblem_single(sd->fd,tsd);
@ -11901,22 +11904,22 @@ void clif_parse_GuildRequestInfo(int fd, struct map_session_data *sd)
switch( RFIFOL(fd,2) ) switch( RFIFOL(fd,2) )
{ {
case 0: // ギルド基本情報、同盟敵対情報 case 0: // <EFBFBD>M<EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD>{<7B><><EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>Ώ<EFBFBD><CE8F>
clif_guild_basicinfo(sd); clif_guild_basicinfo(sd);
clif_guild_allianceinfo(sd); clif_guild_allianceinfo(sd);
break; break;
case 1: // メンバーリスト、役職名リスト case 1: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>o<EFBFBD>[<5B><><EFBFBD>X<EFBFBD>g<EFBFBD>A<EFBFBD><41>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g
clif_guild_positionnamelist(sd); clif_guild_positionnamelist(sd);
clif_guild_memberlist(sd); clif_guild_memberlist(sd);
break; break;
case 2: // 役職名リスト、役職情報リスト case 2: // <EFBFBD><EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>A<EFBFBD><EFBFBD>E<EFBFBD><EFBFBD>񃊃X<EFBFBD>g
clif_guild_positionnamelist(sd); clif_guild_positionnamelist(sd);
clif_guild_positioninfolist(sd); clif_guild_positioninfolist(sd);
break; break;
case 3: // スキルリスト case 3: // <EFBFBD>X<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g
clif_guild_skillinfo(sd); clif_guild_skillinfo(sd);
break; break;
case 4: // 追放リスト case 4: // <EFBFBD>Ǖ<EFBFBD>X<EFBFBD>g
clif_guild_expulsionlist(sd); clif_guild_expulsionlist(sd);
break; break;
default: default:
@ -12072,7 +12075,7 @@ void clif_parse_GuildLeave(int fd,struct map_session_data *sd)
} }
if( sd->bg_id ) if( sd->bg_id )
{ {
clif_displaymessage(fd, "You can't leave battleground guilds."); clif_displaymessage(fd, msg_txt(670)); //"You can't leave battleground guilds."
return; return;
} }
@ -12889,7 +12892,7 @@ void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd)
// Friend already exists // Friend already exists
for (i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id != 0; i++) { for (i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id != 0; i++) {
if (sd->status.friends[i].char_id == f_sd->status.char_id) { if (sd->status.friends[i].char_id == f_sd->status.char_id) {
clif_displaymessage(fd, "Friend already exists."); clif_displaymessage(fd, msg_txt(671)); //"Friend already exists."
return; return;
} }
} }
@ -12992,7 +12995,7 @@ void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd)
(sd->status.friends[i].char_id != char_id || sd->status.friends[i].account_id != account_id); i++); (sd->status.friends[i].char_id != char_id || sd->status.friends[i].account_id != account_id); i++);
if (i == MAX_FRIENDS) { if (i == MAX_FRIENDS) {
clif_displaymessage(fd, "Name not found in list."); clif_displaymessage(fd, msg_txt(672)); //"Name not found in list."
return; return;
} }
@ -13017,7 +13020,7 @@ void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd)
} else { //friend not online -- ask char server to delete from his friendlist } else { //friend not online -- ask char server to delete from his friendlist
if(chrif_removefriend(char_id,sd->status.char_id)) { // char-server offline, abort if(chrif_removefriend(char_id,sd->status.char_id)) { // char-server offline, abort
clif_displaymessage(fd, "This action can't be performed at the moment. Please try again later."); clif_displaymessage(fd, msg_txt(673)); //"This action can't be performed at the moment. Please try again later."
return; return;
} }
} }
@ -13030,7 +13033,7 @@ void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd)
memcpy(&sd->status.friends[j-1], &sd->status.friends[j], sizeof(sd->status.friends[0])); memcpy(&sd->status.friends[j-1], &sd->status.friends[j], sizeof(sd->status.friends[0]));
memset(&sd->status.friends[MAX_FRIENDS-1], 0, sizeof(sd->status.friends[MAX_FRIENDS-1])); memset(&sd->status.friends[MAX_FRIENDS-1], 0, sizeof(sd->status.friends[MAX_FRIENDS-1]));
clif_displaymessage(fd, "Friend removed"); clif_displaymessage(fd, msg_txt(674)); //"Friend removed"
WFIFOHEAD(fd,packet_len(0x20a)); WFIFOHEAD(fd,packet_len(0x20a));
WFIFOW(fd,0) = 0x20a; WFIFOW(fd,0) = 0x20a;
@ -13840,7 +13843,7 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd)
if( DIFF_TICK(sd->cansendmail_tick, gettick()) > 0 ) if( DIFF_TICK(sd->cansendmail_tick, gettick()) > 0 )
{ {
clif_displaymessage(sd->fd,"Cannot send mails too fast!!."); clif_displaymessage(sd->fd,msg_txt(675)); //"Cannot send mails too fast!!."
clif_Mail_send(fd, true); // fail clif_Mail_send(fd, true); // fail
return; return;
} }
@ -16042,7 +16045,7 @@ int clif_autoshadowspell_list(struct map_session_data *sd) {
sd->menuskill_id = SC_AUTOSHADOWSPELL; sd->menuskill_id = SC_AUTOSHADOWSPELL;
sd->menuskill_val = c; sd->menuskill_val = c;
} else { } else {
status_change_end(&sd->bl,SC_STOP,-1); status_change_end(&sd->bl,SC_STOP,INVALID_TIMER);
clif_skill_fail(sd,SC_AUTOSHADOWSPELL,USESKILL_FAIL_IMITATION_SKILL_NONE,0); clif_skill_fail(sd,SC_AUTOSHADOWSPELL,USESKILL_FAIL_IMITATION_SKILL_NONE,0);
} }
@ -16416,7 +16419,7 @@ static int packetdb_readdb(void)
#endif #endif
#if PACKETVER < 2 #if PACKETVER < 2
3, 28, 19, 11, 3, -1, 9, 5, 52, 51, 56, 58, 41, 2, 6, 6, 3, 28, 19, 11, 3, -1, 9, 5, 52, 51, 56, 58, 41, 2, 6, 6,
#elif PACKETVER < 20071106 // 78-7b 亀島以降 lv99エフェクト用 #elif PACKETVER < 20071106 // 78-7b <EFBFBD>T<EFBFBD><EFBFBD><EFBFBD>ȍ~ lv99<39>G<EFBFBD>t<EFBFBD>F<EFBFBD>N<EFBFBD>g<EFBFBD>p
3, 28, 19, 11, 3, -1, 9, 5, 54, 53, 58, 60, 41, 2, 6, 6, 3, 28, 19, 11, 3, -1, 9, 5, 54, 53, 58, 60, 41, 2, 6, 6,
#elif PACKETVER <= 20081217 // change in 0x78 and 0x7c #elif PACKETVER <= 20081217 // change in 0x78 and 0x7c
3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 42, 2, 6, 6, 3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 42, 2, 6, 6,
@ -16451,7 +16454,7 @@ static int packetdb_readdb(void)
6, 3,106, 10, 10, 34, 0, 6, 8, 4, 4, 4, 29, -1, 10, 6, 6, 3,106, 10, 10, 34, 0, 6, 8, 4, 4, 4, 29, -1, 10, 6,
#if PACKETVER < 1 #if PACKETVER < 1
90, 86, 24, 6, 30,102, 8, 4, 8, 4, 14, 10, -1, 6, 2, 6, 90, 86, 24, 6, 30,102, 8, 4, 8, 4, 14, 10, -1, 6, 2, 6,
#else // 196 comodo以降 状態表示アイコン用 #else // 196 comodo<EFBFBD>ȍ~ <20><>ԕ\<5C><><EFBFBD>A<EFBFBD>C<EFBFBD>R<EFBFBD><52><EFBFBD>p
90, 86, 24, 6, 30,102, 9, 4, 8, 4, 14, 10, -1, 6, 2, 6, 90, 86, 24, 6, 30,102, 9, 4, 8, 4, 14, 10, -1, 6, 2, 6,
#endif #endif
#if PACKETVER < 20081126 #if PACKETVER < 20081126

View File

@ -101,7 +101,7 @@ int elemental_save(struct elemental_data *ed) {
return 1; return 1;
} }
static int elemental_summon_end(int tid, unsigned int tick, int id, intptr data) { static int elemental_summon_end(int tid, unsigned int tick, int id, intptr_t data) {
struct map_session_data *sd; struct map_session_data *sd;
struct elemental_data *ed; struct elemental_data *ed;
@ -643,7 +643,7 @@ static int elemental_ai_sub_foreachclient(struct map_session_data *sd, va_list a
return 0; return 0;
} }
static int elemental_ai_timer(int tid, unsigned int tick, int id, intptr data) { static int elemental_ai_timer(int tid, unsigned int tick, int id, intptr_t data) {
map_foreachpc(elemental_ai_sub_foreachclient,tick); map_foreachpc(elemental_ai_sub_foreachclient,tick);
return 0; return 0;

View File

@ -39,12 +39,13 @@ struct eventlist {
struct eventlist *next; struct eventlist *next;
}; };
// ギルドのEXPキャッシュのフラッシュに関連する定数 //Constant related to the flash of the Guild EXP cache
#define GUILD_SEND_XY_INVERVAL 5000 // 座標やHP送信の間隔 #define GUILD_SEND_XY_INVERVAL 5000 // Interval of sending coordinates and HP
#define GUILD_PAYEXP_INVERVAL 10000 // 間隔(キャッシュの最大生存時間、ミリ秒) #define GUILD_PAYEXP_INVERVAL 10000 //Interval (maximum survival time of the cache, in milliseconds)
#define GUILD_PAYEXP_LIST 8192 // キャッシュの最大数 #define GUILD_PAYEXP_LIST 8192 //The maximum number of cache
//Guild EXP cache
// ギルドのEXPキャッシュ
struct guild_expcache { struct guild_expcache {
int guild_id, account_id, char_id; int guild_id, account_id, char_id;
uint64 exp; uint64 exp;
@ -91,10 +92,10 @@ int guild_skill_get_max (int id)
return guild_skill_tree[id-GD_SKILLBASE].max; return guild_skill_tree[id-GD_SKILLBASE].max;
} }
// ギルドスキルがあるか確認 // Retrive skilllv learned by guild
int guild_checkskill(struct guild *g,int id)
{ int guild_checkskill(struct guild *g, int id) {
int idx = id-GD_SKILLBASE; int idx = id - GD_SKILLBASE;
if (idx < 0 || idx >= MAX_GUILDSKILL) if (idx < 0 || idx >= MAX_GUILDSKILL)
return 0; return 0;
return g->skill[idx].lv; return g->skill[idx].lv;
@ -261,7 +262,7 @@ int guild_getposition(struct guild* g, struct map_session_data* sd)
return( i < g->max_member ) ? g->member[i].position : -1; return( i < g->max_member ) ? g->member[i].position : -1;
} }
// メンバー情報の作成 //Creation of member information
void guild_makemember(struct guild_member *m,struct map_session_data *sd) void guild_makemember(struct guild_member *m,struct map_session_data *sd)
{ {
nullpo_retv(sd); nullpo_retv(sd);
@ -283,7 +284,7 @@ void guild_makemember(struct guild_member *m,struct map_session_data *sd)
} }
/** /**
* EXPキャッシュをinter鯖にフラッシュする * Server cache to be flushed to inter the Guild EXP
* @see DBApply * @see DBApply
*/ */
int guild_payexp_timer_sub(DBKey key, DBData *data, va_list ap) { int guild_payexp_timer_sub(DBKey key, DBData *data, va_list ap) {
@ -392,7 +393,7 @@ int guild_create(struct map_session_data *sd, const char *name)
return 1; return 1;
} }
// 作成可否 //Whether or not to create guilde
int guild_created(int account_id,int guild_id) int guild_created(int account_id,int guild_id)
{ {
struct map_session_data *sd=map_id2sd(account_id); struct map_session_data *sd=map_id2sd(account_id);
@ -400,24 +401,24 @@ int guild_created(int account_id,int guild_id)
if(sd==NULL) if(sd==NULL)
return 0; return 0;
if(!guild_id) { if(!guild_id) {
clif_guild_created(sd,2); // 作成失敗(同名ギルド存在) clif_guild_created(sd, 2); // Creation failure (presence of the same name Guild)
return 0; return 0;
} }
//struct guild *g; //struct guild *g;
sd->status.guild_id=guild_id; sd->status.guild_id=guild_id;
clif_guild_created(sd,0); clif_guild_created(sd,0);
if(battle_config.guild_emperium_check) if(battle_config.guild_emperium_check)
pc_delitem(sd,pc_search_inventory(sd,714),1,0,0,LOG_TYPE_CONSUME); // エンペリウム消耗 pc_delitem(sd,pc_search_inventory(sd,714),1,0,0,LOG_TYPE_CONSUME); // <EFBFBD>G<EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return 0; return 0;
} }
// 情報要求 //Information request
int guild_request_info(int guild_id) int guild_request_info(int guild_id)
{ {
return intif_guild_request_info(guild_id); return intif_guild_request_info(guild_id);
} }
// イベント付き情報要求 //Information request with event
int guild_npc_request_info(int guild_id,const char *event) int guild_npc_request_info(int guild_id,const char *event)
{ {
if( guild_search(guild_id) ) if( guild_search(guild_id) )
@ -442,7 +443,7 @@ int guild_npc_request_info(int guild_id,const char *event)
return guild_request_info(guild_id); return guild_request_info(guild_id);
} }
// 所属キャラの確認 //Confirmation of the character belongs to guild
int guild_check_member(struct guild *g) int guild_check_member(struct guild *g)
{ {
int i; int i;
@ -469,7 +470,7 @@ int guild_check_member(struct guild *g)
return 0; return 0;
} }
// 情報所得失敗そのIDのキャラを全部未所属にする //Delete association with guild_id for all characters
int guild_recv_noinfo(int guild_id) int guild_recv_noinfo(int guild_id)
{ {
struct map_session_data *sd; struct map_session_data *sd;
@ -486,7 +487,7 @@ int guild_recv_noinfo(int guild_id)
return 0; return 0;
} }
// 情報所得 //Get and display information for all member
int guild_recv_info(struct guild *sg) int guild_recv_info(struct guild *sg)
{ {
struct guild *g,before; struct guild *g,before;
@ -504,7 +505,7 @@ int guild_recv_info(struct guild *sg)
idb_put(guild_db,sg->guild_id,g); idb_put(guild_db,sg->guild_id,g);
before=*sg; before=*sg;
// 最初のロードなのでユーザーのチェックを行う //Perform the check on the user because the first load
guild_check_member(sg); guild_check_member(sg);
if ((sd = map_nick2sd(sg->master)) != NULL) if ((sd = map_nick2sd(sg->master)) != NULL)
{ {
@ -539,32 +540,32 @@ int guild_recv_info(struct guild *sg)
bm++; bm++;
} }
for(i=0;i<g->max_member;i++){ // 情報の送信 for (i = 0; i < g->max_member; i++) { //Transmission of information at all members
sd = g->member[i].sd; sd = g->member[i].sd;
if( sd==NULL ) if( sd==NULL )
continue; continue;
if( before.guild_lv!=g->guild_lv || bm!=m || if (before.guild_lv != g->guild_lv || bm != m ||
before.max_member!=g->max_member ){ before.max_member != g->max_member) {
clif_guild_basicinfo(sd); // 基本情報送信 clif_guild_basicinfo(sd); //Submit basic information
clif_guild_emblem(sd,g); // エンブレム送信 clif_guild_emblem(sd, g); //Submit emblem
} }
if(bm!=m){ // メンバー情報送信 if (bm != m) { //Send members information
clif_guild_memberlist(g->member[i].sd); clif_guild_memberlist(g->member[i].sd);
} }
if( before.skill_point!=g->skill_point) if (before.skill_point != g->skill_point)
clif_guild_skillinfo(sd); // スキル情報送信 clif_guild_skillinfo(sd); //Submit information skills
if( guild_new ){ // 未送信なら所属情報も送る if (guild_new) { // Send information and affiliation if unsent
clif_guild_belonginfo(sd,g); clif_guild_belonginfo(sd, g);
clif_guild_notice(sd,g); clif_guild_notice(sd, g);
sd->guild_emblem_id=g->emblem_id; sd->guild_emblem_id = g->emblem_id;
} }
} }
// イベントの発生 //Occurrence of an event
if (guild_infoevent_db->remove(guild_infoevent_db, db_i2key(sg->guild_id), &data)) if (guild_infoevent_db->remove(guild_infoevent_db, db_i2key(sg->guild_id), &data))
{ {
struct eventlist *ev = db_data2ptr(&data), *ev2; struct eventlist *ev = db_data2ptr(&data), *ev2;
@ -579,10 +580,10 @@ int guild_recv_info(struct guild *sg)
return 0; return 0;
} }
/*=============================================
// ギルドへの勧誘 * Player sd send a guild invatation to player tsd to join his guild
int guild_invite(struct map_session_data *sd,struct map_session_data *tsd) *--------------------------------------------*/
{ int guild_invite(struct map_session_data *sd, struct map_session_data *tsd) {
struct guild *g; struct guild *g;
int i; int i;
@ -597,7 +598,7 @@ int guild_invite(struct map_session_data *sd,struct map_session_data *tsd)
return 0; //Invite permission. return 0; //Invite permission.
if(!battle_config.invite_request_check) { if(!battle_config.invite_request_check) {
if (tsd->party_invite>0 || tsd->trade_partner || tsd->adopt_invite ) { // 相手が取引中かどうか if (tsd->party_invite > 0 || tsd->trade_partner || tsd->adopt_invite) { //checking if there no other invitation pending
clif_guild_inviteack(sd,0); clif_guild_inviteack(sd,0);
return 0; return 0;
} }
@ -616,7 +617,7 @@ int guild_invite(struct map_session_data *sd,struct map_session_data *tsd)
return 0; return 0;
} }
// 定員確認 //search an empty spot in guild
ARR_FIND( 0, g->max_member, i, g->member[i].account_id == 0 ); ARR_FIND( 0, g->max_member, i, g->member[i].account_id == 0 );
if(i==g->max_member){ if(i==g->max_member){
clif_guild_inviteack(sd,3); clif_guild_inviteack(sd,3);
@ -714,7 +715,9 @@ void guild_member_joined(struct map_session_data *sd)
g->member[i].sd = sd; g->member[i].sd = sd;
} }
// ギルドメンバが追加された /*==========================================
* Add a player to a given guild_id
*----------------------------------------*/
int guild_member_added(int guild_id,int account_id,int char_id,int flag) int guild_member_added(int guild_id,int account_id,int char_id,int flag)
{ {
struct map_session_data *sd= map_id2sd(account_id),*sd2; struct map_session_data *sd= map_id2sd(account_id),*sd2;
@ -724,7 +727,7 @@ int guild_member_added(int guild_id,int account_id,int char_id,int flag)
return 0; return 0;
if(sd==NULL || sd->guild_invite==0){ if(sd==NULL || sd->guild_invite==0){
// キャラ側に登録できなかったため脱退要求を出す // cancel if player not present or invalide guild_id invitation
if (flag == 0) { if (flag == 0) {
ShowError("guild: member added error %d is not online\n",account_id); ShowError("guild: member added error %d is not online\n",account_id);
intif_guild_leave(guild_id,account_id,char_id,0,"** Data Error **"); intif_guild_leave(guild_id,account_id,char_id,0,"** Data Error **");
@ -735,13 +738,13 @@ int guild_member_added(int guild_id,int account_id,int char_id,int flag)
sd->guild_invite = 0; sd->guild_invite = 0;
sd->guild_invite_account = 0; sd->guild_invite_account = 0;
if(flag==1){ // 失敗 if (flag == 1) { //failure
if( sd2!=NULL ) if( sd2!=NULL )
clif_guild_inviteack(sd2,3); clif_guild_inviteack(sd2,3);
return 0; return 0;
} }
// 成功 //if all ok adding player to guild
sd->status.guild_id = g->guild_id; sd->status.guild_id = g->guild_id;
sd->guild_emblem_id = g->emblem_id; sd->guild_emblem_id = g->emblem_id;
//Packets which were sent in the previous 'guild_sent' implementation. //Packets which were sent in the previous 'guild_sent' implementation.
@ -759,7 +762,9 @@ int guild_member_added(int guild_id,int account_id,int char_id,int flag)
return 0; return 0;
} }
// ギルド脱退要求 /*==========================================
* Player request leaving a given guild_id
*----------------------------------------*/
int guild_leave(struct map_session_data* sd, int guild_id, int account_id, int char_id, const char* mes) int guild_leave(struct map_session_data* sd, int guild_id, int account_id, int char_id, const char* mes)
{ {
struct guild *g; struct guild *g;
@ -780,7 +785,9 @@ int guild_leave(struct map_session_data* sd, int guild_id, int account_id, int c
return 0; return 0;
} }
// ギルド追放要求 /*==========================================
* Request remove a player to a given guild_id
*----------------------------------------*/
int guild_expulsion(struct map_session_data* sd, int guild_id, int account_id, int char_id, const char* mes) int guild_expulsion(struct map_session_data* sd, int guild_id, int account_id, int char_id, const char* mes)
{ {
struct map_session_data *tsd; struct map_session_data *tsd;
@ -917,7 +924,7 @@ int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int onlin
} }
if(idx == -1 || c == 0) { if(idx == -1 || c == 0) {
// ギルドのメンバー外なので追放扱いする //Treat char_id who doesn't match guild_id (not found as member)
struct map_session_data *sd = map_id2sd(account_id); struct map_session_data *sd = map_id2sd(account_id);
if(sd && sd->status.char_id == char_id) { if(sd && sd->status.char_id == char_id) {
sd->status.guild_id=0; sd->status.guild_id=0;
@ -953,7 +960,10 @@ int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int onlin
return 0; return 0;
} }
// ギルド会話送信
/*====================================================
* Send a message to whole guild
*---------------------------------------------------*/
int guild_send_message(struct map_session_data *sd,const char *mes,int len) int guild_send_message(struct map_session_data *sd,const char *mes,int len)
{ {
nullpo_ret(sd); nullpo_ret(sd);
@ -968,7 +978,10 @@ int guild_send_message(struct map_session_data *sd,const char *mes,int len)
return 0; return 0;
} }
// ギルド会話受信
/*====================================================
* Guild receive a message, will be displayed to whole member
*---------------------------------------------------*/
int guild_recv_message(int guild_id,int account_id,const char *mes,int len) int guild_recv_message(int guild_id,int account_id,const char *mes,int len)
{ {
struct guild *g; struct guild *g;
@ -977,12 +990,18 @@ int guild_recv_message(int guild_id,int account_id,const char *mes,int len)
clif_guild_message(g,account_id,mes,len); clif_guild_message(g,account_id,mes,len);
return 0; return 0;
} }
// ギルドメンバの役職変更
/*====================================================
* Member changing position in guild
*---------------------------------------------------*/
int guild_change_memberposition(int guild_id,int account_id,int char_id,short idx) int guild_change_memberposition(int guild_id,int account_id,int char_id,short idx)
{ {
return intif_guild_change_memberinfo(guild_id,account_id,char_id,GMI_POSITION,&idx,sizeof(idx)); return intif_guild_change_memberinfo(guild_id,account_id,char_id,GMI_POSITION,&idx,sizeof(idx));
} }
// ギルドメンバの役職変更通知
/*====================================================
* Notification of new position for member
*---------------------------------------------------*/
int guild_memberposition_changed(struct guild *g,int idx,int pos) int guild_memberposition_changed(struct guild *g,int idx,int pos)
{ {
nullpo_ret(g); nullpo_ret(g);
@ -995,7 +1014,10 @@ int guild_memberposition_changed(struct guild *g,int idx,int pos)
clif_charnameupdate(g->member[idx].sd); clif_charnameupdate(g->member[idx].sd);
return 0; return 0;
} }
// ギルド役職変更
/*====================================================
* Change guild title or member
*---------------------------------------------------*/
int guild_change_position(int guild_id,int idx, int guild_change_position(int guild_id,int idx,
int mode,int exp_mode,const char *name) int mode,int exp_mode,const char *name)
{ {
@ -1009,7 +1031,10 @@ int guild_change_position(int guild_id,int idx,
safestrncpy(p.name,name,NAME_LENGTH); safestrncpy(p.name,name,NAME_LENGTH);
return intif_guild_position(guild_id,idx,&p); return intif_guild_position(guild_id,idx,&p);
} }
// ギルド役職変更通知
/*====================================================
* Notification of member has changed his guild tiltle
*---------------------------------------------------*/
int guild_position_changed(int guild_id,int idx,struct guild_position *p) int guild_position_changed(int guild_id,int idx,struct guild_position *p)
{ {
struct guild *g=guild_search(guild_id); struct guild *g=guild_search(guild_id);
@ -1025,7 +1050,10 @@ int guild_position_changed(int guild_id,int idx,struct guild_position *p)
clif_charnameupdate(g->member[i].sd); clif_charnameupdate(g->member[i].sd);
return 0; return 0;
} }
// ギルド告知変更
/*====================================================
* Change guild notice
*---------------------------------------------------*/
int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes1,const char *mes2) int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes1,const char *mes2)
{ {
nullpo_ret(sd); nullpo_ret(sd);
@ -1034,7 +1062,10 @@ int guild_change_notice(struct map_session_data *sd,int guild_id,const char *mes
return 0; return 0;
return intif_guild_notice(guild_id,mes1,mes2); return intif_guild_notice(guild_id,mes1,mes2);
} }
// ギルド告知変更通知
/*====================================================
* Notification of guild has changed his notice
*---------------------------------------------------*/
int guild_notice_changed(int guild_id,const char *mes1,const char *mes2) int guild_notice_changed(int guild_id,const char *mes1,const char *mes2)
{ {
int i; int i;
@ -1052,7 +1083,10 @@ int guild_notice_changed(int guild_id,const char *mes1,const char *mes2)
} }
return 0; return 0;
} }
// ギルドエンブレム変更
/*====================================================
* Change guild emblem
*---------------------------------------------------*/
int guild_change_emblem(struct map_session_data *sd,int len,const char *data) int guild_change_emblem(struct map_session_data *sd,int len,const char *data)
{ {
struct guild *g; struct guild *g;
@ -1066,7 +1100,10 @@ int guild_change_emblem(struct map_session_data *sd,int len,const char *data)
return intif_guild_emblem(sd->status.guild_id,len,data); return intif_guild_emblem(sd->status.guild_id,len,data);
} }
// ギルドエンブレム変更通知
/*====================================================
* Notification of guild emblem changed
*---------------------------------------------------*/
int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data)
{ {
int i; int i;
@ -1146,7 +1183,9 @@ static DBData create_expcache(DBKey key, va_list args)
return db_ptr2data(c); return db_ptr2data(c);
} }
// ギルドのEXP上納 /*====================================================
* return Taxed experience from player sd to guild
*---------------------------------------------------*/
unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp) unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp)
{ {
struct guild *g; struct guild *g;
@ -1178,7 +1217,11 @@ unsigned int guild_payexp(struct map_session_data *sd,unsigned int exp)
return exp; return exp;
} }
// Celest /*====================================================
* Player sd pay a tribue experience exp to his guild
* Add this experience to guild exp
* [Celest]
*---------------------------------------------------*/
int guild_getexp(struct map_session_data *sd,int exp) int guild_getexp(struct map_session_data *sd,int exp)
{ {
struct guild_expcache *c; struct guild_expcache *c;
@ -1195,7 +1238,9 @@ int guild_getexp(struct map_session_data *sd,int exp)
return exp; return exp;
} }
// スキルポイント割り振り /*====================================================
* Ask to increase guildskill skill_num
*---------------------------------------------------*/
int guild_skillup(TBL_PC* sd, int skill_num) int guild_skillup(TBL_PC* sd, int skill_num)
{ {
struct guild* g; struct guild* g;
@ -1216,7 +1261,10 @@ int guild_skillup(TBL_PC* sd, int skill_num)
return 0; return 0;
} }
// スキルポイント割り振り通知
/*====================================================
* Notification of guildskill skill_num increase request
*---------------------------------------------------*/
int guild_skillupack(int guild_id,int skill_num,int account_id) int guild_skillupack(int guild_id,int skill_num,int account_id)
{ {
struct map_session_data *sd=map_id2sd(account_id); struct map_session_data *sd=map_id2sd(account_id);
@ -1238,13 +1286,14 @@ int guild_skillupack(int guild_id,int skill_num,int account_id)
} }
} }
// 全員に通知 // Inform all members
for(i=0;i<g->max_member;i++) for(i=0;i<g->max_member;i++)
if((sd=g->member[i].sd)!=NULL) if((sd=g->member[i].sd)!=NULL)
clif_guild_skillinfo(sd); clif_guild_skillinfo(sd);
return 0; return 0;
} }
void guild_guildaura_refresh(struct map_session_data *sd, int skill_num, int skill_lv) { void guild_guildaura_refresh(struct map_session_data *sd, int skill_num, int skill_lv) {
struct skill_unit_group* group = NULL; struct skill_unit_group* group = NULL;
int type = status_skill2sc(skill_num); int type = status_skill2sc(skill_num);
@ -1263,7 +1312,13 @@ void guild_guildaura_refresh(struct map_session_data *sd, int skill_num, int ski
} }
return; return;
} }
// ギルド同盟数所得
/*====================================================
* Count number of relation the guild have
* flag :
* 0 = allied
* 1 = ennemy
*---------------------------------------------------*/
int guild_get_alliance_count(struct guild *g,int flag) int guild_get_alliance_count(struct guild *g,int flag)
{ {
int i,c; int i,c;
@ -1287,8 +1342,13 @@ void guild_block_skill(struct map_session_data *sd, int time)
skill_blockpc_start_(sd, skill_num[i], time , true); skill_blockpc_start_(sd, skill_num[i], time , true);
} }
// 同盟関係かどうかチェック /*====================================================
// 同盟なら1、それ以外は0 * Check relation between guild_id1 and guild_id2
* flag :
* 0 = allied
* 1 = ennemy
* return true if yes
*---------------------------------------------------*/
int guild_check_alliance(int guild_id1, int guild_id2, int flag) int guild_check_alliance(int guild_id1, int guild_id2, int flag)
{ {
struct guild *g; struct guild *g;
@ -1302,14 +1362,16 @@ int guild_check_alliance(int guild_id1, int guild_id2, int flag)
return( i < MAX_GUILDALLIANCE ) ? 1 : 0; return( i < MAX_GUILDALLIANCE ) ? 1 : 0;
} }
// ギルド同盟要求 /*====================================================
* Player sd, asking player tsd an alliance between there 2 guild
*---------------------------------------------------*/
int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd) int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd)
{ {
struct guild *g[2]; struct guild *g[2];
int i; int i;
if(agit_flag || agit2_flag) { // Disable alliance creation during woe [Valaris] if(agit_flag || agit2_flag) { // Disable alliance creation during woe [Valaris]
clif_displaymessage(sd->fd,"Alliances cannot be made during Guild Wars!"); clif_displaymessage(sd->fd,msg_txt(676)); //"Alliances cannot be made during Guild Wars!"
return 0; return 0;
} // end addition [Valaris] } // end addition [Valaris]
@ -1343,7 +1405,7 @@ int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd)
return 0; return 0;
} }
for(i=0;i<MAX_GUILDALLIANCE;i++){ // すでに同盟状態か確認 for (i = 0; i < MAX_GUILDALLIANCE; i++) { // check if already allied
if( g[0]->alliance[i].guild_id==tsd->status.guild_id && if( g[0]->alliance[i].guild_id==tsd->status.guild_id &&
g[0]->alliance[i].opposition==0){ g[0]->alliance[i].opposition==0){
clif_guild_allianceack(sd,0); clif_guild_allianceack(sd,0);
@ -1357,7 +1419,10 @@ int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd)
clif_guild_reqalliance(tsd,sd->status.account_id,g[0]->name); clif_guild_reqalliance(tsd,sd->status.account_id,g[0]->name);
return 0; return 0;
} }
// ギルド勧誘への返答
/*====================================================
* Player sd, awsser to player tsd (account_id) for an alliance request
*---------------------------------------------------*/
int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag) int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag)
{ {
struct map_session_data *tsd; struct map_session_data *tsd;
@ -1369,13 +1434,13 @@ int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag)
return 0; return 0;
} }
if(sd->guild_alliance!=tsd->status.guild_id) // 勧誘とギルドIDが違う if (sd->guild_alliance != tsd->status.guild_id) // proposed guild_id alliance doesn't match tsd guildid
return 0; return 0;
if(flag==1){ // 承諾 if (flag == 1) { // consent
int i; int i;
struct guild *g,*tg; // 同盟数再確認 struct guild *g, *tg; // Reconfirm the number of alliance
g=guild_search(sd->status.guild_id); g=guild_search(sd->status.guild_id);
tg=guild_search(tsd->status.guild_id); tg=guild_search(tsd->status.guild_id);
@ -1403,11 +1468,11 @@ int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag)
tsd->status.account_id,sd->status.account_id,9 ); tsd->status.account_id,sd->status.account_id,9 );
} }
// inter鯖へ同盟要請 // inform other servers
intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id,
sd->status.account_id,tsd->status.account_id,0 ); sd->status.account_id,tsd->status.account_id,0 );
return 0; return 0;
}else{ // 拒否 } else { // deny
sd->guild_alliance=0; sd->guild_alliance=0;
sd->guild_alliance_account=0; sd->guild_alliance_account=0;
if(tsd!=NULL) if(tsd!=NULL)
@ -1416,13 +1481,15 @@ int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag)
return 0; return 0;
} }
// ギルド関係解消 /*====================================================
* Player sd asking to break alliance with guild guild_id
*---------------------------------------------------*/
int guild_delalliance(struct map_session_data *sd,int guild_id,int flag) int guild_delalliance(struct map_session_data *sd,int guild_id,int flag)
{ {
nullpo_ret(sd); nullpo_ret(sd);
if(agit_flag || agit2_flag) { // Disable alliance breaking during woe [Valaris] if(agit_flag || agit2_flag) { // Disable alliance breaking during woe [Valaris]
clif_displaymessage(sd->fd,"Alliances cannot be broken during Guild Wars!"); clif_displaymessage(sd->fd,msg_txt(677)); //"Alliances cannot be broken during Guild Wars!"
return 0; return 0;
} // end addition [Valaris] } // end addition [Valaris]
@ -1430,7 +1497,9 @@ int guild_delalliance(struct map_session_data *sd,int guild_id,int flag)
return 0; return 0;
} }
// ギルド敵対 /*====================================================
* Player sd, asking player tsd a formal ennemy relation between there 2 guild
*---------------------------------------------------*/
int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd) int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd)
{ {
struct guild *g; struct guild *g;
@ -1451,9 +1520,9 @@ int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd)
return 0; return 0;
} }
for(i=0;i<MAX_GUILDALLIANCE;i++){ // すでに関係を持っているか確認 for (i = 0; i < MAX_GUILDALLIANCE; i++) { // checking relations
if(g->alliance[i].guild_id==tsd->status.guild_id){ if(g->alliance[i].guild_id==tsd->status.guild_id){
if(g->alliance[i].opposition==1){ // すでに敵対 if (g->alliance[i].opposition == 1) { // check if not already hostile
clif_guild_oppositionack(sd,2); clif_guild_oppositionack(sd,2);
return 0; return 0;
} }
@ -1465,13 +1534,15 @@ int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd)
} }
} }
// inter鯖に敵対要請 // inform other serv
intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id, intif_guild_alliance( sd->status.guild_id,tsd->status.guild_id,
sd->status.account_id,tsd->status.account_id,1 ); sd->status.account_id,tsd->status.account_id,1 );
return 0; return 0;
} }
// ギルド同盟/敵対通知 /*====================================================
* Notification of a relationship between 2 guild
*---------------------------------------------------*/
int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2,int flag,const char *name1,const char *name2) int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id2,int flag,const char *name1,const char *name2)
{ {
struct guild *g[2]; struct guild *g[2];
@ -1495,14 +1566,14 @@ int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id
sd[0]->guild_alliance_account=0; sd[0]->guild_alliance_account=0;
} }
if(flag&0x70){ // 失敗 if (flag & 0x70) { // failure
for(i=0;i<2-(flag&1);i++) for(i=0;i<2-(flag&1);i++)
if( sd[i]!=NULL ) if( sd[i]!=NULL )
clif_guild_allianceack(sd[i],((flag>>4)==i+1)?3:4); clif_guild_allianceack(sd[i],((flag>>4)==i+1)?3:4);
return 0; return 0;
} }
if(!(flag&0x08)){ // 関係追加 if (!(flag & 0x08)) { // new relationship
for(i=0;i<2-(flag&1);i++) for(i=0;i<2-(flag&1);i++)
{ {
if(g[i]!=NULL) if(g[i]!=NULL)
@ -1516,7 +1587,7 @@ int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id
} }
} }
} }
}else{ // 関係解消 } else { // remove relationship
for(i=0;i<2-(flag&1);i++) for(i=0;i<2-(flag&1);i++)
{ {
if(g[i]!=NULL) if(g[i]!=NULL)
@ -1525,21 +1596,21 @@ int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id
if( j < MAX_GUILDALLIANCE ) if( j < MAX_GUILDALLIANCE )
g[i]->alliance[j].guild_id = 0; g[i]->alliance[j].guild_id = 0;
} }
if( sd[i]!=NULL ) // 解消通知 if (sd[i] != NULL) // notify players
clif_guild_delalliance(sd[i],guild_id[1-i],(flag&1)); clif_guild_delalliance(sd[i],guild_id[1-i],(flag&1));
} }
} }
if((flag&0x0f)==0){ // 同盟通知 if ((flag & 0x0f) == 0) { // alliance notification
if( sd[1]!=NULL ) if( sd[1]!=NULL )
clif_guild_allianceack(sd[1],2); clif_guild_allianceack(sd[1],2);
}else if((flag&0x0f)==1){ // 敵対通知 } else if ((flag & 0x0f) == 1) { // ennemy notification
if( sd[0]!=NULL ) if( sd[0]!=NULL )
clif_guild_oppositionack(sd[0],0); clif_guild_oppositionack(sd[0],0);
} }
for(i=0;i<2-(flag&1);i++){ // 同盟/敵対リストの再送信 for (i = 0; i < 2 - (flag & 1); i++) { // Retransmission of the relationship list to all members
struct map_session_data *sd; struct map_session_data *sd;
if(g[i]!=NULL) if(g[i]!=NULL)
for(j=0;j<g[i]->max_member;j++) for(j=0;j<g[i]->max_member;j++)
@ -1550,7 +1621,7 @@ int guild_allianceack(int guild_id1,int guild_id2,int account_id1,int account_id
} }
/** /**
* * Notification for the guild disbanded
* @see DBApply * @see DBApply
*/ */
int guild_broken_sub(DBKey key, DBData *data, va_list ap) int guild_broken_sub(DBKey key, DBData *data, va_list ap)
@ -1562,7 +1633,7 @@ int guild_broken_sub(DBKey key, DBData *data, va_list ap)
nullpo_ret(g); nullpo_ret(g);
for(i=0;i<MAX_GUILDALLIANCE;i++){ // 関係を破棄 for(i=0;i<MAX_GUILDALLIANCE;i++){ // Destroy all relationships
if(g->alliance[i].guild_id==guild_id){ if(g->alliance[i].guild_id==guild_id){
for(j=0;j<g->max_member;j++) for(j=0;j<g->max_member;j++)
if( (sd=g->member[j].sd)!=NULL ) if( (sd=g->member[j].sd)!=NULL )
@ -1608,7 +1679,7 @@ int guild_broken(int guild_id,int flag)
if(flag!=0 || g==NULL) if(flag!=0 || g==NULL)
return 0; return 0;
for(i=0;i<g->max_member;i++){ // ギルド解散を通知 for(i=0;i<g->max_member;i++){ // Destroy all relationships
if((sd=g->member[i].sd)!=NULL){ if((sd=g->member[i].sd)!=NULL){
if(sd->state.storage_flag == 2) if(sd->state.storage_flag == 2)
storage_guild_storage_quit(sd,1); storage_guild_storage_quit(sd,1);
@ -1675,13 +1746,13 @@ int guild_gm_changed(int guild_id, int account_id, int char_id)
if (g->member[pos].sd && g->member[pos].sd->fd) if (g->member[pos].sd && g->member[pos].sd->fd)
{ {
clif_displaymessage(g->member[pos].sd->fd, "You no longer are the Guild Master."); clif_displaymessage(g->member[pos].sd->fd, msg_txt(678)); //"You no longer are the Guild Master."
g->member[pos].sd->state.gmaster_flag = 0; g->member[pos].sd->state.gmaster_flag = 0;
} }
if (g->member[0].sd && g->member[0].sd->fd) if (g->member[0].sd && g->member[0].sd->fd)
{ {
clif_displaymessage(g->member[0].sd->fd, "You have become the Guild Master!"); clif_displaymessage(g->member[0].sd->fd, msg_txt(679)); //"You have become the Guild Master!"
g->member[0].sd->state.gmaster_flag = g; g->member[0].sd->state.gmaster_flag = g;
//Block his skills for 5 minutes to prevent abuse. //Block his skills for 5 minutes to prevent abuse.
guild_block_skill(g->member[0].sd, 300000); guild_block_skill(g->member[0].sd, 300000);
@ -1700,7 +1771,9 @@ int guild_gm_changed(int guild_id, int account_id, int char_id)
return 1; return 1;
} }
// ギルド解散 /*====================================================
* Guild disbanded
*---------------------------------------------------*/
int guild_break(struct map_session_data *sd,char *name) int guild_break(struct map_session_data *sd,char *name)
{ {
struct guild *g; struct guild *g;
@ -1850,7 +1923,7 @@ void guild_castle_reconnect(int castle_id, int index, int value)
} }
} }
// ギルドデータ一括受信(初期化時) // Loadcastle data then invoque OnAgitInit* on last
int guild_castledataloadack(int len, struct guild_castle *gc) int guild_castledataloadack(int len, struct guild_castle *gc)
{ {
int i; int i;
@ -1893,6 +1966,9 @@ int guild_castledataloadack(int len, struct guild_castle *gc)
return 0; return 0;
} }
/*====================================================
* Start normal woe and triggers all npc OnAgitStart
*---------------------------------------------------*/
int guild_agit_start(void) int guild_agit_start(void)
{ // Run All NPC_Event[OnAgitStart] { // Run All NPC_Event[OnAgitStart]
int c = npc_event_doall("OnAgitStart"); int c = npc_event_doall("OnAgitStart");
@ -1900,6 +1976,9 @@ int guild_agit_start(void)
return 0; return 0;
} }
/*====================================================
* End normal woe and triggers all npc OnAgitEnd
*---------------------------------------------------*/
int guild_agit_end(void) int guild_agit_end(void)
{ // Run All NPC_Event[OnAgitEnd] { // Run All NPC_Event[OnAgitEnd]
int c = npc_event_doall("OnAgitEnd"); int c = npc_event_doall("OnAgitEnd");
@ -1907,6 +1986,9 @@ int guild_agit_end(void)
return 0; return 0;
} }
/*====================================================
* Start woe2 and triggers all npc OnAgitStart2
*---------------------------------------------------*/
int guild_agit2_start(void) int guild_agit2_start(void)
{ // Run All NPC_Event[OnAgitStart2] { // Run All NPC_Event[OnAgitStart2]
int c = npc_event_doall("OnAgitStart2"); int c = npc_event_doall("OnAgitStart2");
@ -1914,6 +1996,9 @@ int guild_agit2_start(void)
return 0; return 0;
} }
/*====================================================
* End woe2 and triggers all npc OnAgitEnd2
*---------------------------------------------------*/
int guild_agit2_end(void) int guild_agit2_end(void)
{ // Run All NPC_Event[OnAgitEnd2] { // Run All NPC_Event[OnAgitEnd2]
int c = npc_event_doall("OnAgitEnd2"); int c = npc_event_doall("OnAgitEnd2");

View File

@ -46,11 +46,11 @@ static const int packet_len_table[]={
-1,-1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3890 Homunculus [albator] -1,-1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x3890 Homunculus [albator]
}; };
extern int char_fd; // inter serverのfdはchar_fdを使う extern int char_fd; // inter server Fd used for char_fd
#define inter_fd char_fd // エイリアス #define inter_fd char_fd // alias
//----------------------------------------------------------------- //-----------------------------------------------------------------
// inter serverへの送信 // Send to inter server
int CheckForCharServer(void) int CheckForCharServer(void)
{ {
@ -136,7 +136,7 @@ int intif_rename(struct map_session_data *sd, int type, char *name)
return 0; return 0;
} }
// GMメッセージを送信 // GM Send a message
int intif_broadcast(const char* mes, int len, int type) int intif_broadcast(const char* mes, int len, int type)
{ {
int lp = type ? 4 : 0; int lp = type ? 4 : 0;
@ -386,7 +386,7 @@ int intif_send_guild_storage(int account_id,struct guild_storage *gstor)
return 0; return 0;
} }
// パーティ作成要求 // Party creation request
int intif_create_party(struct party_member *member,char *name,int item,int item2) int intif_create_party(struct party_member *member,char *name,int item,int item2)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -403,7 +403,8 @@ int intif_create_party(struct party_member *member,char *name,int item,int item2
WFIFOSET(inter_fd,WFIFOW(inter_fd, 2)); WFIFOSET(inter_fd,WFIFOW(inter_fd, 2));
return 0; return 0;
} }
// パーティ情報要求
// Party information request
int intif_request_partyinfo(int party_id, int char_id) int intif_request_partyinfo(int party_id, int char_id)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -415,7 +416,8 @@ int intif_request_partyinfo(int party_id, int char_id)
WFIFOSET(inter_fd,10); WFIFOSET(inter_fd,10);
return 0; return 0;
} }
// パーティ追加要求
// Request to add a member to party
int intif_party_addmember(int party_id,struct party_member *member) int intif_party_addmember(int party_id,struct party_member *member)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -428,7 +430,8 @@ int intif_party_addmember(int party_id,struct party_member *member)
WFIFOSET(inter_fd,WFIFOW(inter_fd, 2)); WFIFOSET(inter_fd,WFIFOW(inter_fd, 2));
return 1; return 1;
} }
// パーティ設定変更
// Request to change party configuration (exp,item share)
int intif_party_changeoption(int party_id,int account_id,int exp,int item) int intif_party_changeoption(int party_id,int account_id,int exp,int item)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -442,7 +445,8 @@ int intif_party_changeoption(int party_id,int account_id,int exp,int item)
WFIFOSET(inter_fd,14); WFIFOSET(inter_fd,14);
return 0; return 0;
} }
// パーティ脱退要求
// Request to leave party
int intif_party_leave(int party_id,int account_id, int char_id) int intif_party_leave(int party_id,int account_id, int char_id)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -455,7 +459,8 @@ int intif_party_leave(int party_id,int account_id, int char_id)
WFIFOSET(inter_fd,14); WFIFOSET(inter_fd,14);
return 0; return 0;
} }
// パーティ移動要求
// Request keeping party for new map ??
int intif_party_changemap(struct map_session_data *sd,int online) int intif_party_changemap(struct map_session_data *sd,int online)
{ {
int m, mapindex; int m, mapindex;
@ -481,7 +486,8 @@ int intif_party_changemap(struct map_session_data *sd,int online)
WFIFOSET(inter_fd,19); WFIFOSET(inter_fd,19);
return 1; return 1;
} }
// パーティー解散要求
// Request breaking party
int intif_break_party(int party_id) int intif_break_party(int party_id)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -492,7 +498,8 @@ int intif_break_party(int party_id)
WFIFOSET(inter_fd,6); WFIFOSET(inter_fd,6);
return 0; return 0;
} }
// パーティ会話送信
// Sending party chat
int intif_party_message(int party_id,int account_id,const char *mes,int len) int intif_party_message(int party_id,int account_id,const char *mes,int len)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -511,6 +518,7 @@ int intif_party_message(int party_id,int account_id,const char *mes,int len)
return 0; return 0;
} }
// Request a new leader for party
int intif_party_leaderchange(int party_id,int account_id,int char_id) int intif_party_leaderchange(int party_id,int account_id,int char_id)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -524,8 +532,7 @@ int intif_party_leaderchange(int party_id,int account_id,int char_id)
return 0; return 0;
} }
// Request a Guild creation
// ギルド作成要求
int intif_guild_create(const char *name,const struct guild_member *master) int intif_guild_create(const char *name,const struct guild_member *master)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -541,7 +548,8 @@ int intif_guild_create(const char *name,const struct guild_member *master)
WFIFOSET(inter_fd,WFIFOW(inter_fd,2)); WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0; return 0;
} }
// ギルド情報要求
// Request Guild information
int intif_guild_request_info(int guild_id) int intif_guild_request_info(int guild_id)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -552,7 +560,8 @@ int intif_guild_request_info(int guild_id)
WFIFOSET(inter_fd,6); WFIFOSET(inter_fd,6);
return 0; return 0;
} }
// ギルドメンバ追加要求
// Request to add member to the guild
int intif_guild_addmember(int guild_id,struct guild_member *m) int intif_guild_addmember(int guild_id,struct guild_member *m)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -566,6 +575,7 @@ int intif_guild_addmember(int guild_id,struct guild_member *m)
return 0; return 0;
} }
// Request a new leader for guild
int intif_guild_change_gm(int guild_id, const char* name, int len) int intif_guild_change_gm(int guild_id, const char* name, int len)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -579,7 +589,7 @@ int intif_guild_change_gm(int guild_id, const char* name, int len)
return 0; return 0;
} }
// ギルドメンバ脱退/追放要求 // Request to leave guild
int intif_guild_leave(int guild_id,int account_id,int char_id,int flag,const char *mes) int intif_guild_leave(int guild_id,int account_id,int char_id,int flag,const char *mes)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -594,7 +604,8 @@ int intif_guild_leave(int guild_id,int account_id,int char_id,int flag,const cha
WFIFOSET(inter_fd,55); WFIFOSET(inter_fd,55);
return 0; return 0;
} }
// ギルドメンバのオンライン状況/Lv更新要求
//Update request / Lv online status of the guild members
int intif_guild_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class_) int intif_guild_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class_)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -610,7 +621,8 @@ int intif_guild_memberinfoshort(int guild_id,int account_id,int char_id,int onli
WFIFOSET(inter_fd,19); WFIFOSET(inter_fd,19);
return 0; return 0;
} }
// ギルド解散通知
//Guild disbanded notification
int intif_guild_break(int guild_id) int intif_guild_break(int guild_id)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -621,7 +633,8 @@ int intif_guild_break(int guild_id)
WFIFOSET(inter_fd,6); WFIFOSET(inter_fd,6);
return 0; return 0;
} }
// ギルド会話送信
// Send a guild message
int intif_guild_message(int guild_id,int account_id,const char *mes,int len) int intif_guild_message(int guild_id,int account_id,const char *mes,int len)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -640,7 +653,8 @@ int intif_guild_message(int guild_id,int account_id,const char *mes,int len)
return 0; return 0;
} }
// ギルド基本情報変更要求
// Request a change of Guild basic information
int intif_guild_change_basicinfo(int guild_id,int type,const void *data,int len) int intif_guild_change_basicinfo(int guild_id,int type,const void *data,int len)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -654,7 +668,8 @@ int intif_guild_change_basicinfo(int guild_id,int type,const void *data,int len)
WFIFOSET(inter_fd,len+10); WFIFOSET(inter_fd,len+10);
return 0; return 0;
} }
// ギルドメンバ情報変更要求
// Request a change of Guild member information
int intif_guild_change_memberinfo(int guild_id,int account_id,int char_id, int intif_guild_change_memberinfo(int guild_id,int account_id,int char_id,
int type,const void *data,int len) int type,const void *data,int len)
{ {
@ -671,7 +686,8 @@ int intif_guild_change_memberinfo(int guild_id,int account_id,int char_id,
WFIFOSET(inter_fd,len+18); WFIFOSET(inter_fd,len+18);
return 0; return 0;
} }
// ギルド役職変更要求
// Request a change of Guild title
int intif_guild_position(int guild_id,int idx,struct guild_position *p) int intif_guild_position(int guild_id,int idx,struct guild_position *p)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -685,7 +701,8 @@ int intif_guild_position(int guild_id,int idx,struct guild_position *p)
WFIFOSET(inter_fd,WFIFOW(inter_fd,2)); WFIFOSET(inter_fd,WFIFOW(inter_fd,2));
return 0; return 0;
} }
// ギルドスキルアップ要求
// Request an update of Guildskill skillnum
int intif_guild_skillup(int guild_id, int skill_num, int account_id, int max) int intif_guild_skillup(int guild_id, int skill_num, int account_id, int max)
{ {
if( CheckForCharServer() ) if( CheckForCharServer() )
@ -699,7 +716,8 @@ int intif_guild_skillup(int guild_id, int skill_num, int account_id, int max)
WFIFOSET(inter_fd, 18); WFIFOSET(inter_fd, 18);
return 0; return 0;
} }
// ギルド同盟/敵対要求
// Request a new guild relationship
int intif_guild_alliance(int guild_id1,int guild_id2,int account_id1,int account_id2,int flag) int intif_guild_alliance(int guild_id1,int guild_id2,int account_id1,int account_id2,int flag)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -714,7 +732,8 @@ int intif_guild_alliance(int guild_id1,int guild_id2,int account_id1,int account
WFIFOSET(inter_fd,19); WFIFOSET(inter_fd,19);
return 0; return 0;
} }
// ギルド告知変更要求
// Request to change guild notice
int intif_guild_notice(int guild_id,const char *mes1,const char *mes2) int intif_guild_notice(int guild_id,const char *mes1,const char *mes2)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -727,7 +746,8 @@ int intif_guild_notice(int guild_id,const char *mes1,const char *mes2)
WFIFOSET(inter_fd,186); WFIFOSET(inter_fd,186);
return 0; return 0;
} }
// ギルドエンブレム変更要求
// Request to change guild emblem
int intif_guild_emblem(int guild_id,int len,const char *data) int intif_guild_emblem(int guild_id,int len,const char *data)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -761,7 +781,8 @@ int intif_guild_castle_dataload(int num, int *castle_ids)
return 1; return 1;
} }
//ギルド城占領ギルド変更要求
// Request change castle guild owner and save data
int intif_guild_castle_datasave(int castle_id,int index, int value) int intif_guild_castle_datasave(int castle_id,int index, int value)
{ {
if (CheckForCharServer()) if (CheckForCharServer())
@ -868,7 +889,7 @@ int intif_parse_WisMessage(int fd)
} }
//Success to send whisper. //Success to send whisper.
clif_wis_message(sd->fd, wisp_source, (char*)RFIFOP(fd,56),RFIFOW(fd,2)-56); clif_wis_message(sd->fd, wisp_source, (char*)RFIFOP(fd,56),RFIFOW(fd,2)-56);
intif_wis_replay(id,0); // 送信成功 intif_wis_replay(id,0); // succes
return 0; return 0;
} }
@ -925,7 +946,7 @@ int mapif_parse_WisToGM(int fd)
return 0; return 0;
} }
// アカウント変数通知 // Request player registre
int intif_parse_Registers(int fd) int intif_parse_Registers(int fd)
{ {
int j,p,len,max, flag; int j,p,len,max, flag;
@ -1017,13 +1038,15 @@ int intif_parse_LoadGuildStorage(int fd)
storage_guild_storageopen(sd); storage_guild_storageopen(sd);
return 0; return 0;
} }
// ACK guild_storage saved
int intif_parse_SaveGuildStorage(int fd) int intif_parse_SaveGuildStorage(int fd)
{ {
storage_guild_storagesaved(/*RFIFOL(fd,2), */RFIFOL(fd,6)); storage_guild_storagesaved(/*RFIFOL(fd,2), */RFIFOL(fd,6));
return 0; return 0;
} }
// パーティ作成可否 // ACK party creation
int intif_parse_PartyCreated(int fd) int intif_parse_PartyCreated(int fd)
{ {
if(battle_config.etc_log) if(battle_config.etc_log)
@ -1031,7 +1054,8 @@ int intif_parse_PartyCreated(int fd)
party_created(RFIFOL(fd,2), RFIFOL(fd,6),RFIFOB(fd,10),RFIFOL(fd,11), (char *)RFIFOP(fd,15)); party_created(RFIFOL(fd,2), RFIFOL(fd,6),RFIFOB(fd,10),RFIFOL(fd,11), (char *)RFIFOP(fd,15));
return 0; return 0;
} }
// パーティ情報
// Receive party info
int intif_parse_PartyInfo(int fd) int intif_parse_PartyInfo(int fd)
{ {
if( RFIFOW(fd,2) == 12 ){ if( RFIFOW(fd,2) == 12 ){
@ -1045,7 +1069,8 @@ int intif_parse_PartyInfo(int fd)
party_recv_info((struct party *)RFIFOP(fd,8), RFIFOL(fd,4)); party_recv_info((struct party *)RFIFOP(fd,8), RFIFOL(fd,4));
return 0; return 0;
} }
// パーティ追加通知
// ACK adding party member
int intif_parse_PartyMemberAdded(int fd) int intif_parse_PartyMemberAdded(int fd)
{ {
if(battle_config.etc_log) if(battle_config.etc_log)
@ -1053,13 +1078,15 @@ int intif_parse_PartyMemberAdded(int fd)
party_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10), RFIFOB(fd, 14)); party_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10), RFIFOB(fd, 14));
return 0; return 0;
} }
// パーティ設定変更通知
// ACK changing party option
int intif_parse_PartyOptionChanged(int fd) int intif_parse_PartyOptionChanged(int fd)
{ {
party_optionchanged(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOW(fd,10),RFIFOW(fd,12),RFIFOB(fd,14)); party_optionchanged(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOW(fd,10),RFIFOW(fd,12),RFIFOB(fd,14));
return 0; return 0;
} }
// パーティ脱退通知
// ACK member leaving party
int intif_parse_PartyMemberWithdraw(int fd) int intif_parse_PartyMemberWithdraw(int fd)
{ {
if(battle_config.etc_log) if(battle_config.etc_log)
@ -1067,32 +1094,36 @@ int intif_parse_PartyMemberWithdraw(int fd)
party_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); party_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10));
return 0; return 0;
} }
// パーティ解散通知
// ACK party break
int intif_parse_PartyBroken(int fd) int intif_parse_PartyBroken(int fd)
{ {
party_broken(RFIFOL(fd,2)); party_broken(RFIFOL(fd,2));
return 0; return 0;
} }
// パーティ移動通知
// ACK party on new map
int intif_parse_PartyMove(int fd) int intif_parse_PartyMove(int fd)
{ {
party_recv_movemap(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOW(fd,14),RFIFOB(fd,16),RFIFOW(fd,17)); party_recv_movemap(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOW(fd,14),RFIFOB(fd,16),RFIFOW(fd,17));
return 0; return 0;
} }
// パーティメッセージ
// ACK party messages
int intif_parse_PartyMessage(int fd) int intif_parse_PartyMessage(int fd)
{ {
party_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),(char *) RFIFOP(fd,12),RFIFOW(fd,2)-12); party_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),(char *) RFIFOP(fd,12),RFIFOW(fd,2)-12);
return 0; return 0;
} }
// ギルド作成可否 // ACK guild creation
int intif_parse_GuildCreated(int fd) int intif_parse_GuildCreated(int fd)
{ {
guild_created(RFIFOL(fd,2),RFIFOL(fd,6)); guild_created(RFIFOL(fd,2),RFIFOL(fd,6));
return 0; return 0;
} }
// ギルド情報
// ACK guild infos
int intif_parse_GuildInfo(int fd) int intif_parse_GuildInfo(int fd)
{ {
if(RFIFOW(fd,2) == 8) { if(RFIFOW(fd,2) == 8) {
@ -1105,7 +1136,8 @@ int intif_parse_GuildInfo(int fd)
guild_recv_info((struct guild *)RFIFOP(fd,4)); guild_recv_info((struct guild *)RFIFOP(fd,4));
return 0; return 0;
} }
// ギルドメンバ追加通知
// ACK adding guild member
int intif_parse_GuildMemberAdded(int fd) int intif_parse_GuildMemberAdded(int fd)
{ {
if(battle_config.etc_log) if(battle_config.etc_log)
@ -1113,20 +1145,22 @@ int intif_parse_GuildMemberAdded(int fd)
guild_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14)); guild_member_added(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14));
return 0; return 0;
} }
// ギルドメンバ脱退/追放通知
// ACK member leaving guild
int intif_parse_GuildMemberWithdraw(int fd) int intif_parse_GuildMemberWithdraw(int fd)
{ {
guild_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),(char *)RFIFOP(fd,55),(char *)RFIFOP(fd,15)); guild_member_withdraw(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),(char *)RFIFOP(fd,55),(char *)RFIFOP(fd,15));
return 0; return 0;
} }
// ギルドメンバオンライン状態/Lv変更通知 // ACK guild member basic info
int intif_parse_GuildMemberInfoShort(int fd) int intif_parse_GuildMemberInfoShort(int fd)
{ {
guild_recv_memberinfoshort(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOW(fd,15),RFIFOW(fd,17)); guild_recv_memberinfoshort(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOB(fd,14),RFIFOW(fd,15),RFIFOW(fd,17));
return 0; return 0;
} }
// ギルド解散通知
// ACK guild break
int intif_parse_GuildBroken(int fd) int intif_parse_GuildBroken(int fd)
{ {
guild_broken(RFIFOL(fd,2),RFIFOB(fd,6)); guild_broken(RFIFOL(fd,2),RFIFOB(fd,6));
@ -1189,7 +1223,7 @@ int intif_parse_GuildMemberInfoChanged(int fd)
return 0; return 0;
} }
// ギルド役職変更通知 // ACK change of guild title
int intif_parse_GuildPosition(int fd) int intif_parse_GuildPosition(int fd)
{ {
if( RFIFOW(fd,2)!=sizeof(struct guild_position)+12 ) if( RFIFOW(fd,2)!=sizeof(struct guild_position)+12 )
@ -1197,54 +1231,62 @@ int intif_parse_GuildPosition(int fd)
guild_position_changed(RFIFOL(fd,4),RFIFOL(fd,8),(struct guild_position *)RFIFOP(fd,12)); guild_position_changed(RFIFOL(fd,4),RFIFOL(fd,8),(struct guild_position *)RFIFOP(fd,12));
return 0; return 0;
} }
// ギルドスキル割り振り通知
// ACK change of guild skill update
int intif_parse_GuildSkillUp(int fd) int intif_parse_GuildSkillUp(int fd)
{ {
guild_skillupack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); guild_skillupack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10));
return 0; return 0;
} }
// ギルド同盟/敵対通知
// ACK change of guild relationship
int intif_parse_GuildAlliance(int fd) int intif_parse_GuildAlliance(int fd)
{ {
guild_allianceack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),RFIFOB(fd,18),(char *) RFIFOP(fd,19),(char *) RFIFOP(fd,43)); guild_allianceack(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10),RFIFOL(fd,14),RFIFOB(fd,18),(char *) RFIFOP(fd,19),(char *) RFIFOP(fd,43));
return 0; return 0;
} }
// ギルド告知変更通知
// ACK change of guild notice
int intif_parse_GuildNotice(int fd) int intif_parse_GuildNotice(int fd)
{ {
guild_notice_changed(RFIFOL(fd,2),(char *) RFIFOP(fd,6),(char *) RFIFOP(fd,66)); guild_notice_changed(RFIFOL(fd,2),(char *) RFIFOP(fd,6),(char *) RFIFOP(fd,66));
return 0; return 0;
} }
// ギルドエンブレム変更通知
// ACK change of guild emblem
int intif_parse_GuildEmblem(int fd) int intif_parse_GuildEmblem(int fd)
{ {
guild_emblem_changed(RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8), (char *)RFIFOP(fd,12)); guild_emblem_changed(RFIFOW(fd,2)-12,RFIFOL(fd,4),RFIFOL(fd,8), (char *)RFIFOP(fd,12));
return 0; return 0;
} }
// ギルド会話受信
// ACK guild message
int intif_parse_GuildMessage(int fd) int intif_parse_GuildMessage(int fd)
{ {
guild_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),(char *) RFIFOP(fd,12),RFIFOW(fd,2)-12); guild_recv_message(RFIFOL(fd,4),RFIFOL(fd,8),(char *) RFIFOP(fd,12),RFIFOW(fd,2)-12);
return 0; return 0;
} }
// ギルド城データ要求返信
// Reply guild castle data request
int intif_parse_GuildCastleDataLoad(int fd) int intif_parse_GuildCastleDataLoad(int fd)
{ {
return guild_castledataloadack(RFIFOW(fd,2), (struct guild_castle *)RFIFOP(fd,4)); return guild_castledataloadack(RFIFOW(fd,2), (struct guild_castle *)RFIFOP(fd,4));
} }
// ACK change of guildmaster
int intif_parse_GuildMasterChanged(int fd) int intif_parse_GuildMasterChanged(int fd)
{ {
return guild_gm_changed(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10)); return guild_gm_changed(RFIFOL(fd,2),RFIFOL(fd,6),RFIFOL(fd,10));
} }
// pet // Request pet creation
int intif_parse_CreatePet(int fd) int intif_parse_CreatePet(int fd)
{ {
pet_get_egg(RFIFOL(fd,2),RFIFOL(fd,7),RFIFOB(fd,6)); pet_get_egg(RFIFOL(fd,2),RFIFOL(fd,7),RFIFOB(fd,6));
return 0; return 0;
} }
// ACK pet data
int intif_parse_RecvPetData(int fd) int intif_parse_RecvPetData(int fd)
{ {
struct s_pet p; struct s_pet p;
@ -1261,6 +1303,8 @@ int intif_parse_RecvPetData(int fd)
return 0; return 0;
} }
// ACK pet save data
int intif_parse_SavePetOk(int fd) int intif_parse_SavePetOk(int fd)
{ {
if(RFIFOB(fd,6) == 1) if(RFIFOB(fd,6) == 1)
@ -1269,6 +1313,7 @@ int intif_parse_SavePetOk(int fd)
return 0; return 0;
} }
// ACK deleting pet
int intif_parse_DeletePetOk(int fd) int intif_parse_DeletePetOk(int fd)
{ {
if(RFIFOB(fd,2) == 1) if(RFIFOB(fd,2) == 1)
@ -1277,6 +1322,7 @@ int intif_parse_DeletePetOk(int fd)
return 0; return 0;
} }
// ACK changing name resquest, players,pets,hommon
int intif_parse_ChangeNameOk(int fd) int intif_parse_ChangeNameOk(int fd)
{ {
struct map_session_data *sd = NULL; struct map_session_data *sd = NULL;
@ -2112,19 +2158,19 @@ void intif_parse_MessageToFD(int fd) {
} }
//----------------------------------------------------------------- //-----------------------------------------------------------------
// inter serverからの通信 // Communication from the inter server
// エラーがあれば0(false)を返すこと // Return a 0 (false) if there were any errors.
// パケットが処理できれば1,パケット長が足りなければ2を返すこと // 1, 2 if there are not enough to return the length of the packet if the packet processing
int intif_parse(int fd) int intif_parse(int fd)
{ {
int packet_len, cmd; int packet_len, cmd;
cmd = RFIFOW(fd,0); cmd = RFIFOW(fd,0);
// パケットのID確認 // Verify ID of the packet
if(cmd<0x3800 || cmd>=0x3800+(sizeof(packet_len_table)/sizeof(packet_len_table[0])) || if(cmd<0x3800 || cmd>=0x3800+(sizeof(packet_len_table)/sizeof(packet_len_table[0])) ||
packet_len_table[cmd-0x3800]==0){ packet_len_table[cmd-0x3800]==0){
return 0; return 0;
} }
// パケットの長さ確認 // Check the length of the packet
packet_len = packet_len_table[cmd-0x3800]; packet_len = packet_len_table[cmd-0x3800];
if(packet_len==-1){ if(packet_len==-1){
if(RFIFOREST(fd)<4) if(RFIFOREST(fd)<4)
@ -2134,7 +2180,7 @@ int intif_parse(int fd)
if((int)RFIFOREST(fd)<packet_len){ if((int)RFIFOREST(fd)<packet_len){
return 2; return 2;
} }
// 処理分岐 // Processing branch
switch(cmd){ switch(cmd){
case 0x3800: case 0x3800:
if (RFIFOL(fd,4) == 0xFF000000) //Normal announce. if (RFIFOL(fd,4) == 0xFF000000) //Normal announce.
@ -2217,7 +2263,7 @@ int intif_parse(int fd)
ShowError("intif_parse : unknown packet %d %x\n",fd,RFIFOW(fd,0)); ShowError("intif_parse : unknown packet %d %x\n",fd,RFIFOW(fd,0));
return 0; return 0;
} }
// パケット読み飛ばし // Skip packet
RFIFOSKIP(fd,packet_len); RFIFOSKIP(fd,packet_len);
return 1; return 1;
} }

View File

@ -25,7 +25,7 @@ static struct item_group itemgroup_db[MAX_ITEMGROUP];
struct item_data dummy_item; //This is the default dummy item used for non-existant items. [Skotlex] struct item_data dummy_item; //This is the default dummy item used for non-existant items. [Skotlex]
/** /**
* * Search for item name
* name = item alias, so we should find items aliases first. if not found then look for "jname" (full name) * name = item alias, so we should find items aliases first. if not found then look for "jname" (full name)
* @see DBApply * @see DBApply
*/ */
@ -51,7 +51,7 @@ static int itemdb_searchname_sub(DBKey key, DBData *data, va_list ap)
} }
/*========================================== /*==========================================
* * Return item data from item name. (lookup)
*------------------------------------------*/ *------------------------------------------*/
struct item_data* itemdb_searchname(const char *str) struct item_data* itemdb_searchname(const char *str)
{ {
@ -136,7 +136,7 @@ int itemdb_searchname_array(struct item_data** data, int size, const char *str)
/*========================================== /*==========================================
* * Return a random item id from group. (take in account % chance giving/tot group)
*------------------------------------------*/ *------------------------------------------*/
int itemdb_searchrandomid(int group) int itemdb_searchrandomid(int group)
{ {
@ -480,7 +480,8 @@ int itemdb_isidentified(int nameid)
} }
/*========================================== /*==========================================
* 使 * Search by name for the override flags available items
* (Give item another sprite)
*------------------------------------------*/ *------------------------------------------*/
static bool itemdb_read_itemavail(char* str[], int columns, int current) static bool itemdb_read_itemavail(char* str[], int columns, int current)
{// <nameid>,<sprite> {// <nameid>,<sprite>
@ -585,7 +586,7 @@ static void itemdb_read_itemgroup(void)
} }
/*========================================== /*==========================================
* * Read item forbiden by mapflag (can't equip item)
*------------------------------------------*/ *------------------------------------------*/
static bool itemdb_read_noequip(char* str[], int columns, int current) static bool itemdb_read_noequip(char* str[], int columns, int current)
{// <nameid>,<mode> {// <nameid>,<mode>
@ -1075,7 +1076,8 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr
} }
/*========================================== /*==========================================
* * Reading item from item db
* item_db2 overwriting item_db
*------------------------------------------*/ *------------------------------------------*/
static int itemdb_readdb(void) static int itemdb_readdb(void)
{ {

View File

@ -93,7 +93,7 @@ char *SCRIPT_CONF_NAME;
char *MSG_CONF_NAME; char *MSG_CONF_NAME;
char *GRF_PATH_FILENAME; char *GRF_PATH_FILENAME;
// 極力 staticでロ?カルに?める // DBMap declaartion
static DBMap* id_db=NULL; // int id -> struct block_list* static DBMap* id_db=NULL; // int id -> struct block_list*
static DBMap* pc_db=NULL; // int id -> struct map_session_data* static DBMap* pc_db=NULL; // int id -> struct map_session_data*
static DBMap* mobid_db=NULL; // int id -> struct mob_data* static DBMap* mobid_db=NULL; // int id -> struct mob_data*
@ -183,12 +183,11 @@ int map_usercount(void)
} }
// //
// block削除の安全性確保?理 // block<EFBFBD><EFBFBD>̈<EFBFBD><EFBFBD>S<EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><EFBFBD>?<3F><>
// //
/*========================================== /*==========================================
* blockをfreeするときfreeの? * Attempt to free a map blocklist
*
*------------------------------------------*/ *------------------------------------------*/
int map_freeblock (struct block_list *bl) int map_freeblock (struct block_list *bl)
{ {
@ -205,7 +204,7 @@ int map_freeblock (struct block_list *bl)
return block_free_lock; return block_free_lock;
} }
/*========================================== /*==========================================
* blockのfreeを一市Iに禁止する * block<EFBFBD><EFBFBD>free<EFBFBD><EFBFBD><EFBFBD><EFBFBD>sI<EFBFBD>ɋ֎~<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_freeblock_lock (void) int map_freeblock_lock (void)
{ {
@ -213,9 +212,9 @@ int map_freeblock_lock (void)
} }
/*========================================== /*==========================================
* blockのfreeのロックを解除する * block<EFBFBD><EFBFBD>free<EFBFBD>̃<EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* * <EFBFBD><EFBFBD><EFBFBD>̂Ƃ<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>b<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>ɂȂ<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>
* blockを全部削除 * <EFBFBD>o<EFBFBD>b<EFBFBD>t<EFBFBD>@<EFBFBD>ɂ<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD>block<EFBFBD><EFBFBD>S<EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_freeblock_unlock (void) int map_freeblock_unlock (void)
{ {
@ -235,10 +234,10 @@ int map_freeblock_unlock (void)
return block_free_lock; return block_free_lock;
} }
// map_freeblock_lock() を呼んで map_freeblock_unlock() を呼ばない // map_freeblock_lock() <EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD> map_freeblock_unlock() <20><><EFBFBD>Ă΂Ȃ<CE82>
// 関数があったので、定期的にblock_free_lockをリセットするようにする。 // <EFBFBD>֐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ŁA<EFBFBD><EFBFBD><EFBFBD>I<EFBFBD><EFBFBD>block_free_lock<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɂ<EFBFBD><EFBFBD><EFBFBD>B
// この関数は、do_timer() のトップレベルから呼ばれるので、 // <EFBFBD><EFBFBD><EFBFBD>̊֐<EFBFBD><EFBFBD>́Ado_timer() <20>̃g<CC83>b<EFBFBD>v<EFBFBD><76><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă΂<C482><CE82>̂ŁA
// block_free_lock を直接いじっても支障無いはず。 // block_free_lock <EFBFBD>𒼐ڂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>͂<EFBFBD><EFBFBD>B
int map_freeblock_timer(int tid, unsigned int tick, int id, intptr_t data) int map_freeblock_timer(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -252,11 +251,11 @@ int map_freeblock_timer(int tid, unsigned int tick, int id, intptr_t data)
} }
// //
// block化?理 // block<EFBFBD><EFBFBD>?<3F><>
// //
/*========================================== /*==========================================
* map[]block_listから? * map[]<EFBFBD><EFBFBD>block_list<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* bl->prevにbl_headのアドレスを入れておく * bl->prev<EFBFBD><EFBFBD>bl_head<EFBFBD>̃A<EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
static struct block_list bl_head; static struct block_list bl_head;
@ -339,10 +338,10 @@ int map_delblock(struct block_list* bl)
int pos; int pos;
nullpo_ret(bl); nullpo_ret(bl);
// ?にblocklistから?けている // blocklist (2ways chainlist)
if (bl->prev == NULL) { if (bl->prev == NULL) {
if (bl->next != NULL) { if (bl->next != NULL) {
// prevがNULLでnextがNULLでないのは有ってはならない // prev<EFBFBD><EFBFBD>NULL<EFBFBD><EFBFBD>next<EFBFBD><EFBFBD>NULL<EFBFBD>łȂ<EFBFBD><EFBFBD>̂͗L<EFBFBD><EFBFBD><EFBFBD>Ă͂Ȃ<EFBFBD>Ȃ<EFBFBD>
ShowError("map_delblock error : bl->next!=NULL\n"); ShowError("map_delblock error : bl->next!=NULL\n");
} }
return 0; return 0;
@ -357,7 +356,7 @@ int map_delblock(struct block_list* bl)
if (bl->next) if (bl->next)
bl->next->prev = bl->prev; bl->next->prev = bl->prev;
if (bl->prev == &bl_head) { if (bl->prev == &bl_head) {
// リストの頭なので、map[]のblock_listを更新する // <EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>g<EFBFBD>̓<EFBFBD><EFBFBD>Ȃ̂ŁAmap[]<5D><>block_list<73><74><EFBFBD>X<EFBFBD>V<EFBFBD><56><EFBFBD><EFBFBD>
if (bl->type == BL_MOB) { if (bl->type == BL_MOB) {
map[bl->m].block_mob[pos] = bl->next; map[bl->m].block_mob[pos] = bl->next;
} else { } else {
@ -589,10 +588,10 @@ int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_lis
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_foreachinrange: block count too many!\n"); ShowWarning("map_foreachinrange: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) // 有?かどうかチェック if(bl_list[i]->prev) // <EFBFBD>L?<3F><><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
{ {
va_list ap; va_list ap;
va_start(ap, type); va_start(ap, type);
@ -600,7 +599,7 @@ int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_lis
va_end(ap); va_end(ap);
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD>
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; //[Skotlex] return returnCount; //[Skotlex]
@ -661,10 +660,10 @@ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_foreachinrange: block count too many!\n"); ShowWarning("map_foreachinrange: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) // 有?かどうかチェック if(bl_list[i]->prev) // <EFBFBD>L?<3F><><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
{ {
va_list ap; va_list ap;
va_start(ap, type); va_start(ap, type);
@ -672,16 +671,16 @@ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block
va_end(ap); va_end(ap);
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD>
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; //[Skotlex] return returnCount; //[Skotlex]
} }
/*========================================== /*==========================================
* map m (x0,y0)-(x1,y1)?objに? * map m (x0,y0)-(x1,y1)?<EFBFBD>̑Sobj<EFBFBD><EFBFBD>?<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* funcを呼ぶ * func<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD>
* type!=0 * type!=0 <EFBFBD>Ȃ<EFBFBD>̎<EFBFBD>ނ̂<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_foreachinarea(int (*func)(struct block_list*,va_list), int m, int x0, int y0, int x1, int y1, int type, ...) int map_foreachinarea(int (*func)(struct block_list*,va_list), int m, int x0, int y0, int x1, int y1, int type, ...)
{ {
@ -726,10 +725,10 @@ int map_foreachinarea(int (*func)(struct block_list*,va_list), int m, int x0, in
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_foreachinarea: block count too many!\n"); ShowWarning("map_foreachinarea: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) // 有?かどうかチェック if(bl_list[i]->prev) // <EFBFBD>L?<3F><><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
{ {
va_list ap; va_list ap;
va_start(ap, type); va_start(ap, type);
@ -737,7 +736,7 @@ int map_foreachinarea(int (*func)(struct block_list*,va_list), int m, int x0, in
va_end(ap); va_end(ap);
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD>
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; //[Skotlex] return returnCount; //[Skotlex]
@ -792,10 +791,10 @@ int map_forcountinrange(int (*func)(struct block_list*,va_list), struct block_li
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_forcountinrange: block count too many!\n"); ShowWarning("map_forcountinrange: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) // 有?かどうかチェック if(bl_list[i]->prev) // <EFBFBD>L?<3F><><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
{ {
va_list ap; va_list ap;
va_start(ap, type); va_start(ap, type);
@ -805,7 +804,7 @@ int map_forcountinrange(int (*func)(struct block_list*,va_list), struct block_li
break; break;
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD>
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; //[Skotlex] return returnCount; //[Skotlex]
@ -853,10 +852,10 @@ int map_forcountinarea(int (*func)(struct block_list*,va_list), int m, int x0, i
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_foreachinarea: block count too many!\n"); ShowWarning("map_foreachinarea: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) // 有?かどうかチェック if(bl_list[i]->prev) // <EFBFBD>L?<3F><><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
{ {
va_list ap; va_list ap;
va_start(ap, type); va_start(ap, type);
@ -866,18 +865,18 @@ int map_forcountinarea(int (*func)(struct block_list*,va_list), int m, int x0, i
break; break;
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD>
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; //[Skotlex] return returnCount; //[Skotlex]
} }
/*========================================== /*==========================================
* (x0,y0)-(x1,y1)(dx,dy)? * <EFBFBD><EFBFBD>`(x0,y0)-(x1,y1)<EFBFBD><EFBFBD>(dx,dy)<EFBFBD>ړ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b?
* (L字形)?objに * <EFBFBD>̈<EFBFBD>O<EFBFBD>ɂȂ<EFBFBD>̈<EFBFBD>(<EFBFBD><EFBFBD>`<EFBFBD><EFBFBD>L<EFBFBD><EFBFBD><EFBFBD>`)?<EFBFBD><EFBFBD>obj<EFBFBD><EFBFBD>
* ?funcを呼ぶ * ?<EFBFBD><EFBFBD><EFBFBD><EFBFBD>func<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD>
* *
* dx,dy-1,0,1 * dx,dy<EFBFBD><EFBFBD>-1,0,1<EFBFBD>݂̂Ƃ<EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>ǂ<EFBFBD>Ȓl<EFBFBD>ł<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۂ<EFBFBD><EFBFBD>H<EFBFBD>j
*------------------------------------------*/ *------------------------------------------*/
int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_list* center, int range, int dx, int dy, int type, ...) int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_list* center, int range, int dx, int dy, int type, ...)
{ {
@ -991,7 +990,7 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_foreachinmovearea: block count too many!\n"); ShowWarning("map_foreachinmovearea: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // Prohibit the release from memory
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) if(bl_list[i]->prev)
@ -1002,7 +1001,7 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_
va_end(ap); va_end(ap);
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // Allow Free
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; return returnCount;
@ -1037,10 +1036,10 @@ int map_foreachincell(int (*func)(struct block_list*,va_list), int m, int x, int
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_foreachincell: block count too many!\n"); ShowWarning("map_foreachincell: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) // 有?かどうかチェック if(bl_list[i]->prev) // <EFBFBD>L?<3F><><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
{ {
va_list ap; va_list ap;
va_start(ap, type); va_start(ap, type);
@ -1048,7 +1047,7 @@ int map_foreachincell(int (*func)(struct block_list*,va_list), int m, int x, int
va_end(ap); va_end(ap);
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD>
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; return returnCount;
@ -1274,10 +1273,10 @@ int map_foreachinmap(int (*func)(struct block_list*,va_list), int m, int type,..
if(bl_list_count>=BL_LIST_MAX) if(bl_list_count>=BL_LIST_MAX)
ShowWarning("map_foreachinmap: block count too many!\n"); ShowWarning("map_foreachinmap: block count too many!\n");
map_freeblock_lock(); // メモリからの解放を禁止する map_freeblock_lock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̉<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֎~<7E><><EFBFBD><EFBFBD>
for(i=blockcount;i<bl_list_count;i++) for(i=blockcount;i<bl_list_count;i++)
if(bl_list[i]->prev) // 有?かどうかチェック if(bl_list[i]->prev) // <EFBFBD>L?<3F><><EFBFBD>ǂ<EFBFBD><C782><EFBFBD><EFBFBD>`<60>F<EFBFBD>b<EFBFBD>N
{ {
va_list ap; va_list ap;
va_start(ap, type); va_start(ap, type);
@ -1285,7 +1284,7 @@ int map_foreachinmap(int (*func)(struct block_list*,va_list), int m, int type,..
va_end(ap); va_end(ap);
} }
map_freeblock_unlock(); // 解放を許可する map_freeblock_unlock(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>‚<EFBFBD><EFBFBD><EFBFBD>
bl_list_count = blockcount; bl_list_count = blockcount;
return returnCount; return returnCount;
@ -1324,12 +1323,12 @@ int map_get_new_object_id(void)
} }
/*========================================== /*==========================================
* * <EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>C<EFBFBD>e<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* *
* data==0timerで消えた殊 * data!=0<EFBFBD>? * data==0<EFBFBD>̎b<EFBFBD>timer<EFBFBD>ŏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * data!=0<EFBFBD>̎b͏E<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŏ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ē<EFBFBD>??
* *
* map_clearflooritem(id) * <EFBFBD><EFBFBD>҂́Amap_clearflooritem(id)<EFBFBD><EFBFBD>
* map.h?#defineしてある * map.h?<EFBFBD><EFBFBD>#define<EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data) int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -1469,10 +1468,13 @@ int map_search_freecell(struct block_list *src, int m, short *x,short *y, int rx
} }
/*========================================== /*==========================================
* (m,x,y)3x3以? * Add an item to location (m,x,y)
* * Parameters
* item_dataはamount以外をcopyする * @item_data item attributes
* type flag: &1 MVP item. &2 do stacking check. * @amount quantity
* @m, @x, @y mapid,x,y
* @first_charid, @second_charid, @third_charid, looting priority
* @flag: &1 MVP item. &2 do stacking check.
*------------------------------------------*/ *------------------------------------------*/
int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_charid,int second_charid,int third_charid,int flags) int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_charid,int second_charid,int third_charid,int flags)
{ {
@ -1608,7 +1610,7 @@ void map_reqnickdb(struct map_session_data * sd, int charid)
} }
/*========================================== /*==========================================
* id_dbへblを追加 * id_db<EFBFBD><EFBFBD>bl<EFBFBD><EFBFBD>lj<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
void map_addiddb(struct block_list *bl) void map_addiddb(struct block_list *bl)
{ {
@ -1636,7 +1638,7 @@ void map_addiddb(struct block_list *bl)
} }
/*========================================== /*==========================================
* id_dbからblを削除 * id_db<EFBFBD><EFBFBD><EFBFBD><EFBFBD>bl<EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
void map_deliddb(struct block_list *bl) void map_deliddb(struct block_list *bl)
{ {
@ -1779,7 +1781,7 @@ int map_quit(struct map_session_data *sd) {
} }
/*========================================== /*==========================================
* id?PCを探すNULL * id<EFBFBD><EFBFBD>?<EFBFBD><EFBFBD>PC<EFBFBD><EFBFBD>T<EFBFBD><EFBFBD><EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL
*------------------------------------------*/ *------------------------------------------*/
struct map_session_data * map_id2sd(int id) struct map_session_data * map_id2sd(int id)
{ {
@ -2200,7 +2202,7 @@ bool mapit_exists(struct s_mapiterator* mapit)
} }
/*========================================== /*==========================================
* map.npcへ追加 (warp等の領域持ちのみ) * map.npc<EFBFBD>֒lj<EFBFBD> (warp<EFBFBD><EFBFBD><EFBFBD>̗̈<EFBFBD><EFBFBD><EFBFBD>̂<EFBFBD>)
*------------------------------------------*/ *------------------------------------------*/
bool map_addnpc(int m,struct npc_data *nd) bool map_addnpc(int m,struct npc_data *nd)
{ {
@ -2323,7 +2325,7 @@ void map_removemobs(int m)
} }
/*========================================== /*==========================================
* map名からmap番?? * map<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>map<EFBFBD><EFBFBD>?<EFBFBD><EFBFBD>?<EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_mapname2mapid(const char* name) int map_mapname2mapid(const char* name)
{ {
@ -2351,7 +2353,7 @@ int map_mapindex2mapid(unsigned short mapindex)
} }
/*========================================== /*==========================================
* map名からip,port? * <EFBFBD><EFBFBD><EFBFBD>Imap<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip,port?<EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_mapname2ipport(unsigned short name, uint32* ip, uint16* port) int map_mapname2ipport(unsigned short name, uint32* ip, uint16* port)
{ {
@ -2463,7 +2465,7 @@ int map_random_dir(struct block_list *bl, short *x, short *y)
return 0; return 0;
} }
// gat // gat<EFBFBD>n
inline static struct mapcell map_gat2cell(int gat) { inline static struct mapcell map_gat2cell(int gat) {
struct mapcell cell; struct mapcell cell;
@ -2497,7 +2499,7 @@ static int map_cell2gat(struct mapcell cell)
} }
/*========================================== /*==========================================
* (m,x,y)調 * Confirm if celltype in (m,x,y) match the one given in cellchk
*------------------------------------------*/ *------------------------------------------*/
int map_getcell(int m,int x,int y,cell_chk cellchk) int map_getcell(int m,int x,int y,cell_chk cellchk)
{ {
@ -2751,7 +2753,7 @@ static DBData create_map_data_other_server(DBKey key, va_list args)
} }
/*========================================== /*==========================================
* dbに追加 * <EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>Ǘ<EFBFBD><EFBFBD>̃}<EFBFBD>b<EFBFBD>v<EFBFBD><EFBFBD>db<EFBFBD>ɒlj<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_setipport(unsigned short mapindex, uint32 ip, uint16 port) int map_setipport(unsigned short mapindex, uint32 ip, uint16 port)
{ {
@ -2772,7 +2774,7 @@ int map_setipport(unsigned short mapindex, uint32 ip, uint16 port)
} }
/** /**
* * <EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>Ǘ<EFBFBD><EFBFBD>̃}<EFBFBD>b<EFBFBD>v<EFBFBD><EFBFBD>S<EFBFBD>č
* @see DBApply * @see DBApply
*/ */
int map_eraseallipport_sub(DBKey key, DBData *data, va_list va) int map_eraseallipport_sub(DBKey key, DBData *data, va_list va)
@ -2792,7 +2794,7 @@ int map_eraseallipport(void)
} }
/*========================================== /*==========================================
* dbから削除 * <EFBFBD><EFBFBD><EFBFBD>I<EFBFBD>Ǘ<EFBFBD><EFBFBD>̃}<EFBFBD>b<EFBFBD>v<EFBFBD><EFBFBD>db<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_eraseipport(unsigned short mapindex, uint32 ip, uint16 port) int map_eraseipport(unsigned short mapindex, uint32 ip, uint16 port)
{ {
@ -3235,7 +3237,7 @@ int parse_console(const char* buf)
} }
/*========================================== /*==========================================
* ?? * <EFBFBD>ݒ<EFBFBD>t<EFBFBD>@<EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><EFBFBD>?<EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int map_config_read(char *cfgName) int map_config_read(char *cfgName)
{ {
@ -3599,7 +3601,7 @@ static int cleanup_db_sub(DBKey key, DBData *data, va_list va)
} }
/*========================================== /*==========================================
* map鯖終了 * map<EFBFBD>I<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD>E<EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
void do_final(void) void do_final(void)
{ {
@ -3978,7 +3980,7 @@ int do_init(int argc, char *argv[])
do_init_battleground(); do_init_battleground();
do_init_duel(); do_init_duel();
npc_event_do_oninit(); // npcのOnInitイベント?行 npc_event_do_oninit(); // Init npcs (OnInit)
if( console ) if( console )
{ {

View File

@ -610,15 +610,16 @@ extern char charhelp_txt[];
extern char wisp_server_name[]; extern char wisp_server_name[];
// 鯖全体情報 // users
void map_setusers(int); void map_setusers(int);
int map_getusers(void); int map_getusers(void);
int map_usercount(void); int map_usercount(void);
// block削除関連
// blocklist lock
int map_freeblock(struct block_list *bl); int map_freeblock(struct block_list *bl);
int map_freeblock_lock(void); int map_freeblock_lock(void);
int map_freeblock_unlock(void); int map_freeblock_unlock(void);
// block関連 // blocklist manipulation
int map_addblock(struct block_list* bl); int map_addblock(struct block_list* bl);
int map_delblock(struct block_list* bl); int map_delblock(struct block_list* bl);
int map_moveblock(struct block_list *, int, int, unsigned int); int map_moveblock(struct block_list *, int, int, unsigned int);
@ -631,10 +632,10 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_
int map_foreachincell(int (*func)(struct block_list*,va_list), int m, int x, int y, int type, ...); int map_foreachincell(int (*func)(struct block_list*,va_list), int m, int x, int y, int type, ...);
int map_foreachinpath(int (*func)(struct block_list*,va_list), int m, int x0, int y0, int x1, int y1, int range, int length, int type, ...); int map_foreachinpath(int (*func)(struct block_list*,va_list), int m, int x0, int y0, int x1, int y1, int range, int length, int type, ...);
int map_foreachinmap(int (*func)(struct block_list*,va_list), int m, int type, ...); int map_foreachinmap(int (*func)(struct block_list*,va_list), int m, int type, ...);
//block関連に追加 //blocklist nb in one cell
int map_count_oncell(int m,int x,int y,int type); int map_count_oncell(int m,int x,int y,int type);
struct skill_unit *map_find_skill_unit_oncell(struct block_list *,int x,int y,int skill_id,struct skill_unit *, int flag); struct skill_unit *map_find_skill_unit_oncell(struct block_list *,int x,int y,int skill_id,struct skill_unit *, int flag);
// 一時的object関連 // search and creation
int map_get_new_object_id(void); int map_get_new_object_id(void);
int map_search_freecell(struct block_list *src, int m, short *x, short *y, int rx, int ry, int flag); int map_search_freecell(struct block_list *src, int m, short *x, short *y, int rx, int ry, int flag);
// //
@ -642,13 +643,13 @@ int map_quit(struct map_session_data *);
// npc // npc
bool map_addnpc(int,struct npc_data *); bool map_addnpc(int,struct npc_data *);
// 床アイテム関連 // map item
int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data); int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data);
int map_removemobs_timer(int tid, unsigned int tick, int id, intptr_t data); int map_removemobs_timer(int tid, unsigned int tick, int id, intptr_t data);
#define map_clearflooritem(id) map_clearflooritem_timer(0,0,id,1) #define map_clearflooritem(id) map_clearflooritem_timer(0,0,id,1)
int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_charid,int second_charid,int third_charid,int flags); int map_addflooritem(struct item *item_data,int amount,int m,int x,int y,int first_charid,int second_charid,int third_charid,int flags);
// キャラidキャラ名 変換関連 // player to map session
void map_addnickdb(int charid, const char* nick); void map_addnickdb(int charid, const char* nick);
void map_delnickdb(int charid, const char* nick); void map_delnickdb(int charid, const char* nick);
void map_reqnickdb(struct map_session_data* sd,int charid); void map_reqnickdb(struct map_session_data* sd,int charid);

View File

@ -371,7 +371,7 @@ int mercenary_killbonus(struct mercenary_data *md)
const enum sc_type scs[] = { SC_MERC_FLEEUP, SC_MERC_ATKUP, SC_MERC_HPUP, SC_MERC_SPUP, SC_MERC_HITUP }; const enum sc_type scs[] = { SC_MERC_FLEEUP, SC_MERC_ATKUP, SC_MERC_HPUP, SC_MERC_SPUP, SC_MERC_HITUP };
int index = rnd() % ARRAYLENGTH(scs); int index = rnd() % ARRAYLENGTH(scs);
status_change_start(&md->bl, scs[index], 10000, rnd()%5, 0, 0, 0, 600000, 0); sc_start(&md->bl, scs[index], 100, rnd() % 5, 600000);
return 0; return 0;
} }

View File

@ -2834,7 +2834,7 @@ int mob_warpslave(struct block_list *bl, int range)
} }
/*========================================== /*==========================================
* (foreachinarea) * Count slave sub, curently chking if mob master is the given id
*------------------------------------------*/ *------------------------------------------*/
int mob_countslave_sub(struct block_list *bl,va_list ap) int mob_countslave_sub(struct block_list *bl,va_list ap)
{ {
@ -2849,7 +2849,7 @@ int mob_countslave_sub(struct block_list *bl,va_list ap)
} }
/*========================================== /*==========================================
* * Cout how many slave a mob got on map
*------------------------------------------*/ *------------------------------------------*/
int mob_countslave(struct block_list *bl) int mob_countslave(struct block_list *bl)
{ {
@ -2955,7 +2955,8 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,int skill_id)
} }
/*========================================== /*==========================================
*MOBskillから該当skillidのskillidxを返す * MOBskill lookup (get skillindex trough skillid)
* return -1 if not found
*------------------------------------------*/ *------------------------------------------*/
int mob_skillid2skillidx(int class_,int skillid) int mob_skillid2skillidx(int class_,int skillid)
{ {
@ -3965,7 +3966,7 @@ static bool mob_readdb_mobavail(char* str[], int columns, int current)
class_=atoi(str[0]); class_=atoi(str[0]);
if(mob_db(class_) == mob_dummy) // 値が異常なら処理しない。 if(mob_db(class_) == mob_dummy) // invalid class (probably undefined in db)
{ {
ShowWarning("mob_readdb_mobavail: Unknown mob id %d.\n", class_); ShowWarning("mob_readdb_mobavail: Unknown mob id %d.\n", class_);
return false; return false;

View File

@ -138,9 +138,7 @@ int npc_ontouch2_event(struct map_session_data *sd, struct npc_data *nd)
} }
/*========================================== /*==========================================
* NPCの無効化/ * sub fonction of npc_enable, Run OnTouch event when enabled
* npc_enable
* npc_enable_sub OnTouchイベントを実行
*------------------------------------------*/ *------------------------------------------*/
int npc_enable_sub(struct block_list *bl, va_list ap) int npc_enable_sub(struct block_list *bl, va_list ap)
{ {
@ -167,6 +165,9 @@ int npc_enable_sub(struct block_list *bl, va_list ap)
return 0; return 0;
} }
/*==========================================
* Disable / Enable NPC
*------------------------------------------*/
int npc_enable(const char* name, int flag) int npc_enable(const char* name, int flag)
{ {
struct npc_data* nd = npc_name2id(name); struct npc_data* nd = npc_name2id(name);
@ -198,14 +199,14 @@ int npc_enable(const char* name, int flag)
} else } else
clif_changeoption(&nd->bl); clif_changeoption(&nd->bl);
if( flag&3 && (nd->u.scr.xs >= 0 || nd->u.scr.ys >= 0) ) if( flag&3 && (nd->u.scr.xs >= 0 || nd->u.scr.ys >= 0) ) //check if player standing on a OnTouchArea
map_foreachinarea( npc_enable_sub, nd->bl.m, nd->bl.x-nd->u.scr.xs, nd->bl.y-nd->u.scr.ys, nd->bl.x+nd->u.scr.xs, nd->bl.y+nd->u.scr.ys, BL_PC, nd ); map_foreachinarea( npc_enable_sub, nd->bl.m, nd->bl.x-nd->u.scr.xs, nd->bl.y-nd->u.scr.ys, nd->bl.x+nd->u.scr.xs, nd->bl.y+nd->u.scr.ys, BL_PC, nd );
return 0; return 0;
} }
/*========================================== /*==========================================
* NPCを名前で探す * NPC lookup (get npc_data trough npcname)
*------------------------------------------*/ *------------------------------------------*/
struct npc_data* npc_name2id(const char* name) struct npc_data* npc_name2id(const char* name)
{ {
@ -240,8 +241,9 @@ int npc_rr_secure_timeout_timer(int tid, unsigned int tick, int id, intptr_t dat
return 0; return 0;
} }
#endif #endif
/*========================================== /*==========================================
* * Dequeue event and add timer for execution (100ms)
*------------------------------------------*/ *------------------------------------------*/
int npc_event_dequeue(struct map_session_data* sd) int npc_event_dequeue(struct map_session_data* sd)
{ {
@ -299,7 +301,8 @@ static int npc_event_export(struct npc_data *nd, int i)
int npc_event_sub(struct map_session_data* sd, struct event_data* ev, const char* eventname); //[Lance] int npc_event_sub(struct map_session_data* sd, struct event_data* ev, const char* eventname); //[Lance]
/** /**
* NPCのOn* * Exec name (NPC events) on player or global
* Do on all NPC when called with foreach
* @see DBApply * @see DBApply
*/ */
int npc_event_doall_sub(DBKey key, DBData *data, va_list ap) int npc_event_doall_sub(DBKey key, DBData *data, va_list ap)
@ -363,11 +366,13 @@ int npc_event_do(const char* name)
return c; return c;
} }
// runs the specified event (global only) // runs the specified event (global only)
int npc_event_doall(const char* name) int npc_event_doall(const char* name)
{ {
return npc_event_doall_id(name, 0); return npc_event_doall_id(name, 0);
} }
// runs the specified event, with a RID attached (global only) // runs the specified event, with a RID attached (global only)
int npc_event_doall_id(const char* name, int rid) int npc_event_doall_id(const char* name, int rid)
{ {
@ -388,7 +393,8 @@ bool npc_event_isspecial(const char* eventname)
/*========================================== /*==========================================
* * Clock event execution
* OnMinute/OnClock/OnHour/OnDay/OnDDHHMM
*------------------------------------------*/ *------------------------------------------*/
int npc_event_do_clock(int tid, unsigned int tick, int id, intptr_t data) int npc_event_do_clock(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -435,7 +441,7 @@ int npc_event_do_clock(int tid, unsigned int tick, int id, intptr_t data)
} }
/*========================================== /*==========================================
* OnInitイベント実行(&) * OnInit Event execution (the start of the event and watch)
*------------------------------------------*/ *------------------------------------------*/
void npc_event_do_oninit(void) void npc_event_do_oninit(void)
{ {
@ -445,7 +451,7 @@ void npc_event_do_oninit(void)
} }
/*========================================== /*==========================================
* * Incorporation of the label for the timer event
* called from npc_parse_script * called from npc_parse_script
*------------------------------------------*/ *------------------------------------------*/
int npc_timerevent_export(struct npc_data *nd, int i) int npc_timerevent_export(struct npc_data *nd, int i)
@ -454,7 +460,7 @@ int npc_timerevent_export(struct npc_data *nd, int i)
char *lname = nd->u.scr.label_list[i].name; char *lname = nd->u.scr.label_list[i].name;
int pos = nd->u.scr.label_list[i].pos; int pos = nd->u.scr.label_list[i].pos;
if (sscanf(lname, "OnTimer%d%n", &t, &k) == 1 && lname[k] == '\0') { if (sscanf(lname, "OnTimer%d%n", &t, &k) == 1 && lname[k] == '\0') {
// タイマーイベント // Timer event
struct npc_timerevent_list *te = nd->u.scr.timer_event; struct npc_timerevent_list *te = nd->u.scr.timer_event;
int j, k = nd->u.scr.timeramount; int j, k = nd->u.scr.timeramount;
if (te == NULL) if (te == NULL)
@ -783,7 +789,7 @@ int npc_event_sub(struct map_session_data* sd, struct event_data* ev, const char
} }
/*========================================== /*==========================================
* NPC処理 * NPC processing event type
*------------------------------------------*/ *------------------------------------------*/
int npc_event(struct map_session_data* sd, const char* eventname, int ontouch) int npc_event(struct map_session_data* sd, const char* eventname, int ontouch)
{ {
@ -813,6 +819,9 @@ int npc_event(struct map_session_data* sd, const char* eventname, int ontouch)
return npc_event_sub(sd,ev,eventname); return npc_event_sub(sd,ev,eventname);
} }
/*==========================================
* Sub chk then execute area event type
*------------------------------------------*/
int npc_touch_areanpc_sub(struct block_list *bl, va_list ap) int npc_touch_areanpc_sub(struct block_list *bl, va_list ap)
{ {
struct map_session_data *sd; struct map_session_data *sd;
@ -835,6 +844,10 @@ int npc_touch_areanpc_sub(struct block_list *bl, va_list ap)
return 1; return 1;
} }
/*==========================================
* Chk if sd is still touching his assigned npc.
* if not then it unsets it and searches for another player in range
*------------------------------------------*/
int npc_touchnext_areanpc(struct map_session_data* sd, bool leavemap) int npc_touchnext_areanpc(struct map_session_data* sd, bool leavemap)
{ {
struct npc_data *nd = map_id2nd(sd->touching_id); struct npc_data *nd = map_id2nd(sd->touching_id);
@ -861,7 +874,7 @@ int npc_touchnext_areanpc(struct map_session_data* sd, bool leavemap)
} }
/*========================================== /*==========================================
* NPC処理 * Exec OnTouch for player if in range of area event
*------------------------------------------*/ *------------------------------------------*/
int npc_touch_areanpc(struct map_session_data* sd, int m, int x, int y) int npc_touch_areanpc(struct map_session_data* sd, int m, int x, int y)
{ {
@ -1048,6 +1061,12 @@ int npc_check_areanpc(int flag, int m, int x, int y, int range)
return (map[m].npc[i]->bl.id); return (map[m].npc[i]->bl.id);
} }
/*==========================================
* Chk if player not too far to acces the npc
* return
* npc_data : succes
* NULL : fail
*------------------------------------------*/
struct npc_data* npc_checknear(struct map_session_data* sd, struct block_list* bl) struct npc_data* npc_checknear(struct map_session_data* sd, struct block_list* bl)
{ {
struct npc_data *nd; struct npc_data *nd;
@ -1072,7 +1091,7 @@ struct npc_data* npc_checknear(struct map_session_data* sd, struct block_list* b
} }
/*========================================== /*==========================================
* NPCのオープンチャット発言 * Make NPC talk in global chat (like npctalk)
*------------------------------------------*/ *------------------------------------------*/
int npc_globalmessage(const char* name, const char* mes) int npc_globalmessage(const char* name, const char* mes)
{ {
@ -1114,7 +1133,8 @@ void run_tomb(struct map_session_data* sd, struct npc_data* nd)
} }
/*========================================== /*==========================================
* NPC処理 * NPC 1st call when clicking on npc
* Do specific action for npc type (openshop, run scripts...)
*------------------------------------------*/ *------------------------------------------*/
int npc_click(struct map_session_data* sd, struct npc_data* nd) int npc_click(struct map_session_data* sd, struct npc_data* nd)
{ {
@ -1194,7 +1214,7 @@ int npc_scriptcont(struct map_session_data* sd, int id)
} }
/*========================================== /*==========================================
* * Chk if valid call then open buy or selling list
*------------------------------------------*/ *------------------------------------------*/
int npc_buysellsel(struct map_session_data* sd, int id, int type) int npc_buysellsel(struct map_session_data* sd, int id, int type)
{ {
@ -1211,7 +1231,7 @@ int npc_buysellsel(struct map_session_data* sd, int id, int type)
sd->npc_id=0; sd->npc_id=0;
return 1; return 1;
} }
if (nd->sc.option&OPTION_INVISIBLE) // 無効化されている if (nd->sc.option & OPTION_INVISIBLE) // can't buy if npc is not visible (hack?)
return 1; return 1;
if( nd->class_ < 0 && !sd->state.callshop ) if( nd->class_ < 0 && !sd->state.callshop )
{// not called through a script and is not a visible NPC so an invalid call {// not called through a script and is not a visible NPC so an invalid call
@ -1310,6 +1330,7 @@ int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, uns
return 0; return 0;
} }
//npc_buylist for script-controlled shops. //npc_buylist for script-controlled shops.
static int npc_buylist_sub(struct map_session_data* sd, int n, unsigned short* item_list, struct npc_data* nd) static int npc_buylist_sub(struct map_session_data* sd, int n, unsigned short* item_list, struct npc_data* nd)
{ {
@ -1335,6 +1356,7 @@ static int npc_buylist_sub(struct map_session_data* sd, int n, unsigned short* i
return 0; return 0;
} }
/*========================================== /*==========================================
* Cash Shop Buy * Cash Shop Buy
*------------------------------------------*/ *------------------------------------------*/
@ -1693,6 +1715,8 @@ int npc_selllist(struct map_session_data* sd, int n, unsigned short* item_list)
return 0; return 0;
} }
//Atempt to remove an npc from a map
//This doesn't remove it from map_db
int npc_remove_map(struct npc_data* nd) int npc_remove_map(struct npc_data* nd)
{ {
int m,i; int m,i;
@ -1729,6 +1753,8 @@ static int npc_unload_ev(DBKey key, DBData *data, va_list ap)
return 0; return 0;
} }
//Chk if npc match src_id then unload
//Sub fonction used to found duplicate
static int npc_unload_dup_sub(struct npc_data* nd, va_list args) static int npc_unload_dup_sub(struct npc_data* nd, va_list args)
{ {
int src_id; int src_id;
@ -1745,6 +1771,8 @@ void npc_unload_duplicates(struct npc_data* nd)
map_foreachnpc(npc_unload_dup_sub,nd->bl.id); map_foreachnpc(npc_unload_dup_sub,nd->bl.id);
} }
//Remove an npc from map and db
//single is to free name (for duplicate one I suppose)
int npc_unload(struct npc_data* nd, bool single) { int npc_unload(struct npc_data* nd, bool single) {
nullpo_ret(nd); nullpo_ret(nd);
@ -1957,7 +1985,7 @@ static void npc_parsename(struct npc_data* nd, const char* name, const char* sta
ShowWarning("npc_parsename: Duplicate unique name in file '%s', line'%d'. Renaming '%s' to '%s'.\n", filepath, strline(buffer,start-buffer), nd->exname, newname); ShowWarning("npc_parsename: Duplicate unique name in file '%s', line'%d'. Renaming '%s' to '%s'.\n", filepath, strline(buffer,start-buffer), nd->exname, newname);
ShowDebug("this npc:\n display name '%s'\n unique name '%s'\n map=%s, x=%d, y=%d\n", nd->name, nd->exname, this_mapname, nd->bl.x, nd->bl.y); ShowDebug("this npc:\n display name '%s'\n unique name '%s'\n map=%s, x=%d, y=%d\n", nd->name, nd->exname, this_mapname, nd->bl.x, nd->bl.y);
ShowDebug("other npc:\n display name '%s'\n unique name '%s'\n map=%s, x=%d, y=%d\n", dnd->name, dnd->exname, other_mapname, dnd->bl.x, dnd->bl.y); ShowDebug("other npc in '%s' :\n display name '%s'\n unique name '%s'\n map=%s, x=%d, y=%d\n",dnd->path, dnd->name, dnd->exname, other_mapname, dnd->bl.x, dnd->bl.y);
safestrncpy(nd->exname, newname, sizeof(nd->exname)); safestrncpy(nd->exname, newname, sizeof(nd->exname));
} }
@ -1987,6 +2015,7 @@ static void npc_parsename(struct npc_data* nd, const char* name, const char* sta
} }
} }
//Add then display an npc warp on map
struct npc_data* npc_add_warp(short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y) struct npc_data* npc_add_warp(short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y)
{ {
int i; int i;
@ -2208,7 +2237,8 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const
} }
/** /**
* NPCのラベルデータコンバート * NPCのラベルデータコンバート
* Not sure, seem to add label in a chainlink
* @see DBApply * @see DBApply
*/ */
int npc_convertlabel_db(DBKey key, DBData *data, va_list ap) int npc_convertlabel_db(DBKey key, DBData *data, va_list ap)
@ -2671,6 +2701,7 @@ int npc_duplicate4instance(struct npc_data *snd, int m) {
return 0; return 0;
} }
//Set mapcell CELL_NPC to trigger event later
void npc_setcells(struct npc_data* nd) void npc_setcells(struct npc_data* nd)
{ {
int m = nd->bl.m, x = nd->bl.x, y = nd->bl.y, xs, ys; int m = nd->bl.m, x = nd->bl.x, y = nd->bl.y, xs, ys;
@ -2690,7 +2721,7 @@ void npc_setcells(struct npc_data* nd)
return; // Other types doesn't have touch area return; // Other types doesn't have touch area
} }
if (m < 0 || xs < 0 || ys < 0) if (m < 0 || xs < 0 || ys < 0) //invalid range or map
return; return;
for (i = y-ys; i <= y+ys; i++) { for (i = y-ys; i <= y+ys; i++) {
@ -3052,7 +3083,9 @@ static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const c
} }
/*========================================== /*==========================================
* * Set or disable mapflag on map
* eg : bat_c01 mapflag battleground 2
* also chking if mapflag conflict with another
*------------------------------------------*/ *------------------------------------------*/
static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath) static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
{ {
@ -3317,6 +3350,8 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
return strchr(start,'\n');// continue return strchr(start,'\n');// continue
} }
//Read file and create npc/func/mapflag/monster.. accordly
//@runOnInit should we exec OnInit when it's done ?
void npc_parsesrcfile(const char* filepath, bool runOnInit) void npc_parsesrcfile(const char* filepath, bool runOnInit)
{ {
int m, lines = 0; int m, lines = 0;
@ -3538,11 +3573,11 @@ void npc_read_event_script(void)
ShowInfo("%s: %d '%s' events.\n", config[i].name, script_event[i].event_count, config[i].event_name); ShowInfo("%s: %d '%s' events.\n", config[i].name, script_event[i].event_count, config[i].event_name);
} }
} }
void npc_clear_pathlist(void) { void npc_clear_pathlist(void) {
struct npc_path_data *npd = NULL; struct npc_path_data *npd = NULL;
DBIterator *path_list = db_iterator(npc_path_db); DBIterator *path_list = db_iterator(npc_path_db);
/* free all npc_path_data filepaths */ /* free all npc_path_data filepaths */
for( npd = dbi_first(path_list); dbi_exists(path_list); npd = dbi_next(path_list) ) { for( npd = dbi_first(path_list); dbi_exists(path_list); npd = dbi_next(path_list) ) {
if( npd->path ) if( npd->path )
@ -3551,6 +3586,8 @@ void npc_clear_pathlist(void) {
dbi_destroy(path_list); dbi_destroy(path_list);
} }
//Clear then reload npcs files
int npc_reload(void) { int npc_reload(void) {
struct npc_src_list *nsl; struct npc_src_list *nsl;
int m, i; int m, i;
@ -3646,6 +3683,8 @@ int npc_reload(void) {
} }
return 0; return 0;
} }
//Unload all npc in the given file
bool npc_unloadfile( const char* path ) { bool npc_unloadfile( const char* path ) {
DBIterator * iter = db_iterator(npcname_db); DBIterator * iter = db_iterator(npcname_db);
struct npc_data* nd = NULL; struct npc_data* nd = NULL;
@ -3666,12 +3705,14 @@ bool npc_unloadfile( const char* path ) {
return found; return found;
} }
void do_clear_npc(void) { void do_clear_npc(void) {
db_clear(npcname_db); db_clear(npcname_db);
db_clear(ev_db); db_clear(ev_db);
} }
/*========================================== /*==========================================
* * Destructor
*------------------------------------------*/ *------------------------------------------*/
int do_final_npc(void) { int do_final_npc(void) {
npc_clear_pathlist(); npc_clear_pathlist();

View File

@ -103,14 +103,15 @@ static TBL_PC* party_sd_check(int party_id, int account_id, int char_id)
} }
/*========================================== /*==========================================
* <EFBFBD>I¹ * Destructor
* Called in map shutdown, cleanup var
*------------------------------------------*/ *------------------------------------------*/
void do_final_party(void) void do_final_party(void)
{ {
party_db->destroy(party_db,NULL); party_db->destroy(party_db,NULL);
party_booking_db->destroy(party_booking_db,NULL); // Party Booking [Spiria] party_booking_db->destroy(party_booking_db,NULL); // Party Booking [Spiria]
} }
// <EFBFBD>‰Šú‰» // Constructor, init vars
void do_init_party(void) void do_init_party(void)
{ {
party_db = idb_alloc(DB_OPT_RELEASE_DATA); party_db = idb_alloc(DB_OPT_RELEASE_DATA);
@ -650,7 +651,7 @@ bool party_changeleader(struct map_session_data *sd, struct map_session_data *ts
if( map[sd->bl.m].flag.partylock ) if( map[sd->bl.m].flag.partylock )
{ {
clif_displaymessage(sd->fd, "You cannot change party leaders on this map."); clif_displaymessage(sd->fd, msg_txt(287));
return false; return false;
} }

View File

@ -93,10 +93,10 @@ void party_booking_search(struct map_session_data *sd, short level, short mapid,
bool party_booking_delete(struct map_session_data *sd); bool party_booking_delete(struct map_session_data *sd);
#ifdef RENEWAL_EXP #ifdef RENEWAL_EXP
void party_renewal_exp_mod(unsigned int *base_exp, unsigned int *job_exp, int lvl, int moblvl); void party_renewal_exp_mod(unsigned int *base_exp, unsigned int *job_exp, int lvl, int moblvl);
#endif #endif
#ifdef RENEWAL_DROP #ifdef RENEWAL_DROP
int party_renewal_drop_mod(int diff); int party_renewal_drop_mod(int diff);
#endif #endif
#endif /* _PARTY_H_ */ #endif /* _PARTY_H_ */

View File

@ -45,7 +45,7 @@ static void push_heap_path(int *heap,struct tmp_path *tp,int index)
/*========================================== /*==========================================
* heap update (helper function) * heap update (helper function)
* costが減ったので根の方へ移動 * move toward the root Because cost has decreased
*------------------------------------------*/ *------------------------------------------*/
static void update_heap_path(int *heap,struct tmp_path *tp,int index) static void update_heap_path(int *heap,struct tmp_path *tp,int index)
{ {
@ -147,8 +147,7 @@ static int add_path(int *heap,struct tmp_path *tp,int x,int y,int dist,int befor
/*========================================== /*==========================================
* Find the closest reachable cell, 'count' cells away from (x0,y0) in direction (dx,dy). * Find the closest reachable cell, 'count' cells away from (x0,y0) in direction (dx,dy).
* * Income after the coordinates of the blow
*
*------------------------------------------*/ *------------------------------------------*/
int path_blownpos(int m,int x0,int y0,int dx,int dy,int count) int path_blownpos(int m,int x0,int y0,int dx,int dy,int count)
{ {
@ -343,7 +342,7 @@ bool path_search(struct walkpath_data *wpd,int m,int x0,int y0,int x1,int y1,int
tp[i].flag=0; tp[i].flag=0;
heap[0]=0; heap[0]=0;
push_heap_path(heap,tp,calc_index(x0,y0)); push_heap_path(heap,tp,calc_index(x0,y0));
xs = md->xs-1; // あらかじめ1減算しておく xs = md->xs - 1; // Place by subtracting a pre-
ys = md->ys-1; ys = md->ys-1;
for(;;) for(;;)
@ -361,10 +360,10 @@ bool path_search(struct walkpath_data *wpd,int m,int x0,int y0,int x1,int y1,int
if(x==x1 && y==y1) if(x==x1 && y==y1)
break; break;
// dc[0] : y++ の時のコスト増分 // dc[0] : y++ Incremental cost at the time
// dc[1] : x-- の時のコスト増分 // dc[1] : x--
// dc[2] : y-- の時のコスト増分 // dc[2] : y--
// dc[3] : x++ の時のコスト増分 // dc[3] : x++
if(y < ys && !map_getcellp(md,x ,y+1,cell)) { if(y < ys && !map_getcellp(md,x ,y+1,cell)) {
f |= 1; dc[0] = (y >= y1 ? 20 : 0); f |= 1; dc[0] = (y >= y1 ? 20 : 0);

View File

@ -47,7 +47,7 @@
#include <time.h> #include <time.h>
#define PVP_CALCRANK_INTERVAL 1000 // PVP順位計算の間隔 #define PVP_CALCRANK_INTERVAL 1000 // PVP calculation interval
static unsigned int exp_table[CLASS_COUNT][2][MAX_LEVEL]; static unsigned int exp_table[CLASS_COUNT][2][MAX_LEVEL];
static unsigned int max_level[CLASS_COUNT][2]; static unsigned int max_level[CLASS_COUNT][2];
static unsigned int statp[MAX_LEVEL+1]; static unsigned int statp[MAX_LEVEL+1];
@ -289,7 +289,7 @@ int pc_banding(struct map_session_data *sd, short skill_lv) {
memset(b_sd, 0, sizeof(b_sd)); memset(b_sd, 0, sizeof(b_sd));
i = party_foreachsamemap(pc_check_banding,sd,range,&sd->bl,&c,&b_sd); i = party_foreachsamemap(pc_check_banding,sd,range,&sd->bl,&c,&b_sd);
if( c < 1 ) if( c < 1 ) //just recalc status no need to recalc hp
{ // No more Royal Guards in Banding found. { // No more Royal Guards in Banding found.
if( (sc = status_get_sc(&sd->bl)) != NULL && sc->data[SC_BANDING] ) if( (sc = status_get_sc(&sd->bl)) != NULL && sc->data[SC_BANDING] )
{ {
@ -559,7 +559,7 @@ int pc_makesavestatus(struct map_session_data *sd)
} }
/*========================================== /*==========================================
* ?<EFBFBD>? * Off init ? Connection?
*------------------------------------------*/ *------------------------------------------*/
int pc_setnewpc(struct map_session_data *sd, int account_id, int char_id, int login_id1, unsigned int client_tick, int sex, int fd) int pc_setnewpc(struct map_session_data *sd, int account_id, int char_id, int login_id1, unsigned int client_tick, int sex, int fd)
{ {
@ -833,10 +833,15 @@ bool pc_adoption(struct map_session_data *p1_sd, struct map_session_data *p2_sd,
return false; // Job Change Fail return false; // Job Change Fail
} }
/*=================================================
* Can the player equip the item at index n in inventory
* return
* 0 = no
* 1 = yes
*------------------------------------------------*/
int pc_isequip(struct map_session_data *sd,int n) int pc_isequip(struct map_session_data *sd,int n)
{ {
struct item_data *item; struct item_data *item;
//?生や養子の場合の元の職業を算出する
nullpo_ret(sd); nullpo_ret(sd);
@ -917,8 +922,8 @@ int pc_isequip(struct map_session_data *sd,int n)
} }
/*========================================== /*==========================================
* session idに問題無し * No problem with the session id
* char鯖から送られてきたステ? * set the status that has been sent from char server
*------------------------------------------*/ *------------------------------------------*/
bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_time, int group_id, struct mmo_charstatus *st, bool changing_mapservers) bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_time, int group_id, struct mmo_charstatus *st, bool changing_mapservers)
{ {
@ -1037,7 +1042,7 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
for( i = 0; i < 3; i++ ) for( i = 0; i < 3; i++ )
sd->hate_mob[i] = -1; sd->hate_mob[i] = -1;
// 位置の設定 //warp player
if ((i=pc_setpos(sd,sd->status.last_point.map, sd->status.last_point.x, sd->status.last_point.y, CLR_OUTSIGHT)) != 0) { if ((i=pc_setpos(sd,sd->status.last_point.map, sd->status.last_point.x, sd->status.last_point.y, CLR_OUTSIGHT)) != 0) {
ShowError ("Last_point_map %s - id %d not found (error code %d)\n", mapindex_id2name(sd->status.last_point.map), sd->status.last_point.map, i); ShowError ("Last_point_map %s - id %d not found (error code %d)\n", mapindex_id2name(sd->status.last_point.map), sd->status.last_point.map, i);
@ -1272,7 +1277,7 @@ static int pc_calc_skillpoint(struct map_session_data* sd)
/*========================================== /*==========================================
* ? * Calculation of Skills lvls
*------------------------------------------*/ *------------------------------------------*/
int pc_calc_skilltree(struct map_session_data *sd) int pc_calc_skilltree(struct map_session_data *sd)
{ {
@ -2015,7 +2020,7 @@ int pc_bonus_subele(struct map_session_data* sd, unsigned char ele, short rate,
} }
/*========================================== /*==========================================
* ? ? * ? <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>ɂ<EFBFBD><EFBFBD>\<EFBFBD>͓<EFBFBD><EFBFBD>̃{?<EFBFBD>i<EFBFBD>X<EFBFBD>ݒ<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int pc_bonus(struct map_session_data *sd,int type,int val) int pc_bonus(struct map_session_data *sd,int type,int val)
{ {
@ -2613,7 +2618,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
} }
/*========================================== /*==========================================
* ? ? * ? <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>ɂ<EFBFBD><EFBFBD>\<EFBFBD>͓<EFBFBD><EFBFBD>̃{?<EFBFBD>i<EFBFBD>X<EFBFBD>ݒ<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int pc_bonus2(struct map_session_data *sd,int type,int type2,int val) int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
{ {
@ -3438,7 +3443,7 @@ int pc_skill(TBL_PC* sd, int id, int level, int flag)
return 1; return 1;
} }
/*========================================== /*==========================================
* ?? * Append a card to an item ?
*------------------------------------------*/ *------------------------------------------*/
int pc_insert_card(struct map_session_data* sd, int idx_card, int idx_equip) int pc_insert_card(struct map_session_data* sd, int idx_card, int idx_equip)
{ {
@ -3493,18 +3498,18 @@ int pc_insert_card(struct map_session_data* sd, int idx_card, int idx_equip)
} }
// //
// アイテム物 // Items
// //
/*========================================== /*==========================================
* * Update buying value by skills
*------------------------------------------*/ *------------------------------------------*/
int pc_modifybuyvalue(struct map_session_data *sd,int orig_value) int pc_modifybuyvalue(struct map_session_data *sd,int orig_value)
{ {
int skill,val = orig_value,rate1 = 0,rate2 = 0; int skill,val = orig_value,rate1 = 0,rate2 = 0;
if((skill=pc_checkskill(sd,MC_DISCOUNT))>0) // ディスカウント if((skill=pc_checkskill(sd,MC_DISCOUNT))>0) // merchant discount
rate1 = 5+skill*2-((skill==10)? 1:0); rate1 = 5+skill*2-((skill==10)? 1:0);
if((skill=pc_checkskill(sd,RG_COMPULSION))>0) // コムパルションディスカウント if((skill=pc_checkskill(sd,RG_COMPULSION))>0) // rogue discount
rate2 = 5+skill*4; rate2 = 5+skill*4;
if(rate1 < rate2) rate1 = rate2; if(rate1 < rate2) rate1 = rate2;
if(rate1) if(rate1)
@ -3516,12 +3521,12 @@ int pc_modifybuyvalue(struct map_session_data *sd,int orig_value)
} }
/*========================================== /*==========================================
* ? * Update selling value by skills
*------------------------------------------*/ *------------------------------------------*/
int pc_modifysellvalue(struct map_session_data *sd,int orig_value) int pc_modifysellvalue(struct map_session_data *sd,int orig_value)
{ {
int skill,val = orig_value,rate = 0; int skill,val = orig_value,rate = 0;
if((skill=pc_checkskill(sd,MC_OVERCHARGE))>0) // オ?バ?チャ?ジ if((skill=pc_checkskill(sd,MC_OVERCHARGE))>0) //OverCharge
rate = 5+skill*2-((skill==10)? 1:0); rate = 5+skill*2-((skill==10)? 1:0);
if(rate) if(rate)
val = (int)((double)orig_value*(double)(100+rate)/100.); val = (int)((double)orig_value*(double)(100+rate)/100.);
@ -3532,8 +3537,8 @@ int pc_modifysellvalue(struct map_session_data *sd,int orig_value)
} }
/*========================================== /*==========================================
* 使 * Checking if we have enough place on inventory for new item
* 3 * Make sure to take 30k as limit (for client I guess)
*------------------------------------------*/ *------------------------------------------*/
int pc_checkadditem(struct map_session_data *sd,int nameid,int amount) int pc_checkadditem(struct map_session_data *sd,int nameid,int amount)
{ {
@ -3566,7 +3571,8 @@ int pc_checkadditem(struct map_session_data *sd,int nameid,int amount)
} }
/*========================================== /*==========================================
* ? * Return number of available place in inventory
* Each non stackable item will reduce place by 1
*------------------------------------------*/ *------------------------------------------*/
int pc_inventoryblank(struct map_session_data *sd) int pc_inventoryblank(struct map_session_data *sd)
{ {
@ -3726,7 +3732,7 @@ int pc_getzeny(struct map_session_data *sd,int zeny)
} }
/*========================================== /*==========================================
* * Searching a specified itemid in inventory and return his stored index
*------------------------------------------*/ *------------------------------------------*/
int pc_search_inventory(struct map_session_data *sd,int item_id) int pc_search_inventory(struct map_session_data *sd,int item_id)
{ {
@ -3738,7 +3744,16 @@ int pc_search_inventory(struct map_session_data *sd,int item_id)
} }
/*========================================== /*==========================================
* ?item構造?? * Attempt tp add a new item in inventory
* return
0 = success
1 = invalid itemid not found or negative amount
2 = overweight
3 = ?
4 = no free place found
5 = max amount reached
6 = ?
7 = stack limitation
*------------------------------------------*/ *------------------------------------------*/
int pc_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type) int pc_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type)
{ {
@ -3821,7 +3836,10 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount,e_l
} }
/*========================================== /*==========================================
* * Remove an item at index n from inventory by amount
* return
* 0 = succes
* 1 = invalid itemid or negative amount
*------------------------------------------*/ *------------------------------------------*/
int pc_delitem(struct map_session_data *sd,int n,int amount,int type, short reason, e_log_pick_type log_type) int pc_delitem(struct map_session_data *sd,int n,int amount,int type, short reason, e_log_pick_type log_type)
{ {
@ -3849,7 +3867,10 @@ int pc_delitem(struct map_session_data *sd,int n,int amount,int type, short reas
} }
/*========================================== /*==========================================
* * Attempt to drop an item
* return
* 0 = fail
* 1 = success
*------------------------------------------*/ *------------------------------------------*/
int pc_dropitem(struct map_session_data *sd,int n,int amount) int pc_dropitem(struct map_session_data *sd,int n,int amount)
{ {
@ -3890,7 +3911,10 @@ int pc_dropitem(struct map_session_data *sd,int n,int amount)
} }
/*========================================== /*==========================================
* * Attempt to pickup an item
* return
* 0 = fail
* 1 = success
*------------------------------------------*/ *------------------------------------------*/
int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem) int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
{ {
@ -3903,7 +3927,7 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
nullpo_ret(fitem); nullpo_ret(fitem);
if(!check_distance_bl(&fitem->bl, &sd->bl, 2) && sd->ud.skillid!=BS_GREED) if(!check_distance_bl(&fitem->bl, &sd->bl, 2) && sd->ud.skillid!=BS_GREED)
return 0; // 距離が遠い return 0; // Distance is too far
if (sd->status.party_id) if (sd->status.party_id)
p = party_search(sd->status.party_id); p = party_search(sd->status.party_id);
@ -3957,6 +3981,12 @@ int pc_takeitem(struct map_session_data *sd,struct flooritem_data *fitem)
return 1; return 1;
} }
/*==========================================
* Can we use the item ?
* Return
* 0 = no
* 1 = yes
*------------------------------------------*/
int pc_isUseitem(struct map_session_data *sd,int n) int pc_isUseitem(struct map_session_data *sd,int n)
{ {
struct item_data *item; struct item_data *item;
@ -3975,7 +4005,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
if( !item->script ) //if it has no script, you can't really consume it! if( !item->script ) //if it has no script, you can't really consume it!
return 0; return 0;
switch( nameid ) switch( nameid ) //@TODO, lot oh harcoded nameid here
{ {
case 605: // Anodyne case 605: // Anodyne
if( map_flag_gvg(sd->bl.m) ) if( map_flag_gvg(sd->bl.m) )
@ -4117,7 +4147,10 @@ int pc_isUseitem(struct map_session_data *sd,int n)
} }
/*========================================== /*==========================================
* 使 * Last checks et use item
* return
* 0 = fail
* 1 = success
*------------------------------------------*/ *------------------------------------------*/
int pc_useitem(struct map_session_data *sd,int n) int pc_useitem(struct map_session_data *sd,int n)
{ {
@ -4240,7 +4273,10 @@ int pc_useitem(struct map_session_data *sd,int n)
} }
/*========================================== /*==========================================
* ??item構造?? * Add item on cart for given index
* return
* 0 = success
* 1 = fail
*------------------------------------------*/ *------------------------------------------*/
int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type) int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type)
{ {
@ -4306,7 +4342,10 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun
} }
/*========================================== /*==========================================
* ? * Delete item on cart for given index
* return
* 0 = success
* 1 = fail
*------------------------------------------*/ *------------------------------------------*/
int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type,e_log_pick_type log_type) int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type,e_log_pick_type log_type)
{ {
@ -4333,7 +4372,10 @@ int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type,e_log_
} }
/*========================================== /*==========================================
* ? * Transfert item from inventory to cart
* return
* 0 = fail
* 1 = succes
*------------------------------------------*/ *------------------------------------------*/
int pc_putitemtocart(struct map_session_data *sd,int idx,int amount) int pc_putitemtocart(struct map_session_data *sd,int idx,int amount)
{ {
@ -4356,7 +4398,10 @@ int pc_putitemtocart(struct map_session_data *sd,int idx,int amount)
} }
/*========================================== /*==========================================
* ???(?) * Get number of item on cart
* return
-1 = itemid not found or no amount found
x = remaining itemid on cart after get
*------------------------------------------*/ *------------------------------------------*/
int pc_cartitem_amount(struct map_session_data* sd, int idx, int amount) int pc_cartitem_amount(struct map_session_data* sd, int idx, int amount)
{ {
@ -4372,7 +4417,10 @@ int pc_cartitem_amount(struct map_session_data* sd, int idx, int amount)
} }
/*========================================== /*==========================================
* ? * Retrieve an item at index idx from cart
* return
* 0 = player not found or (FIXME) succes (from pc_cart_delitem)
* 1 = failure
*------------------------------------------*/ *------------------------------------------*/
int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount) int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount)
{ {
@ -4396,7 +4444,7 @@ int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount)
} }
/*========================================== /*==========================================
* * Display item stolen msg to player sd
*------------------------------------------*/ *------------------------------------------*/
int pc_show_steal(struct block_list *bl,va_list ap) int pc_show_steal(struct block_list *bl,va_list ap)
{ {
@ -4418,7 +4466,10 @@ int pc_show_steal(struct block_list *bl,va_list ap)
return 0; return 0;
} }
/*========================================== /*==========================================
* * Stole an item from bl (mob)
* return
* 0 = fail
* 1 = succes
*------------------------------------------*/ *------------------------------------------*/
int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv) int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
{ {
@ -4499,7 +4550,10 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
} }
/*========================================== /*==========================================
* * Stole zeny from bl (mob)
* return
* 0 = fail
* 1 = success
*------------------------------------------*/ *------------------------------------------*/
int pc_steal_coin(struct map_session_data *sd,struct block_list *target) int pc_steal_coin(struct map_session_data *sd,struct block_list *target)
{ {
@ -4699,7 +4753,11 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
} }
/*========================================== /*==========================================
* PCのランダムワ? * Warp player sd to random location on current map
* may fail if no Cell walkable found (1000 attempt)
* return
* 0 = fail or FIXME succes (from pc_setpos)
* x(1|2) = fail
*------------------------------------------*/ *------------------------------------------*/
int pc_randomwarp(struct map_session_data *sd, clr_type type) int pc_randomwarp(struct map_session_data *sd, clr_type type)
{ {
@ -4710,7 +4768,7 @@ int pc_randomwarp(struct map_session_data *sd, clr_type type)
m=sd->bl.m; m=sd->bl.m;
if (map[sd->bl.m].flag.noteleport) // テレポ?ト禁止 if (map[sd->bl.m].flag.noteleport) //Teleport forbiden
return 0; return 0;
do{ do{
@ -4774,10 +4832,10 @@ int pc_memo(struct map_session_data* sd, int pos)
} }
// //
// 武器?? // Skills
// //
/*========================================== /*==========================================
* ? Lvが返る * Return player sd skilllv learned for given skill
*------------------------------------------*/ *------------------------------------------*/
int pc_checkskill(struct map_session_data *sd,int skill_id) int pc_checkskill(struct map_session_data *sd,int skill_id)
{ {
@ -4803,13 +4861,13 @@ int pc_checkskill(struct map_session_data *sd,int skill_id)
} }
/*========================================== /*==========================================
* ??? * <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD>X<EFBFBD>ɂ<EFBFBD><EFBFBD>X<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD>??<EFBFBD>`<EFBFBD>F<EFBFBD>b<EFBFBD>N
* ? * <EFBFBD><EFBFBD>?<EFBFBD>F
* struct map_session_data *sd ? * struct map_session_data *sd <EFBFBD>Z<EFBFBD>b<EFBFBD>V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>f?<EFBFBD>^
* int nameid ?ID * int nameid ?<EFBFBD><EFBFBD><EFBFBD>iID
* * <EFBFBD>Ԃ<EFBFBD>l<EFBFBD>F
* 0 ? * 0 ?<EFBFBD>X<EFBFBD>Ȃ<EFBFBD>
* -1 * -1 <EFBFBD>X<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int pc_checkallowskill(struct map_session_data *sd) int pc_checkallowskill(struct map_session_data *sd)
{ {
@ -4859,7 +4917,8 @@ int pc_checkallowskill(struct map_session_data *sd)
} }
/*========================================== /*==========================================
* ? * Return equiped itemid? on player sd at pos
* if -1 mean nothing equiped
*------------------------------------------*/ *------------------------------------------*/
int pc_checkequip(struct map_session_data *sd,int pos) int pc_checkequip(struct map_session_data *sd,int pos)
{ {
@ -5562,7 +5621,7 @@ static void pc_calcexp(struct map_session_data *sd, unsigned int *base_exp, unsi
return; return;
} }
/*========================================== /*==========================================
* ?? * Give x exp at sd player and calculate remaining exp for next lvl
*------------------------------------------*/ *------------------------------------------*/
int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int base_exp,unsigned int job_exp,bool quest) int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int base_exp,unsigned int job_exp,bool quest)
{ {
@ -5655,8 +5714,10 @@ unsigned int pc_maxjoblv(struct map_session_data *sd)
} }
/*========================================== /*==========================================
* base level側必要?? * base level exp lookup.
*------------------------------------------*/ *------------------------------------------*/
///How much bexp do player need for next level
unsigned int pc_nextbaseexp(struct map_session_data *sd) unsigned int pc_nextbaseexp(struct map_session_data *sd)
{ {
nullpo_ret(sd); nullpo_ret(sd);
@ -5667,6 +5728,7 @@ unsigned int pc_nextbaseexp(struct map_session_data *sd)
return exp_table[pc_class2idx(sd->status.class_)][0][sd->status.base_level-1]; return exp_table[pc_class2idx(sd->status.class_)][0][sd->status.base_level-1];
} }
///How much bexp do player need for this level
unsigned int pc_thisbaseexp(struct map_session_data *sd) unsigned int pc_thisbaseexp(struct map_session_data *sd)
{ {
if(sd->status.base_level>pc_maxbaselv(sd) || sd->status.base_level<=1) if(sd->status.base_level>pc_maxbaselv(sd) || sd->status.base_level<=1)
@ -5677,8 +5739,13 @@ unsigned int pc_thisbaseexp(struct map_session_data *sd)
/*========================================== /*==========================================
* job level側必要?? * job level exp lookup
* return
* 0 = not found
* x = exp for level
*------------------------------------------*/ *------------------------------------------*/
///How much jexp do player need for next level
unsigned int pc_nextjobexp(struct map_session_data *sd) unsigned int pc_nextjobexp(struct map_session_data *sd)
{ {
nullpo_ret(sd); nullpo_ret(sd);
@ -5688,6 +5755,7 @@ unsigned int pc_nextjobexp(struct map_session_data *sd)
return exp_table[pc_class2idx(sd->status.class_)][1][sd->status.job_level-1]; return exp_table[pc_class2idx(sd->status.class_)][1][sd->status.job_level-1];
} }
///How much jexp do player need for next level
unsigned int pc_thisjobexp(struct map_session_data *sd) unsigned int pc_thisjobexp(struct map_session_data *sd)
{ {
if(sd->status.job_level>pc_maxjoblv(sd) || sd->status.job_level<=1) if(sd->status.job_level>pc_maxjoblv(sd) || sd->status.job_level<=1)
@ -5857,7 +5925,8 @@ int pc_statusup2(struct map_session_data* sd, int type, int val)
} }
/*========================================== /*==========================================
* * Update skilllv for player sd
* Skill point allocation
*------------------------------------------*/ *------------------------------------------*/
int pc_skillup(struct map_session_data *sd,int skill_num) int pc_skillup(struct map_session_data *sd,int skill_num)
{ {
@ -6353,6 +6422,9 @@ void pc_damage(struct map_session_data *sd,struct block_list *src,unsigned int h
sd->canlog_tick = gettick(); sd->canlog_tick = gettick();
} }
/*==========================================
* Invoked when a player have negative current hp
*------------------------------------------*/
int pc_dead(struct map_session_data *sd,struct block_list *src) int pc_dead(struct map_session_data *sd,struct block_list *src)
{ {
int i=0,j=0,k=0; int i=0,j=0,k=0;
@ -6684,10 +6756,10 @@ void pc_revive(struct map_session_data *sd,unsigned int hp, unsigned int sp) {
guild_guildaura_refresh(sd,GD_HAWKEYES,guild_checkskill(sd->state.gmaster_flag,GD_HAWKEYES)); guild_guildaura_refresh(sd,GD_HAWKEYES,guild_checkskill(sd->state.gmaster_flag,GD_HAWKEYES));
} }
} }
// script? 連 // script
// //
/*========================================== /*==========================================
* script用PCステ?? * script reading pc status registry
*------------------------------------------*/ *------------------------------------------*/
int pc_readparam(struct map_session_data* sd,int type) int pc_readparam(struct map_session_data* sd,int type)
{ {
@ -6733,7 +6805,7 @@ int pc_readparam(struct map_session_data* sd,int type)
} }
/*========================================== /*==========================================
* script用PCステ? * script set pc status registry
*------------------------------------------*/ *------------------------------------------*/
int pc_setparam(struct map_session_data *sd,int type,int val) int pc_setparam(struct map_session_data *sd,int type,int val)
{ {
@ -6901,7 +6973,9 @@ void pc_heal(struct map_session_data *sd,unsigned int hp,unsigned int sp, int ty
} }
/*========================================== /*==========================================
* HP/SP回復 * HP/SP Recovery
* Heal player hp nad/or sp linearly
* Calculate bonus by status
*------------------------------------------*/ *------------------------------------------*/
int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp) int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
{ {
@ -6967,7 +7041,8 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp)
} }
/*========================================== /*==========================================
* HP/SP回復 * HP/SP Recovery
* Heal player hp nad/or sp by rate
*------------------------------------------*/ *------------------------------------------*/
int pc_percentheal(struct map_session_data *sd,int hp,int sp) int pc_percentheal(struct map_session_data *sd,int hp,int sp)
{ {
@ -7005,9 +7080,7 @@ int pc_percentheal(struct map_session_data *sd,int hp,int sp)
} }
/*========================================== /*==========================================
* ? * Called when player changing job
* ? job 023
* upper 0, ? 1, 2, -1
* Rewrote to make it tidider [Celest] * Rewrote to make it tidider [Celest]
*------------------------------------------*/ *------------------------------------------*/
int pc_jobchange(struct map_session_data *sd,int job, int upper) int pc_jobchange(struct map_session_data *sd,int job, int upper)
@ -7099,7 +7172,7 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
for(i=0;i<EQI_MAX;i++) { for(i=0;i<EQI_MAX;i++) {
if(sd->equip_index[i] >= 0) if(sd->equip_index[i] >= 0)
if(!pc_isequip(sd,sd->equip_index[i])) if(!pc_isequip(sd,sd->equip_index[i]))
pc_unequipitem(sd,sd->equip_index[i],2); // ?備外し pc_unequipitem(sd,sd->equip_index[i],2); // unequip invalid item for class
} }
//Change look, if disguised, you need to undisguise //Change look, if disguised, you need to undisguise
@ -7170,7 +7243,7 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
} }
/*========================================== /*==========================================
* ? * Tell client player sd has change equipement
*------------------------------------------*/ *------------------------------------------*/
int pc_equiplookall(struct map_session_data *sd) int pc_equiplookall(struct map_session_data *sd)
{ {
@ -7187,7 +7260,7 @@ int pc_equiplookall(struct map_session_data *sd)
} }
/*========================================== /*==========================================
* ? * Tell client player sd has change look (hair,equip...)
*------------------------------------------*/ *------------------------------------------*/
int pc_changelook(struct map_session_data *sd,int type,int val) int pc_changelook(struct map_session_data *sd,int type,int val)
{ {
@ -7247,7 +7320,7 @@ int pc_changelook(struct map_session_data *sd,int type,int val)
} }
/*========================================== /*==========================================
* ?(,,?) * Give an option (type) to player (sd) and display it to client
*------------------------------------------*/ *------------------------------------------*/
int pc_setoption(struct map_session_data *sd,int type) int pc_setoption(struct map_session_data *sd,int type)
{ {
@ -7364,7 +7437,7 @@ int pc_setoption(struct map_session_data *sd,int type)
} }
/*========================================== /*==========================================
* ? * Give player a cart
*------------------------------------------*/ *------------------------------------------*/
int pc_setcart(struct map_session_data *sd,int type) { int pc_setcart(struct map_session_data *sd,int type) {
#ifndef NEW_CARTS #ifndef NEW_CARTS
@ -7414,12 +7487,12 @@ int pc_setcart(struct map_session_data *sd,int type) {
} }
/*========================================== /*==========================================
* * Give player a falcon
*------------------------------------------*/ *------------------------------------------*/
int pc_setfalcon(TBL_PC* sd, int flag) int pc_setfalcon(TBL_PC* sd, int flag)
{ {
if( flag ){ if( flag ){
if( pc_checkskill(sd,HT_FALCON)>0 ) // ファルコンマスタリ?スキル所持 if( pc_checkskill(sd,HT_FALCON)>0 ) // <EFBFBD>t<EFBFBD>@<40><><EFBFBD>R<EFBFBD><52><EFBFBD>}<7D>X<EFBFBD>^<5E><>?<3F>X<EFBFBD>L<EFBFBD><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pc_setoption(sd,sd->sc.option|OPTION_FALCON); pc_setoption(sd,sd->sc.option|OPTION_FALCON);
} else if( pc_isfalcon(sd) ){ } else if( pc_isfalcon(sd) ){
pc_setoption(sd,sd->sc.option&~OPTION_FALCON); // remove falcon pc_setoption(sd,sd->sc.option&~OPTION_FALCON); // remove falcon
@ -7429,12 +7502,12 @@ int pc_setfalcon(TBL_PC* sd, int flag)
} }
/*========================================== /*==========================================
* * Set player riding
*------------------------------------------*/ *------------------------------------------*/
int pc_setriding(TBL_PC* sd, int flag) int pc_setriding(TBL_PC* sd, int flag)
{ {
if( flag ){ if( flag ){
if( pc_checkskill(sd,KN_RIDING) > 0 ) // ライディングスキル所持 if( pc_checkskill(sd,KN_RIDING) > 0 ) // <EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>f<EFBFBD>B<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>X<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pc_setoption(sd, sd->sc.option|OPTION_RIDING); pc_setoption(sd, sd->sc.option|OPTION_RIDING);
} else if( pc_isriding(sd) ){ } else if( pc_isriding(sd) ){
pc_setoption(sd, sd->sc.option&~OPTION_RIDING); pc_setoption(sd, sd->sc.option&~OPTION_RIDING);
@ -7444,7 +7517,7 @@ int pc_setriding(TBL_PC* sd, int flag)
} }
/*========================================== /*==========================================
* * Give player a mado
*------------------------------------------*/ *------------------------------------------*/
int pc_setmadogear(TBL_PC* sd, int flag) int pc_setmadogear(TBL_PC* sd, int flag)
{ {
@ -7459,7 +7532,7 @@ int pc_setmadogear(TBL_PC* sd, int flag)
} }
/*========================================== /*==========================================
* * Check if player can drop an item
*------------------------------------------*/ *------------------------------------------*/
int pc_candrop(struct map_session_data *sd, struct item *item) int pc_candrop(struct map_session_data *sd, struct item *item)
{ {
@ -7471,7 +7544,8 @@ int pc_candrop(struct map_session_data *sd, struct item *item)
} }
/*========================================== /*==========================================
* script用??? * Read ram register for player sd
* get val (int) from reg for player sd
*------------------------------------------*/ *------------------------------------------*/
int pc_readreg(struct map_session_data* sd, int reg) int pc_readreg(struct map_session_data* sd, int reg)
{ {
@ -7483,7 +7557,8 @@ int pc_readreg(struct map_session_data* sd, int reg)
return ( i < sd->reg_num ) ? sd->reg[i].data : 0; return ( i < sd->reg_num ) ? sd->reg[i].data : 0;
} }
/*========================================== /*==========================================
* script用?? * Set ram register for player sd
* memo val(int) at reg for player sd
*------------------------------------------*/ *------------------------------------------*/
int pc_setreg(struct map_session_data* sd, int reg, int val) int pc_setreg(struct map_session_data* sd, int reg, int val)
{ {
@ -7511,7 +7586,8 @@ int pc_setreg(struct map_session_data* sd, int reg, int val)
} }
/*========================================== /*==========================================
* script用文字列??? * Read ram register for player sd
* get val (str) from reg for player sd
*------------------------------------------*/ *------------------------------------------*/
char* pc_readregstr(struct map_session_data* sd, int reg) char* pc_readregstr(struct map_session_data* sd, int reg)
{ {
@ -7523,7 +7599,8 @@ char* pc_readregstr(struct map_session_data* sd, int reg)
return ( i < sd->regstr_num ) ? sd->regstr[i].data : NULL; return ( i < sd->regstr_num ) ? sd->regstr[i].data : NULL;
} }
/*========================================== /*==========================================
* script用文字列?? * Set ram register for player sd
* memo val(str) at reg for player sd
*------------------------------------------*/ *------------------------------------------*/
int pc_setregstr(struct map_session_data* sd, int reg, const char* str) int pc_setregstr(struct map_session_data* sd, int reg, const char* str)
{ {
@ -7803,7 +7880,7 @@ int pc_setregistry_str(struct map_session_data *sd,const char *reg,const char *v
} }
/*========================================== /*==========================================
* ?? * Exec eventtimer for player sd (retrieved from map_session (id))
*------------------------------------------*/ *------------------------------------------*/
static int pc_eventtimer(int tid, unsigned int tick, int id, intptr_t data) static int pc_eventtimer(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -7828,7 +7905,7 @@ static int pc_eventtimer(int tid, unsigned int tick, int id, intptr_t data)
} }
/*========================================== /*==========================================
* ? * Add eventtimer for player sd ?
*------------------------------------------*/ *------------------------------------------*/
int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name) int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name)
{ {
@ -7846,7 +7923,7 @@ int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name)
} }
/*========================================== /*==========================================
* ? * Del eventtimer for player sd ?
*------------------------------------------*/ *------------------------------------------*/
int pc_deleventtimer(struct map_session_data *sd,const char *name) int pc_deleventtimer(struct map_session_data *sd,const char *name)
{ {
@ -7876,7 +7953,7 @@ int pc_deleventtimer(struct map_session_data *sd,const char *name)
} }
/*========================================== /*==========================================
* ? * Update eventtimer count for player sd
*------------------------------------------*/ *------------------------------------------*/
int pc_addeventtimercount(struct map_session_data *sd,const char *name,int tick) int pc_addeventtimercount(struct map_session_data *sd,const char *name,int tick)
{ {
@ -7895,7 +7972,7 @@ int pc_addeventtimercount(struct map_session_data *sd,const char *name,int tick)
} }
/*========================================== /*==========================================
* ? * Remove all eventtimer for player sd
*------------------------------------------*/ *------------------------------------------*/
int pc_cleareventtimer(struct map_session_data *sd) int pc_cleareventtimer(struct map_session_data *sd)
{ {
@ -8068,7 +8145,7 @@ int pc_load_combo(struct map_session_data *sd) {
return ret; return ret;
} }
/*========================================== /*==========================================
* Attempt to equip item in inventory index 'n' in the EQP_ 'req_pos' * Equip item on player sd at req_pos from inventory index n
*------------------------------------------*/ *------------------------------------------*/
int pc_equipitem(struct map_session_data *sd,int n,int req_pos) int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
{ {
@ -8269,7 +8346,7 @@ int pc_equipitem(struct map_session_data *sd,int n,int req_pos)
} }
/*========================================== /*==========================================
* ? * Called when attemting to unequip an item from player
* type: * type:
* 0 - only unequip * 0 - only unequip
* 1 - calculate status after unequipping * 1 - calculate status after unequipping
@ -8432,8 +8509,8 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag) {
} }
/*========================================== /*==========================================
* index番? * Checking if player (sd) have unauthorize, invalide item
* ? ? * on inventory, cart, equiped for the map (item_noequip)
*------------------------------------------*/ *------------------------------------------*/
int pc_checkitem(struct map_session_data *sd) int pc_checkitem(struct map_session_data *sd)
{ {
@ -8513,7 +8590,7 @@ int pc_checkitem(struct map_session_data *sd)
} }
/*========================================== /*==========================================
* PVP順位計算用(foreachinarea) * Update PVP rank for sd1 in cmp to sd2
*------------------------------------------*/ *------------------------------------------*/
int pc_calc_pvprank_sub(struct block_list *bl,va_list ap) int pc_calc_pvprank_sub(struct block_list *bl,va_list ap)
{ {
@ -8532,7 +8609,8 @@ int pc_calc_pvprank_sub(struct block_list *bl,va_list ap)
return 0; return 0;
} }
/*========================================== /*==========================================
* PVP順位計算 * Calculate new rank beetween all present players (map_foreachinarea)
* and display result
*------------------------------------------*/ *------------------------------------------*/
int pc_calc_pvprank(struct map_session_data *sd) int pc_calc_pvprank(struct map_session_data *sd)
{ {
@ -8547,7 +8625,7 @@ int pc_calc_pvprank(struct map_session_data *sd)
return sd->pvp_rank; return sd->pvp_rank;
} }
/*========================================== /*==========================================
* PVP順位計算(timer) * Calculate next sd ranking calculation from config
*------------------------------------------*/ *------------------------------------------*/
int pc_calc_pvprank_timer(int tid, unsigned int tick, int id, intptr_t data) int pc_calc_pvprank_timer(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -8569,7 +8647,10 @@ int pc_calc_pvprank_timer(int tid, unsigned int tick, int id, intptr_t data)
} }
/*========================================== /*==========================================
* sdは結婚しているか(?char_idを返す) * Checking if sd is married
* Return
* partner_id = yes,
* 0 = no
*------------------------------------------*/ *------------------------------------------*/
int pc_ismarried(struct map_session_data *sd) int pc_ismarried(struct map_session_data *sd)
{ {
@ -8581,7 +8662,10 @@ int pc_ismarried(struct map_session_data *sd)
return 0; return 0;
} }
/*========================================== /*==========================================
* sdがdstsdと結婚(dstsdsdの結婚?) * Marry player sd to player dstsd
* return
* -1 = fail
* 0 = success
*------------------------------------------*/ *------------------------------------------*/
int pc_marriage(struct map_session_data *sd,struct map_session_data *dstsd) int pc_marriage(struct map_session_data *sd,struct map_session_data *dstsd)
{ {
@ -8596,6 +8680,9 @@ int pc_marriage(struct map_session_data *sd,struct map_session_data *dstsd)
/*========================================== /*==========================================
* Divorce sd from its partner * Divorce sd from its partner
* return
* -1 = fail
* 0 = success
*------------------------------------------*/ *------------------------------------------*/
int pc_divorce(struct map_session_data *sd) int pc_divorce(struct map_session_data *sd)
{ {
@ -8634,7 +8721,7 @@ int pc_divorce(struct map_session_data *sd)
} }
/*========================================== /*==========================================
* sdの相方のmap_session_dataを返す * Get sd partner charid. (Married partner)
*------------------------------------------*/ *------------------------------------------*/
struct map_session_data *pc_get_partner(struct map_session_data *sd) struct map_session_data *pc_get_partner(struct map_session_data *sd)
{ {
@ -8645,6 +8732,9 @@ struct map_session_data *pc_get_partner(struct map_session_data *sd)
return NULL; return NULL;
} }
/*==========================================
* Get sd father charid. (Need to be baby)
*------------------------------------------*/
struct map_session_data *pc_get_father (struct map_session_data *sd) struct map_session_data *pc_get_father (struct map_session_data *sd)
{ {
if (sd && sd->class_&JOBL_BABY && sd->status.father > 0) if (sd && sd->class_&JOBL_BABY && sd->status.father > 0)
@ -8654,6 +8744,9 @@ struct map_session_data *pc_get_father (struct map_session_data *sd)
return NULL; return NULL;
} }
/*==========================================
* Get sd mother charid. (Need to be baby)
*------------------------------------------*/
struct map_session_data *pc_get_mother (struct map_session_data *sd) struct map_session_data *pc_get_mother (struct map_session_data *sd)
{ {
if (sd && sd->class_&JOBL_BABY && sd->status.mother > 0) if (sd && sd->class_&JOBL_BABY && sd->status.mother > 0)
@ -8663,6 +8756,9 @@ struct map_session_data *pc_get_mother (struct map_session_data *sd)
return NULL; return NULL;
} }
/*==========================================
* Get sd children charid. (Need to be married)
*------------------------------------------*/
struct map_session_data *pc_get_child (struct map_session_data *sd) struct map_session_data *pc_get_child (struct map_session_data *sd)
{ {
if (sd && pc_ismarried(sd) && sd->status.child > 0) if (sd && pc_ismarried(sd) && sd->status.child > 0)
@ -8672,6 +8768,9 @@ struct map_session_data *pc_get_child (struct map_session_data *sd)
return NULL; return NULL;
} }
/*==========================================
* Set player sd to bleed. (losing hp and/or sp each diff_tick)
*------------------------------------------*/
void pc_bleeding (struct map_session_data *sd, unsigned int diff_tick) void pc_bleeding (struct map_session_data *sd, unsigned int diff_tick)
{ {
int hp = 0, sp = 0; int hp = 0, sp = 0;
@ -8733,7 +8832,7 @@ void pc_regen (struct map_session_data *sd, unsigned int diff_tick)
} }
/*========================================== /*==========================================
* ? * Memo player sd savepoint. (map,x,y)
*------------------------------------------*/ *------------------------------------------*/
int pc_setsavepoint(struct map_session_data *sd, short mapindex,int x,int y) int pc_setsavepoint(struct map_session_data *sd, short mapindex,int x,int y)
{ {
@ -8747,7 +8846,7 @@ int pc_setsavepoint(struct map_session_data *sd, short mapindex,int x,int y)
} }
/*========================================== /*==========================================
* ? (timer??) * Save 1 player data at autosave intervalle
*------------------------------------------*/ *------------------------------------------*/
int pc_autosave(int tid, unsigned int tick, int id, intptr_t data) int pc_autosave(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -8864,7 +8963,7 @@ void pc_overheat(struct map_session_data *sd, int val) {
skill = cap_value(pc_checkskill(sd,NC_MAINFRAME),0,4); skill = cap_value(pc_checkskill(sd,NC_MAINFRAME),0,4);
if( sd->sc.data[SC_OVERHEAT_LIMITPOINT] ) { if( sd->sc.data[SC_OVERHEAT_LIMITPOINT] ) {
heat += sd->sc.data[SC_OVERHEAT_LIMITPOINT]->val1; heat += sd->sc.data[SC_OVERHEAT_LIMITPOINT]->val1;
status_change_end(&sd->bl,SC_OVERHEAT_LIMITPOINT,-1); status_change_end(&sd->bl,SC_OVERHEAT_LIMITPOINT,INVALID_TIMER);
} }
heat = max(0,heat); // Avoid negative HEAT heat = max(0,heat); // Avoid negative HEAT
@ -9067,11 +9166,8 @@ int pc_split_atoui(char* str, unsigned int* val, char sep, int max)
} }
/*========================================== /*==========================================
* DB reading. * sub DB reading.
* exp.txt - required experience values * fonction used to read skill_tree.txt
* skill_tree.txt - skill tree for every class
* attr_fix.txt - elemental adjustment table
* statpoint.txt - status points per base level
*------------------------------------------*/ *------------------------------------------*/
static bool pc_readdb_skilltree(char* fields[], int columns, int current) static bool pc_readdb_skilltree(char* fields[], int columns, int current)
{ {
@ -9121,13 +9217,19 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current)
return true; return true;
} }
/*==========================================
* pc DB reading.
* exp.txt - required experience values
* skill_tree.txt - skill tree for every class
* attr_fix.txt - elemental adjustment table
*------------------------------------------*/
int pc_readdb(void) int pc_readdb(void)
{ {
int i,j,k; int i,j,k;
FILE *fp; FILE *fp;
char line[24000],*p; char line[24000],*p;
// 必要??値?み?み //reset
memset(exp_table,0,sizeof(exp_table)); memset(exp_table,0,sizeof(exp_table));
memset(max_level,0,sizeof(max_level)); memset(max_level,0,sizeof(max_level));
@ -9212,12 +9314,11 @@ int pc_readdb(void)
} }
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","exp.txt"); ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","exp.txt");
// スキルツリ? // Reset and read skilltree
memset(skill_tree,0,sizeof(skill_tree)); memset(skill_tree,0,sizeof(skill_tree));
sv_readdb(db_path, DBPATH"skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 4+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree); sv_readdb(db_path, DBPATH"skill_tree.txt", ',', 3+MAX_PC_SKILL_REQUIRE*2, 4+MAX_PC_SKILL_REQUIRE*2, -1, &pc_readdb_skilltree);
// ?性修正テ?ブル // Reset then read attr_fix
for(i=0;i<4;i++) for(i=0;i<4;i++)
for(j=0;j<ELE_MAX;j++) for(j=0;j<ELE_MAX;j++)
for(k=0;k<ELE_MAX;k++) for(k=0;k<ELE_MAX;k++)
@ -9269,7 +9370,7 @@ int pc_readdb(void)
fclose(fp); fclose(fp);
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","attr_fix.txt"); ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","attr_fix.txt");
// スキルツリ? // reset then read statspoint
memset(statp,0,sizeof(statp)); memset(statp,0,sizeof(statp));
i=1; i=1;
@ -9400,7 +9501,7 @@ void pc_itemcd_do(struct map_session_data *sd, bool load) {
return; return;
} }
/*========================================== /*==========================================
* pc? * pc Init/Terminate
*------------------------------------------*/ *------------------------------------------*/
void do_final_pc(void) { void do_final_pc(void) {

View File

@ -174,7 +174,7 @@ struct map_session_data {
unsigned short mapindex; unsigned short mapindex;
unsigned char head_dir; //0: Look forward. 1: Look right, 2: Look left. unsigned char head_dir; //0: Look forward. 1: Look right, 2: Look left.
unsigned int client_tick; unsigned int client_tick;
int npc_id,areanpc_id,npc_shopid,touching_id; int npc_id,areanpc_id,npc_shopid,touching_id; //for script follow scriptoid; ,npcid
int npc_item_flag; //Marks the npc_id with which you can use items during interactions with said npc (see script command enable_itemuse) int npc_item_flag; //Marks the npc_id with which you can use items during interactions with said npc (see script command enable_itemuse)
int npc_menu; // internal variable, used in npc menu handling int npc_menu; // internal variable, used in npc menu handling
int npc_amount; int npc_amount;

View File

@ -1031,7 +1031,7 @@ int pet_lootitem_drop(struct pet_data *pd,struct map_session_data *sd)
memset(pd->loot->item,0,pd->loot->max * sizeof(struct item)); memset(pd->loot->item,0,pd->loot->max * sizeof(struct item));
pd->loot->count = 0; pd->loot->count = 0;
pd->loot->weight = 0; pd->loot->weight = 0;
pd->ud.canact_tick = gettick()+10000; // 10*1000msの間拾わない pd->ud.canact_tick = gettick()+10000; //prevent picked up during 10*1000ms
if (dlist->item) if (dlist->item)
add_timer(gettick()+540,pet_delay_item_drop,0,(intptr_t)dlist); add_timer(gettick()+540,pet_delay_item_drop,0,(intptr_t)dlist);
@ -1195,7 +1195,9 @@ int pet_skill_support_timer(int tid, unsigned int tick, int id, intptr_t data)
} }
/*========================================== /*==========================================
* * Pet read db data
* pet_db.txt
* pet_db2.txt
*------------------------------------------*/ *------------------------------------------*/
int read_petdb() int read_petdb()
{ {
@ -1343,7 +1345,7 @@ int read_petdb()
} }
/*========================================== /*==========================================
* * Initialization process relationship skills
*------------------------------------------*/ *------------------------------------------*/
int do_init_pet(void) int do_init_pet(void)
{ {

File diff suppressed because it is too large Load Diff

View File

@ -1259,7 +1259,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
else if( dstmd && !is_boss(bl) ) else if( dstmd && !is_boss(bl) )
sc_start(bl, SC_STUN, 100, skilllv, 1000 + 1000 * (rnd() %3)); sc_start(bl, SC_STUN, 100, skilllv, 1000 + 1000 * (rnd() %3));
break; break;
case SR_GENTLETOUCH_QUIET: // [(Skill Level x 5) + (Caster痴 DEX + Caster痴 Base Level) / 10] case SR_GENTLETOUCH_QUIET: // [(Skill Level x 5) + (Caster<EFBFBD>s DEX + Caster<65>s Base Level) / 10]
sc_start(bl, SC_SILENCE, 5 * skilllv + (sstatus->dex + status_get_lv(src)) / 10, skilllv, skill_get_time(skillid, skilllv)); sc_start(bl, SC_SILENCE, 5 * skilllv + (sstatus->dex + status_get_lv(src)) / 10, skilllv, skill_get_time(skillid, skilllv));
break; break;
case SR_EARTHSHAKER: case SR_EARTHSHAKER:
@ -1323,7 +1323,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
sc_start(bl, SC_MELON_BOMB, 100, skilllv, skill_get_time(GN_SLINGITEM, skilllv)); // Reduces ASPD and moviment speed sc_start(bl, SC_MELON_BOMB, 100, skilllv, skill_get_time(GN_SLINGITEM, skilllv)); // Reduces ASPD and moviment speed
break; break;
case 13264: case 13264:
sc_start(bl, SC_BANANA_BOMB, 100, skilllv, skill_get_time(GN_SLINGITEM, skilllv)); // Reduces LUK ?Needed confirm it, may be it's bugged in kRORE? sc_start(bl, SC_BANANA_BOMB, 100, skilllv, skill_get_time(GN_SLINGITEM, skilllv)); // Reduces LUK <EFBFBD>?Needed confirm it, may be it's bugged in kRORE?
sc_start(bl, SC_BANANA_BOMB_SITDOWN, 75, skilllv, skill_get_time(GN_SLINGITEM_RANGEMELEEATK,skilllv)); // Sitdown for 3 seconds. sc_start(bl, SC_BANANA_BOMB_SITDOWN, 75, skilllv, skill_get_time(GN_SLINGITEM_RANGEMELEEATK,skilllv)); // Sitdown for 3 seconds.
break; break;
} }
@ -2739,12 +2739,12 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
} }
/*========================================== /*==========================================
* ??U?(map_foreachinareaから呼ばれる) * <EFBFBD>X<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD><EFBFBD>??U?<EFBFBD>p(map_foreachinarea<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă΂<EFBFBD><EFBFBD>)
* flagについて?F16?i? * flag<EFBFBD>ɂ‚<EFBFBD><EFBFBD><EFBFBD>?F16?i?<EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>F
* MSB <- 00fTffff ->LSB * MSB <- 00fTffff ->LSB
* T =??(BCT_*) * T =<EFBFBD>^?<EFBFBD>Q<EFBFBD>b<EFBFBD>g<EFBFBD>I?<EFBFBD>p(BCT_*)
* ffff=使 * ffff=<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>Ɏg<EFBFBD>p<EFBFBD>”\
* 0 =?B0に固定 * 0 =<EFBFBD>\<EFBFBD><EFBFBD>?B0<EFBFBD>ɌŒ<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
typedef int (*SkillFunc)(struct block_list *, struct block_list *, int, int, unsigned int, int); typedef int (*SkillFunc)(struct block_list *, struct block_list *, int, int, unsigned int, int);
int skill_area_sub (struct block_list *bl, va_list ap) int skill_area_sub (struct block_list *bl, va_list ap)
@ -5959,7 +5959,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break; break;
} }
if(!battle_config.duel_allow_teleport && sd->duel_group && skilllv <= 2) { // duel restriction [LuzZza] if(!battle_config.duel_allow_teleport && sd->duel_group && skilllv <= 2) { // duel restriction [LuzZza]
clif_displaymessage(sd->fd, "Duel: Can't use teleport in duel."); char output[128]; sprintf(output, msg_txt(365), skill_get_name(AL_TELEPORT));
clif_displaymessage(sd->fd, output); //"Duel: Can't use %s in duel."
break; break;
} }
@ -7861,7 +7862,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case RA_WUGDASH: case RA_WUGDASH:
if( tsce ) { if( tsce ) {
clif_skill_nodamage(src,bl,skillid,skilllv,status_change_end(bl, type, -1)); clif_skill_nodamage(src,bl,skillid,skilllv,status_change_end(bl, type, INVALID_TIMER));
map_freeblock_unlock(); map_freeblock_unlock();
return 0; return 0;
} }
@ -12208,7 +12209,8 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
break; break;
case AL_WARP: case AL_WARP:
if(!battle_config.duel_allow_teleport && sd->duel_group) { // duel restriction [LuzZza] if(!battle_config.duel_allow_teleport && sd->duel_group) { // duel restriction [LuzZza]
clif_displaymessage(sd->fd, "Duel: Can't use warp in duel."); char output[128]; sprintf(output, msg_txt(365), skill_get_name(AL_WARP));
clif_displaymessage(sd->fd, output); //"Duel: Can't use %s in duel."
return 0; return 0;
} }
break; break;
@ -13402,12 +13404,12 @@ int skill_castfix_sc (struct block_list *bl, int time)
time += time * sc->data[SC_SLOWCAST]->val2 / 100; time += time * sc->data[SC_SLOWCAST]->val2 / 100;
if (sc->data[SC_SUFFRAGIUM]) { if (sc->data[SC_SUFFRAGIUM]) {
time -= time * sc->data[SC_SUFFRAGIUM]->val2 / 100; time -= time * sc->data[SC_SUFFRAGIUM]->val2 / 100;
status_change_end(bl, SC_SUFFRAGIUM, -1); status_change_end(bl, SC_SUFFRAGIUM, INVALID_TIMER);
} }
if (sc->data[SC_MEMORIZE]) { if (sc->data[SC_MEMORIZE]) {
time>>=1; time>>=1;
if ((--sc->data[SC_MEMORIZE]->val2) <= 0) if ((--sc->data[SC_MEMORIZE]->val2) <= 0)
status_change_end(bl, SC_MEMORIZE, -1); status_change_end(bl, SC_MEMORIZE, INVALID_TIMER);
} }
if (sc->data[SC_POEMBRAGI]) if (sc->data[SC_POEMBRAGI])
time -= time * sc->data[SC_POEMBRAGI]->val2 / 100; time -= time * sc->data[SC_POEMBRAGI]->val2 / 100;
@ -15762,8 +15764,8 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
difficulty = (620 - 20 * skilllv);// (620 - 20 * Skill Level) difficulty = (620 - 20 * skilllv);// (620 - 20 * Skill Level)
make_per = status->int_ + status->dex/2 + status->luk + sd->status.job_level + (30+rnd()%120) + // (Caster痴 INT) + (Caster痴 DEX / 2) + (Caster痴 LUK) + (Caster痴 Job Level) + Random number between (30 ~ 150) + make_per = status->int_ + status->dex/2 + status->luk + sd->status.job_level + (30+rnd()%120) + // (Caster<EFBFBD>s INT) + (Caster<65>s DEX / 2) + (Caster<65>s LUK) + (Caster<65>s Job Level) + Random number between (30 ~ 150) +
(sd->status.base_level-100) + pc_checkskill(sd, AM_LEARNINGPOTION) + pc_checkskill(sd, CR_FULLPROTECTION)*(4+rnd()%6); // (Caster Base Level - 100) + (Potion Research x 5) + (Full Chemical Protection Skill Level) x (Random number between 4 ~ 10) (sd->status.base_level-100) + pc_checkskill(sd, AM_LEARNINGPOTION) + pc_checkskill(sd, CR_FULLPROTECTION)*(4+rnd()%6); // (Caster<EFBFBD>s Base Level - 100) + (Potion Research x 5) + (Full Chemical Protection Skill Level) x (Random number between 4 ~ 10)
switch(nameid){// difficulty factor switch(nameid){// difficulty factor
case 12422: case 12425: case 12422: case 12425:
@ -15804,7 +15806,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
{ {
int difficulty = 30 + rnd()%120; // Random number between (30 ~ 150) int difficulty = 30 + rnd()%120; // Random number between (30 ~ 150)
make_per = sd->status.job_level / 4 + status->luk / 2 + status->dex / 3; // (Caster痴 Job Level / 4) + (Caster痴 LUK / 2) + (Caster痴 DEX / 3) make_per = sd->status.job_level / 4 + status->luk / 2 + status->dex / 3; // (Caster<EFBFBD>s Job Level / 4) + (Caster<65>s LUK / 2) + (Caster<65>s DEX / 3)
qty = ~(5 + rnd()%5) + 1; qty = ~(5 + rnd()%5) + 1;
switch(nameid){// difficulty factor switch(nameid){// difficulty factor

View File

@ -87,7 +87,8 @@ struct skill_condition {
int itemid[MAX_SKILL_ITEM_REQUIRE],amount[MAX_SKILL_ITEM_REQUIRE]; int itemid[MAX_SKILL_ITEM_REQUIRE],amount[MAX_SKILL_ITEM_REQUIRE];
}; };
// スキルデ?タベ?ス // Database skills
struct s_skill_db { struct s_skill_db {
char name[NAME_LENGTH]; char name[NAME_LENGTH];
char desc[40]; char desc[40];
@ -116,7 +117,7 @@ struct s_skill_db {
extern struct s_skill_db skill_db[MAX_SKILL_DB]; extern struct s_skill_db skill_db[MAX_SKILL_DB];
#define MAX_SKILL_UNIT_LAYOUT 50 #define MAX_SKILL_UNIT_LAYOUT 50
#define MAX_SQUARE_LAYOUT 5 // 11*11のユニット配置が最大 #define MAX_SQUARE_LAYOUT 5 // 11*11 Placement of a maximum unit
#define MAX_SKILL_UNIT_COUNT ((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1)) #define MAX_SKILL_UNIT_COUNT ((MAX_SQUARE_LAYOUT*2+1)*(MAX_SQUARE_LAYOUT*2+1))
struct s_skill_unit_layout { struct s_skill_unit_layout {
int count; int count;
@ -195,7 +196,8 @@ enum {
UF_DUALMODE = 0x0800, // Spells should trigger both ontimer and onplace/onout/onleft effects. UF_DUALMODE = 0x0800, // Spells should trigger both ontimer and onplace/onout/onleft effects.
}; };
// アイテム作成デ?タベ?ス // Create Database item
struct s_skill_produce_db { struct s_skill_produce_db {
int nameid, trigger; int nameid, trigger;
int req_skill,req_skill_lv,itemlv; int req_skill,req_skill_lv,itemlv;
@ -203,14 +205,16 @@ struct s_skill_produce_db {
}; };
extern struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB]; extern struct s_skill_produce_db skill_produce_db[MAX_SKILL_PRODUCE_DB];
// 矢作成デ?タベ?ス // Creating database arrow
struct s_skill_arrow_db { struct s_skill_arrow_db {
int nameid, trigger; int nameid, trigger;
int cre_id[MAX_ARROW_RESOURCE],cre_amount[MAX_ARROW_RESOURCE]; int cre_id[MAX_ARROW_RESOURCE],cre_amount[MAX_ARROW_RESOURCE];
}; };
extern struct s_skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB]; extern struct s_skill_arrow_db skill_arrow_db[MAX_SKILL_ARROW_DB];
// アブラカダブラデ?タベ?ス // Abracadabra database
struct s_skill_abra_db { struct s_skill_abra_db {
int skillid; int skillid;
int req_lv; int req_lv;
@ -227,7 +231,8 @@ int do_final_skill(void);
//Returns the cast type of the skill: ground cast, castend damage, castend no damage //Returns the cast type of the skill: ground cast, castend damage, castend no damage
enum { CAST_GROUND, CAST_DAMAGE, CAST_NODAMAGE }; enum { CAST_GROUND, CAST_DAMAGE, CAST_NODAMAGE };
int skill_get_casttype(int id); //[Skotlex] int skill_get_casttype(int id); //[Skotlex]
// スキルデ?タベ?スへのアクセサ
// Accessor to the skills database
// //
int skill_get_index( int id ); int skill_get_index( int id );
int skill_get_type( int id ); int skill_get_type( int id );
@ -277,13 +282,13 @@ int skill_castend_map( struct map_session_data *sd,short skill_num, const char *
int skill_cleartimerskill(struct block_list *src); int skill_cleartimerskill(struct block_list *src);
int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,int skill_id,int skill_lv,int type,int flag); int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int x,int y,int skill_id,int skill_lv,int type,int flag);
// 追加?果 // Results? Added
int skill_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,int dmg_lv,unsigned int tick); int skill_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,int dmg_lv,unsigned int tick);
int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,unsigned int tick); int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,int skillid,int skilllv,int attack_type,unsigned int tick);
int skill_blown(struct block_list* src, struct block_list* target, int count, int direction, int flag); int skill_blown(struct block_list* src, struct block_list* target, int count, int direction, int flag);
int skill_break_equip(struct block_list *bl, unsigned short where, int rate, int flag); int skill_break_equip(struct block_list *bl, unsigned short where, int rate, int flag);
int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int lv, int time); int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int lv, int time);
// ユニットスキル // Skills unit
struct skill_unit_group* skill_id2group(int group_id); struct skill_unit_group* skill_id2group(int group_id);
struct skill_unit_group *skill_unitsetting(struct block_list* src, short skillid, short skilllv, short x, short y, int flag); struct skill_unit_group *skill_unitsetting(struct block_list* src, short skillid, short skilllv, short x, short y, int flag);
struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2); struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2);
@ -321,7 +326,7 @@ struct skill_unit_group *skill_check_dancing( struct block_list *src );
// Guild skills [celest] // Guild skills [celest]
int skill_guildaura_sub (struct map_session_data* sd, int id, int strvit, int agidex); int skill_guildaura_sub (struct map_session_data* sd, int id, int strvit, int agidex);
// 詠唱キャンセル // Chant canceled
int skill_castcancel(struct block_list *bl,int type); int skill_castcancel(struct block_list *bl,int type);
int skill_sit (struct map_session_data *sd, int type); int skill_sit (struct map_session_data *sd, int type);
@ -335,7 +340,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce); bool skill_check_cloaking(struct block_list *bl, struct status_change_entry *sce);
// ステ?タス異常 // Abnormal status
int skill_enchant_elemental_end(struct block_list *bl, int type); int skill_enchant_elemental_end(struct block_list *bl, int type);
int skillnotok(int skillid, struct map_session_data *sd); int skillnotok(int skillid, struct map_session_data *sd);
int skillnotok_hom(int skillid, struct homun_data *hd); int skillnotok_hom(int skillid, struct homun_data *hd);
@ -343,13 +348,13 @@ int skillnotok_mercenary(int skillid, struct mercenary_data *md);
int skill_chastle_mob_changetarget(struct block_list *bl,va_list ap); int skill_chastle_mob_changetarget(struct block_list *bl,va_list ap);
// アイテム作成 // Item creation
int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger, int qty); int skill_can_produce_mix( struct map_session_data *sd, int nameid, int trigger, int qty);
int skill_produce_mix( struct map_session_data *sd, int skill_id, int nameid, int slot1, int slot2, int slot3, int qty ); int skill_produce_mix( struct map_session_data *sd, int skill_id, int nameid, int slot1, int slot2, int slot3, int qty );
int skill_arrow_create( struct map_session_data *sd,int nameid); int skill_arrow_create( struct map_session_data *sd,int nameid);
// mobスキルのため // skills for the mob
int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag ); int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag ); int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skilllv,unsigned int tick,int flag); int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skilllv,unsigned int tick,int flag);
@ -365,7 +370,7 @@ int skill_blockmerc_start (struct mercenary_data*,int,int);
((id) >= BD_ADAPTATION && (id) <= DC_SERVICEFORYOU) || ((id) >= CG_ARROWVULCAN && (id) <= CG_MARIONETTE) || \ ((id) >= BD_ADAPTATION && (id) <= DC_SERVICEFORYOU) || ((id) >= CG_ARROWVULCAN && (id) <= CG_MARIONETTE) || \
((id) >= CG_LONGINGFREEDOM && (id) <= CG_TAROTCARD) || ((id) >= WA_SWING_DANCE && (id) <= WM_UNLIMITED_HUMMING_VOICE)) ((id) >= CG_LONGINGFREEDOM && (id) <= CG_TAROTCARD) || ((id) >= WA_SWING_DANCE && (id) <= WM_UNLIMITED_HUMMING_VOICE))
// スキル攻?一括?理 // Skill action, (return dmg,heal)
int skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag ); int skill_attack( int attack_type, struct block_list* src, struct block_list *dsrc,struct block_list *bl,int skillid,int skilllv,unsigned int tick,int flag );
void skill_reload(void); void skill_reload(void);

View File

@ -66,7 +66,7 @@ static struct {
int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage int randombonus_max[MAX_REFINE]; // cumulative maximum random bonus damage
} refine_info[REFINE_TYPE_MAX]; } refine_info[REFINE_TYPE_MAX];
static int atkmods[3][MAX_WEAPON_TYPE]; // 武器ATKサイズ修正(size_fix.txt) static int atkmods[3][MAX_WEAPON_TYPE]; //ATK weapon modification for size (size_fix.txt)
static char job_bonus[CLASS_COUNT][MAX_LEVEL]; static char job_bonus[CLASS_COUNT][MAX_LEVEL];
static struct eri *sc_data_ers; //For sc_data entries static struct eri *sc_data_ers; //For sc_data entries
@ -2059,7 +2059,7 @@ int status_calc_mob_(struct mob_data* md, bool first)
if (flag&2) if (flag&2)
{ // change for sized monsters [Valaris] { // change for sized monsters [Valaris]
if (md->special_state.size==1) { if (md->special_state.size==SZ_MEDIUM) {
status->max_hp>>=1; status->max_hp>>=1;
status->max_sp>>=1; status->max_sp>>=1;
if (!status->max_hp) status->max_hp = 1; if (!status->max_hp) status->max_hp = 1;
@ -2078,7 +2078,7 @@ int status_calc_mob_(struct mob_data* md, bool first)
if (!status->int_) status->int_ = 1; if (!status->int_) status->int_ = 1;
if (!status->dex) status->dex = 1; if (!status->dex) status->dex = 1;
if (!status->luk) status->luk = 1; if (!status->luk) status->luk = 1;
} else if (md->special_state.size==2) { } else if (md->special_state.size==SZ_BIG) {
status->max_hp<<=1; status->max_hp<<=1;
status->max_sp<<=1; status->max_sp<<=1;
status->hp=status->max_hp; status->hp=status->max_hp;
@ -2280,7 +2280,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
b_max_weight = sd->max_weight; b_max_weight = sd->max_weight;
b_cart_weight_max = sd->cart_weight_max; b_cart_weight_max = sd->cart_weight_max;
pc_calc_skilltree(sd); // スキルツリ?の計算 pc_calc_skilltree(sd); // <EFBFBD>X<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD>c<EFBFBD><EFBFBD>?<3F>̌v<CC8C>Z
sd->max_weight = max_weight_base[pc_class2idx(sd->status.class_)]+sd->status.str*300; sd->max_weight = max_weight_base[pc_class2idx(sd->status.class_)]+sd->status.str*300;
@ -5555,8 +5555,8 @@ const char* status_get_name(struct block_list *bl) {
} }
/*========================================== /*==========================================
* Classを返す() * <EFBFBD>Ώۂ<EFBFBD>Class<EFBFBD><EFBFBD>Ԃ<EFBFBD>(<EFBFBD>ėp)
* 0 * <EFBFBD>߂<EFBFBD>͐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>ȏ<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int status_get_class(struct block_list *bl) { int status_get_class(struct block_list *bl) {
nullpo_ret(bl); nullpo_ret(bl);
@ -5572,8 +5572,8 @@ int status_get_class(struct block_list *bl) {
return 0; return 0;
} }
/*========================================== /*==========================================
* () * <EFBFBD>Ώۂ̃<EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԃ<EFBFBD>(<EFBFBD>ėp)
* 0 * <EFBFBD>߂<EFBFBD>͐<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>ȏ<EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int status_get_lv(struct block_list *bl) { int status_get_lv(struct block_list *bl) {
nullpo_ret(bl); nullpo_ret(bl);
@ -7196,7 +7196,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
status_zap(bl, diff, 0); status_zap(bl, diff, 0);
} }
// fall through // fall through
case SC_POISON: /* */ case SC_POISON: /* <EFBFBD><EFBFBD> */
val3 = tick/1000; //Damage iterations val3 = tick/1000; //Damage iterations
if(val3 < 1) val3 = 1; if(val3 < 1) val3 = 1;
tick_time = 1000; // [GodLesZ] tick time tick_time = 1000; // [GodLesZ] tick time
@ -7269,7 +7269,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
else else
val4 |= battle_config.monster_cloak_check_type&7; val4 |= battle_config.monster_cloak_check_type&7;
break; break;
case SC_SIGHT: /* サイト/ルアフ */ case SC_SIGHT: /* <EFBFBD>T<EFBFBD>C<EFBFBD>g/<2F><><EFBFBD>A<EFBFBD>t */
case SC_RUWACH: case SC_RUWACH:
case SC_SIGHTBLASTER: case SC_SIGHTBLASTER:
val3 = skill_get_splash(val2, val1); //Val2 should bring the skill-id. val3 = skill_get_splash(val2, val1); //Val2 should bring the skill-id.
@ -8179,9 +8179,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_GT_CHANGE: case SC_GT_CHANGE:
{// take note there is no def increase as skill desc says. [malufett] {// take note there is no def increase as skill desc says. [malufett]
struct block_list * src; struct block_list * src;
val3 = status->agi * val1 / 60; // ASPD increase: [(Target AGI x Skill Level) / 60] % val3 = status->agi * val1 / 60; // ASPD increase: [(Target<EFBFBD>s AGI x Skill Level) / 60] %
if( (src = map_id2bl(val2)) ) if( (src = map_id2bl(val2)) )
val4 = ( 200/status_get_int(src) ) * val1;// MDEF decrease: MDEF [(200 / Caster INT) x Skill Level] val4 = ( 200/status_get_int(src) ) * val1;// MDEF decrease: MDEF [(200 / Caster<EFBFBD>s INT) x Skill Level]
} }
break; break;
case SC_GT_REVITALIZE: case SC_GT_REVITALIZE:
@ -8189,7 +8189,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
struct block_list * src; struct block_list * src;
val3 = val1 * 30 + 150; // Natural HP recovery increase: [(Skill Level x 30) + 50] % val3 = val1 * 30 + 150; // Natural HP recovery increase: [(Skill Level x 30) + 50] %
if( (src = map_id2bl(val2)) ) // the stat def is not shown in the status window and it is process differently if( (src = map_id2bl(val2)) ) // the stat def is not shown in the status window and it is process differently
val4 = ( status_get_vit(src)/4 ) * val1; // STAT DEF increase: [(Caster VIT / 4) x Skill Level] val4 = ( status_get_vit(src)/4 ) * val1; // STAT DEF increase: [(Caster<EFBFBD>s VIT / 4) x Skill Level]
} }
break; break;
case SC_PYROTECHNIC_OPTION: case SC_PYROTECHNIC_OPTION:
@ -8679,7 +8679,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
return 1; return 1;
} }
/*========================================== /*==========================================
* * <EFBFBD>X<EFBFBD>e<EFBFBD>[<EFBFBD>^<EFBFBD>X<EFBFBD>ُ<EFBFBD>S<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* type: * type:
* 0 - ??? * 0 - ???
* 1 - ??? * 1 - ???
@ -8778,7 +8778,7 @@ int status_change_clear(struct block_list* bl, int type)
} }
/*========================================== /*==========================================
* * <EFBFBD>X<EFBFBD>e<EFBFBD>[<EFBFBD>^<EFBFBD>X<EFBFBD>ُ<EFBFBD>I<EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line) int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line)
{ {
@ -9475,7 +9475,7 @@ int kaahi_heal_timer(int tid, unsigned int tick, int id, intptr_t data)
} }
/*========================================== /*==========================================
* * <EFBFBD>X<EFBFBD>e<EFBFBD>[<EFBFBD>^<EFBFBD>X<EFBFBD>ُ<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD>^<EFBFBD>C<EFBFBD>}<EFBFBD>[
*------------------------------------------*/ *------------------------------------------*/
int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
{ {
@ -9681,7 +9681,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
} }
break; break;
case SC_DANCING: //ダンススキルの時間SP消費 case SC_DANCING: //<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>X<EFBFBD>L<EFBFBD><EFBFBD><EFBFBD>̎<EFBFBD><EFBFBD><EFBFBD>SP<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ {
int s = 0; int s = 0;
int sp = 1; int sp = 1;
@ -10293,7 +10293,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
} }
/*========================================== /*==========================================
* * <EFBFBD>X<EFBFBD>e<EFBFBD>[<EFBFBD>^<EFBFBD>X<EFBFBD>ُ<EFBFBD>^<EFBFBD>C<EFBFBD>}<EFBFBD>[<EFBFBD>͈͏<EFBFBD><EFBFBD><EFBFBD>
*------------------------------------------*/ *------------------------------------------*/
int status_change_timer_sub(struct block_list* bl, va_list ap) int status_change_timer_sub(struct block_list* bl, va_list ap)
{ {
@ -10310,7 +10310,7 @@ int status_change_timer_sub(struct block_list* bl, va_list ap)
tsc = status_get_sc(bl); tsc = status_get_sc(bl);
switch( type ) { switch( type ) {
case SC_SIGHT: /* サイト */ case SC_SIGHT: /* <EFBFBD>T<EFBFBD>C<EFBFBD>g */
if( tsc && tsc->data[SC__SHADOWFORM] && (sce && sce->val4 >0 && sce->val4%2000 == 0) && // for every 2 seconds do the checking if( tsc && tsc->data[SC__SHADOWFORM] && (sce && sce->val4 >0 && sce->val4%2000 == 0) && // for every 2 seconds do the checking
rnd()%100 < 100-tsc->data[SC__SHADOWFORM]->val1*10 ) // [100 - (Skill Level x 10)] % rnd()%100 < 100-tsc->data[SC__SHADOWFORM]->val1*10 ) // [100 - (Skill Level x 10)] %
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
@ -10321,7 +10321,7 @@ int status_change_timer_sub(struct block_list* bl, va_list ap)
status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER); status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
status_change_end(bl, SC__INVISIBILITY, INVALID_TIMER); status_change_end(bl, SC__INVISIBILITY, INVALID_TIMER);
break; break;
case SC_RUWACH: /* ルアフ */ case SC_RUWACH: /* <EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>t */
if (tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING] || if (tsc && (tsc->data[SC_HIDING] || tsc->data[SC_CLOAKING] ||
tsc->data[SC_CAMOUFLAGE] || tsc->data[SC_CLOAKINGEXCEED] || tsc->data[SC_CAMOUFLAGE] || tsc->data[SC_CLOAKINGEXCEED] ||
tsc->data[SC__INVISIBILITY])) { tsc->data[SC__INVISIBILITY])) {
@ -10888,6 +10888,13 @@ static bool status_readdb_refine(char* fields[], int columns, int current)
return true; return true;
} }
/*
* Read status db
* job1.txt
* job2.txt
* size_fixe.txt
* refine_db.txt
*/
int status_readdb(void) int status_readdb(void)
{ {
int i, j; int i, j;
@ -10895,13 +10902,13 @@ int status_readdb(void)
// initialize databases to default // initialize databases to default
// //
// job_db1.txt // reset job_db1.txt data
memset(max_weight_base, 0, sizeof(max_weight_base)); memset(max_weight_base, 0, sizeof(max_weight_base));
memset(hp_coefficient, 0, sizeof(hp_coefficient)); memset(hp_coefficient, 0, sizeof(hp_coefficient));
memset(hp_coefficient2, 0, sizeof(hp_coefficient2)); memset(hp_coefficient2, 0, sizeof(hp_coefficient2));
memset(sp_coefficient, 0, sizeof(sp_coefficient)); memset(sp_coefficient, 0, sizeof(sp_coefficient));
memset(aspd_base, 0, sizeof(aspd_base)); memset(aspd_base, 0, sizeof(aspd_base));
// job_db2.txt // reset job_db2.txt data
memset(job_bonus,0,sizeof(job_bonus)); // Job-specific stats bonus memset(job_bonus,0,sizeof(job_bonus)); // Job-specific stats bonus
// size_fix.txt // size_fix.txt
@ -10937,7 +10944,7 @@ int status_readdb(void)
} }
/*========================================== /*==========================================
* * Status db init and destroy.
*------------------------------------------*/ *------------------------------------------*/
int do_init_status(void) int do_init_status(void)
{ {

View File

@ -27,7 +27,7 @@
static DBMap* guild_storage_db; // int guild_id -> struct guild_storage* static DBMap* guild_storage_db; // int guild_id -> struct guild_storage*
/*========================================== /*==========================================
* * Sort items in the warehouse
*------------------------------------------*/ *------------------------------------------*/
static int storage_comp_item(const void *_i1, const void *_i2) static int storage_comp_item(const void *_i1, const void *_i2)
{ {
@ -43,6 +43,7 @@ static int storage_comp_item(const void *_i1, const void *_i2)
return i1->nameid - i2->nameid; return i1->nameid - i2->nameid;
} }
//Sort item by storage_comp_item (nameid)
static void storage_sortitem(struct item* items, unsigned int size) static void storage_sortitem(struct item* items, unsigned int size)
{ {
nullpo_retv(items); nullpo_retv(items);
@ -54,9 +55,9 @@ static void storage_sortitem(struct item* items, unsigned int size)
} }
/*========================================== /*==========================================
* * Init/Terminate
*------------------------------------------*/ *------------------------------------------*/
int do_init_storage(void) // map.c::do_init()から呼ばれる int do_init_storage(void) // Called from map.c::do_init()
{ {
guild_storage_db=idb_alloc(DB_OPT_RELEASE_DATA); guild_storage_db=idb_alloc(DB_OPT_RELEASE_DATA);
return 1; return 1;
@ -110,7 +111,9 @@ int storage_storageopen(struct map_session_data *sd)
return 0; return 0;
} }
// helper function /* helper function
* checking if 2 item structure are identique
*/
int compare_item(struct item *a, struct item *b) int compare_item(struct item *a, struct item *b)
{ {
if( a->nameid == b->nameid && if( a->nameid == b->nameid &&
@ -202,6 +205,10 @@ int storage_delitem(struct map_session_data* sd, int n, int amount)
/*========================================== /*==========================================
* Add an item to the storage from the inventory. * Add an item to the storage from the inventory.
* @index : inventory idx
* return
* 0 : fail
* 1 : success
*------------------------------------------*/ *------------------------------------------*/
int storage_storageadd(struct map_session_data* sd, int index, int amount) int storage_storageadd(struct map_session_data* sd, int index, int amount)
{ {
@ -226,7 +233,11 @@ int storage_storageadd(struct map_session_data* sd, int index, int amount)
} }
/*========================================== /*==========================================
* Retrieve an item from the storage. * Retrieve an item from the storage into inventory
* @index : storage idx
* return
* 0 : fail
* 1 : success
*------------------------------------------*/ *------------------------------------------*/
int storage_storageget(struct map_session_data* sd, int index, int amount) int storage_storageget(struct map_session_data* sd, int index, int amount)
{ {
@ -251,6 +262,10 @@ int storage_storageget(struct map_session_data* sd, int index, int amount)
/*========================================== /*==========================================
* Move an item from cart to storage. * Move an item from cart to storage.
* @index : cart inventory index
* return
* 0 : fail
* 1 : success
*------------------------------------------*/ *------------------------------------------*/
int storage_storageaddfromcart(struct map_session_data* sd, int index, int amount) int storage_storageaddfromcart(struct map_session_data* sd, int index, int amount)
{ {
@ -275,7 +290,11 @@ int storage_storageaddfromcart(struct map_session_data* sd, int index, int amoun
} }
/*========================================== /*==========================================
* Get from Storage to the Cart * Get from Storage to the Cart inventory
* @index : storage index
* return
* 0 : fail
* 1 : success
*------------------------------------------*/ *------------------------------------------*/
int storage_storagegettocart(struct map_session_data* sd, int index, int amount) int storage_storagegettocart(struct map_session_data* sd, int index, int amount)
{ {
@ -344,8 +363,9 @@ struct guild_storage *guild2storage(int guild_id)
return gs; return gs;
} }
//For just locating a storage without creating one. [Skotlex]
struct guild_storage *guild2storage2(int guild_id) struct guild_storage *guild2storage2(int guild_id)
{ //For just locating a storage without creating one. [Skotlex] {
return (struct guild_storage*)idb_get(guild_storage_db,guild_id); return (struct guild_storage*)idb_get(guild_storage_db,guild_id);
} }
@ -355,6 +375,13 @@ int guild_storage_delete(int guild_id)
return 0; return 0;
} }
/*==========================================
* Attempt to open guild storage for sd
* return
* 0 : success (open or req to create a new one)
* 1 : fail
* 2 : no guild for sd
*------------------------------------------*/
int storage_guild_storageopen(struct map_session_data* sd) int storage_guild_storageopen(struct map_session_data* sd)
{ {
struct guild_storage *gstor; struct guild_storage *gstor;
@ -387,6 +414,12 @@ int storage_guild_storageopen(struct map_session_data* sd)
return 0; return 0;
} }
/*==========================================
* Attempt to add an item in guild storage, then refresh it
* return
* 0 : success
* 1 : fail
*------------------------------------------*/
int guild_storage_additem(struct map_session_data* sd, struct guild_storage* stor, struct item* item_data, int amount) int guild_storage_additem(struct map_session_data* sd, struct guild_storage* stor, struct item* item_data, int amount)
{ {
struct item_data *data; struct item_data *data;
@ -439,6 +472,12 @@ int guild_storage_additem(struct map_session_data* sd, struct guild_storage* sto
return 0; return 0;
} }
/*==========================================
* Attempt to delete an item in guild storage, then refresh it
* return
* 0 : success
* 1 : fail
*------------------------------------------*/
int guild_storage_delitem(struct map_session_data* sd, struct guild_storage* stor, int n, int amount) int guild_storage_delitem(struct map_session_data* sd, struct guild_storage* stor, int n, int amount)
{ {
nullpo_retr(1, sd); nullpo_retr(1, sd);
@ -458,6 +497,13 @@ int guild_storage_delitem(struct map_session_data* sd, struct guild_storage* sto
return 0; return 0;
} }
/*==========================================
* Attempt to add an item in guild storage from inventory, then refresh it
* @index : inventory idx
* return
* 0 : fail
* 1 : succes
*------------------------------------------*/
int storage_guild_storageadd(struct map_session_data* sd, int index, int amount) int storage_guild_storageadd(struct map_session_data* sd, int index, int amount)
{ {
struct guild_storage *stor; struct guild_storage *stor;
@ -483,6 +529,13 @@ int storage_guild_storageadd(struct map_session_data* sd, int index, int amount)
return 1; return 1;
} }
/*==========================================
* Attempt to retrieve an item from guild storage to inventory, then refresh it
* @index : storage idx
* return
* 0 : fail
* 1 : succes
*------------------------------------------*/
int storage_guild_storageget(struct map_session_data* sd, int index, int amount) int storage_guild_storageget(struct map_session_data* sd, int index, int amount)
{ {
struct guild_storage *stor; struct guild_storage *stor;
@ -505,13 +558,20 @@ int storage_guild_storageget(struct map_session_data* sd, int index, int amount)
if((flag = pc_additem(sd,&stor->items[index],amount,LOG_TYPE_GSTORAGE)) == 0) if((flag = pc_additem(sd,&stor->items[index],amount,LOG_TYPE_GSTORAGE)) == 0)
guild_storage_delitem(sd,stor,index,amount); guild_storage_delitem(sd,stor,index,amount);
else else //inform fail
clif_additem(sd,0,0,flag); clif_additem(sd,0,0,flag);
// log_fromstorage(sd, index, 1); // log_fromstorage(sd, index, 1);
return 0; return 0;
} }
/*==========================================
* Attempt to add an item in guild storage from cart, then refresh it
* @index : cart inventory idx
* return
* 0 : fail
* 1 : succes
*------------------------------------------*/
int storage_guild_storageaddfromcart(struct map_session_data* sd, int index, int amount) int storage_guild_storageaddfromcart(struct map_session_data* sd, int index, int amount)
{ {
struct guild_storage *stor; struct guild_storage *stor;
@ -537,6 +597,13 @@ int storage_guild_storageaddfromcart(struct map_session_data* sd, int index, int
return 1; return 1;
} }
/*==========================================
* Attempt to retrieve an item from guild storage to cart, then refresh it
* @index : storage idx
* return
* 0 : fail
* 1 : succes
*------------------------------------------*/
int storage_guild_storagegettocart(struct map_session_data* sd, int index, int amount) int storage_guild_storagegettocart(struct map_session_data* sd, int index, int amount)
{ {
struct guild_storage *stor; struct guild_storage *stor;
@ -562,6 +629,12 @@ int storage_guild_storagegettocart(struct map_session_data* sd, int index, int a
return 1; return 1;
} }
/*==========================================
* Request to save guild storage
* return
* 0 : fail (no storage)
* 1 : succes
*------------------------------------------*/
int storage_guild_storagesave(int account_id, int guild_id, int flag) int storage_guild_storagesave(int account_id, int guild_id, int flag)
{ {
struct guild_storage *stor = guild2storage2(guild_id); struct guild_storage *stor = guild2storage2(guild_id);
@ -577,6 +650,12 @@ int storage_guild_storagesave(int account_id, int guild_id, int flag)
return 0; return 0;
} }
/*==========================================
* ACK save of guild storage
* return
* 0 : fail (no storage)
* 1 : succes
*------------------------------------------*/
int storage_guild_storagesaved(int guild_id) int storage_guild_storagesaved(int guild_id)
{ {
struct guild_storage *stor; struct guild_storage *stor;
@ -591,6 +670,7 @@ int storage_guild_storagesaved(int guild_id)
return 0; return 0;
} }
//Close storage for sd and save it
int storage_guild_storageclose(struct map_session_data* sd) int storage_guild_storageclose(struct map_session_data* sd)
{ {
struct guild_storage *stor; struct guild_storage *stor;

View File

@ -510,7 +510,7 @@ void trade_tradecancel(struct map_session_data *sd)
} }
/*========================================== /*==========================================
* (trade押し) * lock sd and tsd trade data, execute the trade, clear, then save players
*------------------------------------------*/ *------------------------------------------*/
void trade_tradecommit(struct map_session_data *sd) void trade_tradecommit(struct map_session_data *sd)
{ {

View File

@ -137,7 +137,7 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data
return 0; return 0;
} }
ud->walktimer = INVALID_TIMER; ud->walktimer = INVALID_TIMER;
if( bl->prev == NULL ) return 0; // block_list から抜けているので移動停止する if (bl->prev == NULL) return 0; // Stop moved because it is missing from the block_list
if(ud->walkpath.path_pos>=ud->walkpath.path_len) if(ud->walkpath.path_pos>=ud->walkpath.path_len)
return 0; return 0;
@ -156,8 +156,7 @@ static int unit_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data
if(map_getcell(bl->m,x+dx,y+dy,CELL_CHKNOPASS)) if(map_getcell(bl->m,x+dx,y+dy,CELL_CHKNOPASS))
return unit_walktoxy_sub(bl); return unit_walktoxy_sub(bl);
// バシリカ判定 //Refresh view for all those we lose sight
map_foreachinmovearea(clif_outsight, bl, AREA_SIZE, dx, dy, sd?BL_ALL:BL_PC, bl); map_foreachinmovearea(clif_outsight, bl, AREA_SIZE, dx, dy, sd?BL_ALL:BL_PC, bl);
x += dx; x += dx;
@ -347,8 +346,8 @@ int unit_walktoxy( struct block_list *bl, short x, short y, int flag)
map_random_dir(bl, &ud->to_x, &ud->to_y); map_random_dir(bl, &ud->to_x, &ud->to_y);
if(ud->walktimer != INVALID_TIMER) { if(ud->walktimer != INVALID_TIMER) {
// 現在歩いている最中の目的地変更なのでマス目の中心に来た時に // When you come to the center of the grid because the change of destination while you're walking right now
// timer関数からunit_walktoxy_subを呼ぶようにする // Call a function from a timer unit_walktoxy_sub
ud->state.change_walk_target = 1; ud->state.change_walk_target = 1;
return 1; return 1;
} }
@ -1023,7 +1022,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
nullpo_ret(src); nullpo_ret(src);
if(status_isdead(src)) if(status_isdead(src))
return 0; // 死んでいないか return 0; //Do not continue source is dead
sd = BL_CAST(BL_PC, src); sd = BL_CAST(BL_PC, src);
ud = unit_bl2ud(src); ud = unit_bl2ud(src);
@ -1112,7 +1111,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh
return 0; return 0;
tstatus = status_get_status_data(target); tstatus = status_get_status_data(target);
//直前のスキル状況の記録 // Record the status of the previous skill)
if(sd) { if(sd) {
switch(skill_num){ switch(skill_num){
case SA_CASTCANCEL: case SA_CASTCANCEL:
@ -1362,7 +1361,7 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh
nullpo_ret(src); nullpo_ret(src);
if(!src->prev) return 0; // map 上に存在するか if (!src->prev) return 0; // not on the map
if(status_isdead(src)) return 0; if(status_isdead(src)) return 0;
sd = BL_CAST(BL_PC, src); sd = BL_CAST(BL_PC, src);
@ -1399,7 +1398,7 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, sh
return 0; return 0;
} }
/* 射程と障害物チェック */ /* Check range and obstacle */
bl.type = BL_NUL; bl.type = BL_NUL;
bl.m = src->m; bl.m = src->m;
bl.x = skill_x; bl.x = skill_x;
@ -1522,8 +1521,8 @@ int unit_unattackable(struct block_list *bl)
} }
/*========================================== /*==========================================
* * Attack request
* typeが1なら継続攻撃 * If type is an ongoing attack
*------------------------------------------*/ *------------------------------------------*/
int unit_attack(struct block_list *src,int target_id,int continuous) int unit_attack(struct block_list *src,int target_id,int continuous)
{ {
@ -1604,7 +1603,7 @@ bool unit_can_reach_pos(struct block_list *bl,int x,int y, int easy)
{ {
nullpo_retr(false, bl); nullpo_retr(false, bl);
if( bl->x==x && bl->y==y ) // 同じマス if (bl->x == x && bl->y == y) //Same place
return true; return true;
return path_search(NULL,bl->m,bl->x,bl->y,x,y,easy,CELL_CHKNOREACH); return path_search(NULL,bl->m,bl->x,bl->y,x,y,easy,CELL_CHKNOREACH);
@ -1648,7 +1647,7 @@ bool unit_can_reach_bl(struct block_list *bl,struct block_list *tbl, int range,
return path_search(NULL,bl->m,bl->x,bl->y,tbl->x-dx,tbl->y-dy,easy,CELL_CHKNOREACH); return path_search(NULL,bl->m,bl->x,bl->y,tbl->x-dx,tbl->y-dy,easy,CELL_CHKNOREACH);
} }
/*========================================== /*==========================================
* Calculates position of Pet/Mercenary/Homunculus * Calculates position of Pet/Mercenary/Homunculus/Elemental
*------------------------------------------*/ *------------------------------------------*/
int unit_calc_pos(struct block_list *bl, int tx, int ty, int dir) int unit_calc_pos(struct block_list *bl, int tx, int ty, int dir)
{ {
@ -1706,7 +1705,7 @@ int unit_calc_pos(struct block_list *bl, int tx, int ty, int dir)
} }
/*========================================== /*==========================================
* PCの攻撃 (timer関数) * Continuous Attack (function timer)
*------------------------------------------*/ *------------------------------------------*/
static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int tick) static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int tick)
{ {
@ -1908,7 +1907,7 @@ int unit_skillcastcancel(struct block_list *bl,int type)
return 1; return 1;
} }
// unit_data の初期化処理 // unit_data initialization process
void unit_dataset(struct block_list *bl) void unit_dataset(struct block_list *bl)
{ {
struct unit_data *ud; struct unit_data *ud;
@ -1949,7 +1948,7 @@ int unit_fixdamage(struct block_list *src,struct block_list *target,unsigned int
} }
/*========================================== /*==========================================
* * To change the size of the char (player or mob only)
*------------------------------------------*/ *------------------------------------------*/
int unit_changeviewsize(struct block_list *bl,short size) int unit_changeviewsize(struct block_list *bl,short size)
{ {

View File

@ -279,7 +279,7 @@ void vending_openvending(struct map_session_data* sd, const char* message, bool
clif_skill_fail(sd, MC_VENDING, USESKILL_FAIL_LEVEL, 0); clif_skill_fail(sd, MC_VENDING, USESKILL_FAIL_LEVEL, 0);
return; return;
} }
//check if nearby npc, (perhaps we should check for nearby shop too
if( vending_checknearnpc(&sd->bl) ) { if( vending_checknearnpc(&sd->bl) ) {
char output[150]; char output[150];
sprintf(output,"You're too close to a NPC, you must be at least %d cells away from any NPC.",battle_config.min_npc_vending_distance); sprintf(output,"You're too close to a NPC, you must be at least %d cells away from any NPC.",battle_config.min_npc_vending_distance);

View File

@ -10,9 +10,9 @@ struct map_session_data;
struct s_search_store_search; struct s_search_store_search;
struct s_vending { struct s_vending {
short index; short index; //cart index (return item data)
short amount; short amount; //amout of the item for vending
unsigned int value; unsigned int value; //at wich price
}; };
void vending_closevending(struct map_session_data* sd); void vending_closevending(struct map_session_data* sd);