From 3e7946b89e1318de435ecbb02303d02715b988a1 Mon Sep 17 00:00:00 2001 From: skotlex Date: Sun, 13 Aug 2006 06:14:27 +0000 Subject: - Removed @itemcheck as it was totally pointless. - Corrected states killer/killable being easily dispellable. - Fixed the totally wrong text messages being used for @killer/@killable related atcommands, added appropiate entries to msg_athena - Magic and Misc attacks will now get type "flee" when they do less than 1 damage, this blocks them from causing additional status effects when they are blocked. - Cleaned up a bit the Basilica code, it should now properly end when you walk. - Added an unnecessary qty check when inserting cards :P - Fixed some logs not working when you enabled all logs. - Corrected unmute being a level 60 command by default (should be 80) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8256 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 12 ++++++++ conf-tmpl/atcommand_athena.conf | 5 +--- conf-tmpl/msg_athena.conf | 7 ++++- src/map/atcommand.c | 66 ++++++++++++++++------------------------- src/map/atcommand.h | 1 - src/map/battle.c | 12 +++++--- src/map/log.c | 10 +++---- src/map/map.c | 2 ++ src/map/map.h | 4 +-- src/map/pc.c | 2 ++ src/map/skill.c | 5 +--- src/map/status.c | 4 ++- 12 files changed, 67 insertions(+), 63 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index ad4fea1ec..310937112 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,18 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/08/13 + * Removed @itemcheck as it was totally pointless. [Skotlex] + * Corrected states killer/killable being easily dispellable. [Skotlex] + * Fixed the totally wrong text messages being used for @killer/@killable + related atcommands, added appropiate entries to msg_athena [Skotlex] + * Magic and Misc attacks will now get type "flee" when they do less than 1 + damage, this blocks them from causing additional status effects when they + are blocked. [Skotlex] + * Cleaned up a bit the Basilica code, it should now properly end when you + walk. [Skotlex] + * Fixed some logs not working when you enabled all logs. [Skotlex] + * Corrected unmute being a level 60 command by default (should be 80) + [Skotlex] * Corrected the mapif_parse_PartyChangeMap function to correctly update level-range when someone logs on/off, fixes being unable to set even-share on once it's been broken even when the characters out of range logoff. diff --git a/conf-tmpl/atcommand_athena.conf b/conf-tmpl/atcommand_athena.conf index 455932977..27f6327a5 100644 --- a/conf-tmpl/atcommand_athena.conf +++ b/conf-tmpl/atcommand_athena.conf @@ -462,9 +462,6 @@ item: 60 // Creates a complet item (card, etc...) of your choosing, either Item ID or Name. item2: 60 -// ?? -itemcheck: 60 - // Kill another character without hitting them. kill: 60 @@ -647,7 +644,7 @@ skillon: 80 skilloff: 80 // Unmute a player -unmute: 60 +unmute: 80 //--------------------------- // 99: Administrator commands diff --git a/conf-tmpl/msg_athena.conf b/conf-tmpl/msg_athena.conf index afc355f94..43040b7a5 100644 --- a/conf-tmpl/msg_athena.conf +++ b/conf-tmpl/msg_athena.conf @@ -250,7 +250,7 @@ 239: Game time: After, the game will be in daylight for %s. 240: %d monster(s) summoned! 241: You can now kill anybody -242: You are now killable +242: You are now killable by anyone 243: Map skills are off 244: Map skills are on 245: Server Uptime: %ld days, %ld hours, %ld minutes, %ld seconds. @@ -297,6 +297,11 @@ 284: Leadership transferred. 285: You've become the party leader. 286: There's been no change in the setting. +//Missing stuff for @killer related commands. +287: Killer state reset +288: You are no longer killable +289: The player is now killable +290: The player is no longer killable // Guild Castles Number // -------------------- 299: ?? Castles diff --git a/src/map/atcommand.c b/src/map/atcommand.c index cad421633..49af1a70f 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -77,7 +77,6 @@ ACMD_FUNC(heal); ACMD_FUNC(item); ACMD_FUNC(item2); ACMD_FUNC(itemreset); -ACMD_FUNC(itemcheck); ACMD_FUNC(baselevelup); ACMD_FUNC(joblevelup); ACMD_FUNC(help); @@ -356,7 +355,6 @@ static AtCommandInfo atcommand_info[] = { { AtCommand_Item, "@item", 60, atcommand_item }, { AtCommand_Item2, "@item2", 60, atcommand_item2 }, { AtCommand_ItemReset, "@itemreset", 40, atcommand_itemreset }, - { AtCommand_ItemCheck, "@itemcheck", 60, atcommand_itemcheck }, { AtCommand_BaseLevelUp, "@lvup", 60, atcommand_baselevelup }, { AtCommand_BaseLevelUp, "@blevel", 60, atcommand_baselevelup }, { AtCommand_BaseLevelUp, "@baselvlup", 60, atcommand_baselevelup }, @@ -525,7 +523,7 @@ static AtCommandInfo atcommand_info[] = { { AtCommand_Trade, "@trade", 60, atcommand_trade }, { AtCommand_Send, "@send", 60, atcommand_send }, { AtCommand_SetBattleFlag, "@setbattleflag", 99, atcommand_setbattleflag }, - { AtCommand_UnMute, "@unmute", 60, atcommand_unmute }, // [Valaris] + { AtCommand_UnMute, "@unmute", 80, atcommand_unmute }, // [Valaris] { AtCommand_Clearweather, "@clearweather", 99, atcommand_clearweather }, // Dexity { AtCommand_UpTime, "@uptime", 1, atcommand_uptime }, // by MC Cameri { AtCommand_ChangeSex, "@changesex", 60, atcommand_changesex }, // by MC Cameri <- do we still need this? [Foruken] <- why not? [Skotlex] @@ -2755,20 +2753,6 @@ int atcommand_itemreset( return 0; } -/*========================================== - * - *------------------------------------------ - */ -int atcommand_itemcheck( - const int fd, struct map_session_data* sd, - const char* command, const char* message) -{ - nullpo_retr(-1, sd); - pc_checkitem(sd); - - return 0; -} - /*========================================== * Atcommand @lvlup *------------------------------------------ @@ -7167,12 +7151,12 @@ atcommand_killer( const char* command, const char* message) { nullpo_retr(-1, sd); - sd->special_state.killer = !sd->special_state.killer; + sd->state.killer = !sd->state.killer; - if(sd->special_state.killer) + if(sd->state.killer) clif_displaymessage(fd, msg_txt(241)); - else - clif_displaymessage(fd, msg_txt(242)); + else + clif_displaymessage(fd, msg_txt(287)); return 0; } @@ -7188,12 +7172,12 @@ atcommand_killable( const char* command, const char* message) { nullpo_retr(-1, sd); - sd->special_state.killable = !sd->special_state.killable; + sd->state.killable = !sd->state.killable; - if(sd->special_state.killable) + if(sd->state.killable) clif_displaymessage(fd, msg_txt(242)); - else - clif_displaymessage(fd, msg_txt(241)); + else + clif_displaymessage(fd, msg_txt(288)); return 0; } @@ -7215,14 +7199,14 @@ atcommand_charkillable( return -1; if((pl_sd=map_nick2sd((char *) message)) == NULL) - return -1; + return -1; - pl_sd->special_state.killable = !pl_sd->special_state.killable; + pl_sd->state.killable = !pl_sd->state.killable; - if(pl_sd->special_state.killable) - clif_displaymessage(fd, "The player is now killable"); - else - clif_displaymessage(fd, "The player is no longer killable"); + if(pl_sd->state.killable) + clif_displaymessage(fd, msg_txt(289)); + else + clif_displaymessage(fd, msg_txt(290)); return 0; } @@ -9511,12 +9495,12 @@ atcommand_charkillableid( if((pl_sd= (struct map_session_data *) session[session_id]->session_data) == NULL) return -1; - pl_sd->special_state.killable = !pl_sd->special_state.killable; + pl_sd->state.killable = !pl_sd->state.killable; - if(pl_sd->special_state.killable) - clif_displaymessage(fd, "The player is now killable"); - else - clif_displaymessage(fd, "The player is no longer killable"); + if(pl_sd->state.killable) + clif_displaymessage(fd, msg_txt(289)); + else + clif_displaymessage(fd, msg_txt(290)); } else { @@ -9550,14 +9534,14 @@ atcommand_charkillableid2( if ((session_id=accountid2sessionid(aid))!=0) { if((pl_sd= (struct map_session_data *) session[session_id]->session_data) == NULL) - return -1; + return -1; - pl_sd->special_state.killable = !pl_sd->special_state.killable; + pl_sd->state.killable = !pl_sd->state.killable; - if(pl_sd->special_state.killable) - clif_displaymessage(fd, "The player is now killable"); + if(pl_sd->state.killable) + clif_displaymessage(fd, msg_txt(289)); else - clif_displaymessage(fd, "The player is no longer killable"); + clif_displaymessage(fd, msg_txt(290)); } else { diff --git a/src/map/atcommand.h b/src/map/atcommand.h index f33e49ba5..d3d746bf2 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -44,7 +44,6 @@ enum AtCommandType { AtCommand_Item, AtCommand_Item2, AtCommand_ItemReset, - AtCommand_ItemCheck, AtCommand_BaseLevelUp, AtCommand_JobLevelUp, AtCommand_H, diff --git a/src/map/battle.c b/src/map/battle.c index 6e52cb267..bd9800ffa 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2722,9 +2722,13 @@ struct Damage battle_calc_attack( int attack_type, memset(&d,0,sizeof(d)); break; } - if (d.damage + d.damage2 < 1 && d.dmg_lv != ATK_LUCKY) - //Miss/Absorbed + if (d.damage + d.damage2 < 1) + { //Miss/Absorbed + //Weapon attacks should go through to cause additional effects. + if (d.dmg_lv != ATK_LUCKY && attack_type&(BF_MAGIC|BF_MISC)) + d.dmg_lv = ATK_FLEE; d.dmotion = 0; + } return d; } @@ -3182,7 +3186,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f TBL_PC *sd = (TBL_PC*)t_bl; if (sd->state.monster_ignore && t_bl != s_bl && flag&BCT_ENEMY) return 0; //Global inmunity to attacks. - if (sd->special_state.killable && t_bl != s_bl) + if (sd->state.killable && t_bl != s_bl) { state |= BCT_ENEMY; //Universal Victim strip_enemy = 0; @@ -3241,7 +3245,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f case BL_PC: { TBL_PC *sd = (TBL_PC*) s_bl; - if (sd->special_state.killer && s_bl != t_bl) + if (sd->state.killer && s_bl != t_bl) { state |= BCT_ENEMY; //Is on a killing rampage :O strip_enemy = 0; diff --git a/src/map/log.c b/src/map/log.c index c850bab65..cbcdaf0f7 100644 --- a/src/map/log.c +++ b/src/map/log.c @@ -71,7 +71,7 @@ int log_branch(struct map_session_data *sd) #endif FILE *logfp; - if(log_config.enable_logs <= 0) + if(!log_config.enable_logs) return 0; nullpo_retr(0, sd); #ifndef TXT_ONLY @@ -168,7 +168,7 @@ int log_pick(struct map_session_data *sd, char *type, int mob_id, int nameid, in int log_zeny(struct map_session_data *sd, char *type, struct map_session_data *src_sd, int amount) { // FILE *logfp; - if(log_config.enable_logs <= 0 || (log_config.zeny!=1 && abs(amount)data[SC_BLADESTOP].timer != -1) //Won't stop when you are knocked away, go figure... // status_change_end(bl, SC_BLADESTOP, -1); + if (sc->data[SC_BASILICA].timer != -1) + status_change_end(bl, SC_BASILICA, -1); } } if (moveblock) map_delblock_sub(bl,0); diff --git a/src/map/map.h b/src/map/map.h index 0ce66d6b5..5ba672cd7 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -540,13 +540,13 @@ struct map_session_data { unsigned blockedmove :1; unsigned using_fake_npc :1; unsigned rewarp :1; //Signals that a player should warp as soon as he is done loading a map. [Skotlex] + unsigned killer : 1; + unsigned killable : 1; unsigned short autoloot; struct guild *gmaster_flag; } state; struct { unsigned char no_weapon_damage, no_magic_damage, no_misc_damage; - unsigned killer : 1; - unsigned killable : 1; unsigned restart_full_recover : 1; unsigned no_castcancel : 1; unsigned no_castcancel2 : 1; diff --git a/src/map/pc.c b/src/map/pc.c index 2095a8ff0..909233ddb 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2425,6 +2425,8 @@ int pc_insert_card(struct map_session_data *sd,int idx_card,int idx_equip) //Check validity if( nameid <= 0 || cardid <= 0 || + sd->status.inventory[idx_equip].amount < 1 || //These two should never be required due to pc_delitem zero'ing the data. + sd->status.inventory[idx_card].amount < 1 || (sd->inventory_data[idx_equip]->type!=IT_WEAPON && sd->inventory_data[idx_equip]->type!=IT_ARMOR)|| sd->inventory_data[idx_card]->type!=IT_CARD || // Prevent Hack [Ancyker] sd->status.inventory[idx_equip].identify==0 || diff --git a/src/map/skill.c b/src/map/skill.c index 43c1cdc4c..d4fbd4972 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -6094,9 +6094,7 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s case HP_BASILICA: skill_clear_unitgroup(src); sg = skill_unitsetting(src,skillid,skilllv,x,y,0); - sc_start4(src,type,100, - skilllv,0,BCT_SELF,sg->group_id, - skill_get_time(skillid,skilllv)); + sc_start(src,type,100,skilllv,skill_get_time(skillid,skilllv)); flag|=1; break; case CG_HERMODE: @@ -7355,7 +7353,6 @@ int skill_unit_onout (struct skill_unit *src, struct block_list *bl, unsigned in if (sc && sc->data[type].timer!=-1) status_change_end(bl,type,-1); break; - case UNT_BASILICA: //Clear basilica if the owner moved [Skotlex] case UNT_HERMODE: //Clear Hermode if the owner moved. if (sc && sc->data[type].timer!=-1 && sc->data[type].val3 == BCT_SELF && sc->data[type].val4 == sg->group_id) status_change_end(bl,type,-1); diff --git a/src/map/status.c b/src/map/status.c index 40d9351c9..83f4aa4aa 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -5925,10 +5925,12 @@ int status_change_end( struct block_list* bl , int type,int tid ) } break; case SC_HERMODE: - case SC_BASILICA: //Clear the skill area. [Skotlex] if(sc->data[type].val3 == BCT_SELF) skill_clear_unitgroup(bl); break; + case SC_BASILICA: //Clear the skill area. [Skotlex] + skill_clear_unitgroup(bl); + break; case SC_MOONLIT: //Clear the unit effect. [Skotlex] skill_setmapcell(bl,CG_MOONLIT, sc->data[SC_MOONLIT].val1, CELL_CLRMOONLIT); break; -- cgit v1.2.3-70-g09d2