From 1c98baf3ab95a8312385e19029d2c9abf352f78a Mon Sep 17 00:00:00 2001 From: mc_cameri Date: Mon, 22 Nov 2004 21:25:28 +0000 Subject: git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/athena@331 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog.txt | 4 + conf-tmpl/GM_account.txt | 47 +--- conf-tmpl/charcommand_athena.conf | 4 +- conf-tmpl/msg_athena.conf | 247 +---------------- doc/miscnotes.txt | 552 ++++++++++++++++++++++++++++++++++++++ src/common/mmo.h | 2 + src/login/login.c | 89 +++--- src/map/atcommand.c | 17 ++ src/map/atcommand.h | 1 + src/map/charcommand.c | 1 + src/map/script.c | 9 +- 11 files changed, 656 insertions(+), 317 deletions(-) create mode 100644 doc/miscnotes.txt diff --git a/Changelog.txt b/Changelog.txt index bd89c65f6..d85c7ca4a 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,5 +1,9 @@ Date Added 11/22 + * (TXT)Stripped some code off read_gm_accounts() and made with it addGM() [MC Cameri] + -Usage: addGM(account_id,level); + * (TXT)Changed GM_accounts.txt to meet new standards. [MC Cameri] + * (TXT)Enabled the use of id ranges in GM_accounts.txt [MC Cameri] * Added a few free()'s so that I am sure it freed the allocated memory (char & login) [Codemaster] * Changed monsters_ignore_gm option to a level value. [Valaris] (accounts greater than or equal to this setting won't be attacked by aggressives.) diff --git a/conf-tmpl/GM_account.txt b/conf-tmpl/GM_account.txt index a7acfa038..ea41ab682 100644 --- a/conf-tmpl/GM_account.txt +++ b/conf-tmpl/GM_account.txt @@ -1,35 +1,12 @@ -// GMとして認識するアカウントIDを設定 -// -// -// GMのレベルは0以下は無視で最大は99 -704554 99 -704555 1 -704556 1 -704557 1 -704558 1 -704559 1 -704560 1 -704561 1 -704562 1 -704563 1 -704564 1 -704565 1 -704566 1 -704567 1 -704568 1 -704569 1 -704570 1 -704571 1 -704572 1 -704573 1 -704574 1 -704575 1 -704576 1 -704577 1 -704578 1 -704579 1 -704580 1 -704581 1 -704582 1 -704583 1 -794584 1 +// eAthena's GM Accounts File +// Edited by MC Cameri to enable account id ranges +// Changing this file while login server is running +// Usage #1(Standard): +// Usage #2(Range): +// Examples: +// 2000002 99 +// 2000003-2000005 99 +// 2000003~2000005 99 +// 704585 30 + +704554-704584 99 diff --git a/conf-tmpl/charcommand_athena.conf b/conf-tmpl/charcommand_athena.conf index 729215dc5..1d55c0d98 100644 --- a/conf-tmpl/charcommand_athena.conf +++ b/conf-tmpl/charcommand_athena.conf @@ -1,10 +1,10 @@ // Athena charcommand Configuration file. -// Translated by Peter Kieser +// Created by MC Cameri for eAthena // Set here the symbol that you want to use for your commands // Only 1 character is get (default is '#'). You can set any character, // except control-character (0x00-0x1f), '%' (party chat speaking) and '/' (standard ragnarok GM commands) -// With default character, all commands begin by a '#': #revive +// With default character, all commands begin by a '#', example: #revive command_symbol: # job: 60 diff --git a/conf-tmpl/msg_athena.conf b/conf-tmpl/msg_athena.conf index a485c4d1f..e9253f20d 100644 --- a/conf-tmpl/msg_athena.conf +++ b/conf-tmpl/msg_athena.conf @@ -11,487 +11,246 @@ // Messages of GM commands // ----------------------- -//0: Warped. 0: Warped. -//1: Map not found. 1: Map not found. -//2: Coordinates out of range. 2: Coordinates out of range. -//3: Character not found. 3: Character not found. -//4: Jump to %s 4: Jump to %s -//5: Jump to %d %d 5: Jump to %d %d -//6: Character data respawn point saved. 6: Character data respawn point saved. -//7: Warping to respawn point. 7: Warping to respawn point. -//8: Speed changed. 8: Speed changed. -//9: Options changed. 9: Options changed. -//10: Invisible: Off 10: Invisible: Off -//11: Invisible: On 11: Invisible: On -//12: Your job has been changed. 12: Your job has been changed. -//13: A pity! You've died. 13: A pity! You've died. -//14: Character killed. 14: Character killed. -//15: Player warped (message sends to player too). 15: Player warped (message sends to player too). -//16: You've been revived! It's a miracle! 16: You've been revived! It's a miracle! -//17: HP, SP recovered. 17: HP, SP recovered. -//18: Item created. 18: Item created. -//19: Invalid item ID or name. 19: Invalid item ID or name. -//20: All of your items have been removed. 20: All of your items have been removed. -//21: Base level raised. 21: Base level raised. -//22: Base level lowered. 22: Base level lowered. -//23: Job level can't go any higher. 23: Job level can't go any higher. -//24: Job level raised. 24: Job level raised. -//25: Job level lowered. 25: Job level lowered. -//26: Help commands: 26: Help commands: -//27: File help.txt not found. 27: File help.txt not found. -//28: No player found. 28: No player found. -//29: 1 player found. 29: 1 player found. -//30: %d players found. 30: %d players found. -//31: PvP: Off. 31: PvP: Off. -//32: PvP: On. 32: PvP: On. -//33: GvG: Off. 33: GvG: Off. -//34: GvG: On. 34: GvG: On. -//35: You can't use this command with this class. 35: You can't use this command with this class. -//36: Appearence changed. 36: Appearence changed. -//37: An invalid number was specified. 37: An invalid number was specified. -//38: Invalid location number or name. 38: Invalid location number or name. -//39: All monster summoned! 39: All monster summoned! -//40: Invalid monster ID or name. 40: Invalid monster ID or name. -//41: Impossible to decrease the number/value. 41: Impossible to decrease the number/value. -//42: Stat changed. 42: Stat changed. -//43: You're not in a guild. 43: You're not in a guild. -//44: You're not the master of your guild. 44: You're not the master of your guild. -//45: Guild level change failed. 45: Guild level change failed. -//46: %s recalled! 46: %s recalled! -//47: Base level can't go any higher. 47: Base level can't go any higher. -//48: Character's job changed. 48: Character's job changed. -//49: Invalid job ID. 49: Invalid job ID. -//50: You already have some GM powers. 50: You already have some GM powers. -//51: Character revived. 51: Character revived. -//52: This option cannot be used in PK Mode. 52: This option cannot be used in PK Mode. -//53: '%s' stats: 53: '%s' stats: -//54: No player found in map '%s'. 54: No player found in map '%s'. -//55: 1 player found in map '%s'. 55: 1 player found in map '%s'. -//56: %d players found in map '%s'. 56: %d players found in map '%s'. -//57: Character's respawn point changed. 57: Character's respawn point changed. -//58: Character's options changed. 58: Character's options changed. -//59: Night has fallen. 59: Night has fallen. -//60: Day has arrived. 60: Day has arrived. -//61: The holy messenger has given judgement. 61: The holy messenger has given judgement. -//62: Judgement was made. 62: Judgement was made. -//63: Mercy has been shown. 63: Mercy has been shown. -//64: Mercy has been granted. 64: Mercy has been granted. -//65: Character's base level raised. 65: Character's base level raised. -//66: Character's base level lowered. 66: Character's base level lowered. -//67: Character's job level can't go any higher. 67: Character's job level can't go any higher. -//68: character's job level raised. 68: character's job level raised. -//69: Character's job level lowered. 69: Character's job level lowered. -//70: You have learned the skill. 70: You have learned the skill. -//71: You have forgotten the skill. 71: You have forgotten the skill. -//72: Guild siege warfare start! 72: Guild siege warfare start! -//73: Already it has started siege warfare. 73: Already it has started siege warfare. -//74: Guild siege warfare end! 74: Guild siege warfare end! -//75: Siege warfare hasn't started yet. 75: Siege warfare hasn't started yet. -//76: You have received all skills. 76: You have received all skills. -//77: The reference result of '%s' (name: id): 77: The reference result of '%s' (name: id): -//78: %s: %d 78: %s: %d -//79: It is %d affair above. 79: It is %d affair above. -//80: Give a display name and monster name/id please. 80: Give a display name and monster name/id please. -//81: Your GM level don't authorise you to do this action on this player. 81: Your GM level don't authorise you to do this action on this player. -//82: Please, use one of this number/name: 82: Please, use one of this number/name: -//83: Cannot spawn emperium. 83: Cannot spawn emperium. -//84: All stats changed! 84: All stats changed! -//85: Invalid time for ban command. 85: Invalid time for ban command. -//86: Sorry, but a player name have at least 4 characters. 86: Sorry, but a player name have at least 4 characters. -//87: Sorry, but a player name have 23 characters maximum. 87: Sorry, but a player name have 23 characters maximum. -//88: Character name sends to char-server to ask it. 88: Character name sends to char-server to ask it. -//89: Sorry, it's already the night. Impossible to execute the command. 89: Sorry, it's already the night. Impossible to execute the command. -//90: Sorry, it's already the day. Impossible to execute the command. 90: Sorry, it's already the day. Impossible to execute the command. -//91: Character's base level can't go any higher. 91: Character's base level can't go any higher. -//92: All characters recalled! 92: All characters recalled! -//93: All online characters of the %s guild are near you. 93: All online characters of the %s guild are near you. -//94: Incorrect name/ID, or no one from the guild is online. 94: Incorrect name/ID, or no one from the guild is online. -//95: All online characters of the %s party are near you. 95: All online characters of the %s party are near you. -//96: Incorrect name or ID, or no one from the party is online. 96: Incorrect name or ID, or no one from the party is online. -//97: Item database reloaded. 97: Item database reloaded. -//98: Monster database reloaded. 98: Monster database reloaded. -//99: Skill database reloaded. 99: Skill database reloaded. -//100: Scripts reloaded. 100: Scripts reloaded. -//101: Login-server asked to reload GM accounts and their level. 101: Login-server asked to reload GM accounts and their level. -//102: Mounted Peco. 102: Mounted Peco. -//103: No longer spying on the %s guild. 103: No longer spying on the %s guild. -//104: Spying on the %s guild. 104: Spying on the %s guild. -//105: No longer spying on the %s party. 105: No longer spying on the %s party. -//106: Spying on the %s party. 106: Spying on the %s party. -//107: All items have been repaired. 107: All items have been repaired. -//108: No item need to be repaired. 108: No item need to be repaired. -//109: Player has been nuked! 109: Player has been nuked! -//110: Npc Enabled. 110: Npc Enabled. -//111: This NPC doesn't exist. 111: This NPC doesn't exist. -//112: Npc Disabled. 112: Npc Disabled. -//113: %d item(s) removed by a GM. 113: %d item(s) removed by a GM. -//114: %d item(s) removed from the player. 114: %d item(s) removed from the player. -//115: %d item(s) removed. Player had only %d on %d items. 115: %d item(s) removed. Player had only %d on %d items. -//116: Character does not have the item. 116: Character does not have the item. -//117: GM has send you in jails. 117: GM has send you in jails. -//118: Player warped in jails. 118: Player warped in jails. -//119: This player is not in jails. 119: This player is not in jails. -//120: GM has discharge you. 120: GM has discharge you. -//121: Player warped to Prontera. 121: Player warped to Prontera. -//122: Disguise applied. 122: Disguise applied. -//123: Monster/NPC name/id hasn't been found. 123: Monster/NPC name/id hasn't been found. -//124: Undisguise applied. 124: Undisguise applied. -//125: You're not disguised. 125: You're not disguised. -//126: You accept any wisp (no wisper is refused). 126: You accept any wisp (no wisper is refused). -//127: You accept any wisp, except thoses from %d player(s): 127: You accept any wisp, except thoses from %d player(s): -//128: You refuse all wisps (no specifical wisper is refused). 128: You refuse all wisps (no specifical wisper is refused). -//129: You refuse all wisps, AND refuse wisps from %d player(s): 129: You refuse all wisps, AND refuse wisps from %d player(s): -//130: '%s' accept any wisp (no wisper is refused). 130: '%s' accept any wisp (no wisper is refused). -//131: '%s' accept any wisp, except thoses from %d player(s): 131: '%s' accept any wisp, except thoses from %d player(s): -//132: '%s' refuse all wisps (no specifical wisper is refused). 132: '%s' refuse all wisps (no specifical wisper is refused). -//133: '%s' refuse all wisps, AND refuse wisps from %d player(s): 133: '%s' refuse all wisps, AND refuse wisps from %d player(s): -//134: '%s' already accepts all wispers. 134: '%s' already accepts all wispers. -//135: '%s' now accepts all wispers. 135: '%s' now accepts all wispers. -//136: A GM has authorised all wispers for you. 136: A GM has authorised all wispers for you. -//137: '%s' already blocks all wispers. 137: '%s' already blocks all wispers. -//138: '%s' blocks now all wispers. 138: '%s' blocks now all wispers. -//139: A GM has blocked all wispers for you. 139: A GM has blocked all wispers for you. -//140: Character's disguise applied. 140: Character's disguise applied. -//141: Character's undisguise applied. 141: Character's undisguise applied. -//142: Character is not disguised. 142: Character is not disguised. -//143: Give a monster name/id please. 143: Give a monster name/id please. -//144: Invalid actual email. If you have default e-mail, type a@a.com. 144: Invalid actual email. If you have default e-mail, type a@a.com. -//145: Invalid new email. Please enter a real e-mail. 145: Invalid new email. Please enter a real e-mail. -//146: New email must be a real e-mail. 146: New email must be a real e-mail. -//147: New email must be different of the actual e-mail. 147: New email must be different of the actual e-mail. -//148: Information sended to login-server via char-server. 148: Information sended to login-server via char-server. -//149: Impossible to increase the number/value. 149: Impossible to increase the number/value. -//150: No GM found. 150: No GM found. -//151: 1 GM found. 151: 1 GM found. -//152: %d GMs found. 152: %d GMs found. -//153: %s is Unknown Command. 153: %s is Unknown Command. -//154: %s failed. 154: %s failed. -//155: Impossible to change your job. 155: Impossible to change your job. -//156: HP or/and SP modified. 156: HP or/and SP modified. -//157: HP and SP are already with the good value. 157: HP and SP are already with the good value. -//158: Base level can't go any lower. 158: Base level can't go any lower. -//159: Job level can't go any lower. 159: Job level can't go any lower. -//160: PvP is already Off. 160: PvP is already Off. -//161: PvP is already On. 161: PvP is already On. -//162: GvG is already Off. 162: GvG is already Off. -//163: GvG is already On. 163: GvG is already On. -//164: Your memo point #%d doesn't exist. 164: Your memo point #%d doesn't exist. -//165: All monsters killed! 165: All monsters killed! -//166: No item has been refined! 166: No item has been refined! -//167: 1 item has been refined! 167: 1 item has been refined! -//168: %d items have been refined! 168: %d items have been refined! -//169: This item (%d: '%s') is not an equipment. 169: This item (%d: '%s') is not an equipment. -//170: This item is not an equipment. 170: This item is not an equipment. -//171: %d - void 171: %d - void -//172: You replace previous memo position %d - %s (%d,%d). 172: You replace previous memo position %d - %s (%d,%d). -//173: Note: you don't have the 'Warp' skill level to use it. 173: Note: you don't have the 'Warp' skill level to use it. -//174: Number of status points changed! 174: Number of status points changed! -//175: Number of skill points changed! 175: Number of skill points changed! -//176: Number of zenys changed! 176: Number of zenys changed! -//177: Impossible to decrease a stat. 177: Impossible to decrease a stat. -//178: Impossible to increase a stat. 178: Impossible to increase a stat. -//179: Guild level changed. 179: Guild level changed. -//180: The monter/egg name/id doesn't exist. 180: The monter/egg name/id doesn't exist. -//181: You already have a pet. 181: You already have a pet. -//182: Pet friendly value changed! 182: Pet friendly value changed! -//183: Pet friendly is already the good value. 183: Pet friendly is already the good value. -//184: Sorry, but you have no pet. 184: Sorry, but you have no pet. -//185: Pet hungry value changed! 185: Pet hungry value changed! -//186: Pet hungry is already the good value. 186: Pet hungry is already the good value. -//187: You can now rename your pet. 187: You can now rename your pet. -//188: You can already rename your pet. 188: You can already rename your pet. -//189: This player can now rename his/her pet. 189: This player can now rename his/her pet. -//190: This player can already rename his/her pet. 190: This player can already rename his/her pet. -//191: Sorry, but this player has no pet. 191: Sorry, but this player has no pet. -//192: Impossible to change the character's job. 192: Impossible to change the character's job. -//193: Character's base level can't go any lower. 193: Character's base level can't go any lower. -//194: Character's job level can't go any lower. 194: Character's job level can't go any lower. -//195: All players have been kicked! 195: All players have been kicked! -//196: You already have this quest skill. 196: You already have this quest skill. -//197: This skill number doesn't exist or isn't a quest skill. 197: This skill number doesn't exist or isn't a quest skill. -//198: This skill number doesn't exist. 198: This skill number doesn't exist. -//199: This player has learned the skill. 199: This player has learned the skill. -//200: This player already has this quest skill. 200: This player already has this quest skill. -//201: You don't have this quest skill. 201: You don't have this quest skill. -//202: This player has forgotten the skill. 202: This player has forgotten the skill. -//203: This player doesn't have this quest skill. 203: This player doesn't have this quest skill. -//204: WARNING: more than 1000 spiritballs can CRASH your server and/or client! 204: WARNING: more than 1000 spiritballs can CRASH your server and/or client! -//205: You already have this number of spiritballs. 205: You already have this number of spiritballs. -//206: '%s' skill points reseted! 206: '%s' skill points reseted! -//207: '%s' stats points reseted! 207: '%s' stats points reseted! -//208: '%s' skill and stats points reseted! 208: '%s' skill and stats points reseted! -//209: Character's number of skill points changed! 209: Character's number of skill points changed! -//210: Character's number of status points changed! 210: Character's number of status points changed! -//211: Character's number of zenys changed! 211: Character's number of zenys changed! -//212: Cannot mount a Peco while in disguise. 212: Cannot mount a Peco while in disguise. -//213: You can not mount a peco with your job. 213: You can not mount a peco with your job. -//214: Unmounted Peco. 214: Unmounted Peco. -//215: This player cannot mount a Peco while in disguise. 215: This player cannot mount a Peco while in disguise. -//216: Now, this player mounts a peco. 216: Now, this player mounts a peco. -//217: This player can not mount a peco with his/her job. 217: This player can not mount a peco with his/her job. -//218: Now, this player has not more peco. 218: Now, this player has not more peco. -//219: %d day 219: %d day -//220: %d days 220: %d days -//221: %s %d hour 221: %s %d hour -//222: %s %d hours 222: %s %d hours -//223: %s %d minute 223: %s %d minute -//224: %s %d minutes 224: %s %d minutes -//225: %s and %d second 225: %s and %d second -//226: %s and %d seconds 226: %s and %d seconds -//227: Cannot wear disguise while riding a Peco. 227: Cannot wear disguise while riding a Peco. -//228: Character cannot wear disguise while riding a Peco. 228: Character cannot wear disguise while riding a Peco. -//229: Your Effect Has Changed. 229: Your Effect Has Changed. -//230: Server time (normal time): %A, %B %d %Y %X. 230: Server time (normal time): %A, %B %d %Y %X. -//231: Game time: The game is in permanent daylight. 231: Game time: The game is in permanent daylight. -//232: Game time: The game is in permanent night. 232: Game time: The game is in permanent night. -//233: Game time: The game is actualy in night for %s. 233: Game time: The game is actualy in night for %s. -//234: Game time: After, the game will be in permanent daylight. 234: Game time: After, the game will be in permanent daylight. -//235: Game time: The game is actualy in daylight for %s. 235: Game time: The game is actualy in daylight for %s. -//236: Game time: After, the game will be in permanent night. 236: Game time: After, the game will be in permanent night. -//237: Game time: After, the game will be in night for %s. 237: Game time: After, the game will be in night for %s. -//238: Game time: A day cycle has a normal duration of %s. 238: Game time: A day cycle has a normal duration of %s. -//239: Game time: After, the game will be in daylight for %s. 239: Game time: After, the game will be in daylight for %s. -//240: %d monster(s) summoned! 240: %d monster(s) summoned! 241: you be a killa.. 242: you gonna be own3d.. @@ -502,11 +261,7 @@ // Messages of others (not for GM commands) // ---------------------------------------- -//500: Actually, it's the night... 500: Actually, it's the night... -//501: Your account time limit is: %d-%m-%Y %H:%M:%S. 501: Your account time limit is: %d-%m-%Y %H:%M:%S. -//502: The day has arrived! 502: The day has arrived! -//503: The night has fallen... -503: The night has fallen... +503: The night has fallen... \ No newline at end of file diff --git a/doc/miscnotes.txt b/doc/miscnotes.txt new file mode 100644 index 000000000..4850b77f3 --- /dev/null +++ b/doc/miscnotes.txt @@ -0,0 +1,552 @@ +// **************************************************** +// * Miscellaneous Notes (Added by MC Cameri) * +// **************************************************** + +// ***************************************************************** +// * Emotions that will be shown if 'int type' is one of the case. * +// ***************************************************************** +void clif_emotion(struct block_list *bl,int type); +case for 'int type': +0 = ! 10 = KO (Scissor) 20 = Hmmm 30 = Kiss 1 (R) 40 = Tsk tsk tsk (No) +1 = ? 11 = Fist (Stone) 21 = Number 1! 31 = Kiss 2 (L) 41 = Petting +2 = Music 12 = Hand (Paper) 22 = No (??) 32 = Smoking 42 = SP! (Timer) +3 = Heart 1 13 = Korean Flag 23 = OMG!! 33 = Okay 43 = Obsessed 2 (Dumb face, eyes popping) +4 = Sweat 14 = Heart 2 24 = O 34 = ... (Bugged) 44 = Come (Moving finger) +5 = Light bulb 15 = Thanks 25 = X 35 = ??? Flag 45 = Yawn (Sleepy) +6 = Annoyed 16 = Wah (Crying) 26 = Help! 36 = Evil 2 46 = Congratulations +7 = Smoke cloud 17 = Sorry 27 = Go! 37 = Obsessed 1 47 = HP! (Timer) +8 = $ 18 = Heh (Laughing) 28 = Sobbing 38 = Two Hearts +9 = ... 19 = Sweating 29 = Evil 1 39 = Tongue + +// ******************************** +// * Elemental Defense Resistance * +// ******************************** +sd->subele[0] - Neutral Property +sd->subele[1] - Water Property +sd->subele[2] - Earth Property +sd->subele[3] - Fire Property +sd->subele[4] - Wind Property +sd->subele[5] - Poison Property +sd->subele[6] - Holy Property +sd->subele[7] - Shadow Property +sd->subele[8] - Ghost Property +sd->subele[9] - Undead Property + +// *************************************** +// * Elemental Monster Attack Resistance * +// *************************************** + +sd->subrace[0] - Neutral Type +sd->subrace[1] - Undead Type +sd->subrace[2] - Brute Type +sd->subrace[3] - Plant Type +sd->subrace[4] - Insect Type +sd->subrace[5] - Fish Type +sd->subrace[6] - Demon Type +sd->subrace[7] - Demi-Human Type +sd->subrace[8] - Angel Type +sd->subrace[9] - Dragon Type +sd->subrace[10] - Boss Type #1? +sd->subrace[11] - Boss Type #2? + +// ************** +// * Misc stuff * +// ************** + +WFIFOL(fd,2)=1; - Sever Closed + +// ******************* +// * Skills List * +// ******************* +// * ID = Skill Name * +// ******************* +ID Skill Name +1 = NV_BASIC +2 = SM_SWORD +3 = SM_TWOHAND +4 = SM_RECOVERY +5 = SM_BASH +6 = SM_PROVOKE +7 = SM_MAGNUM +8 = SM_ENDURE +9 = MG_SRECOVERY +10 = MG_SIGHT +11 = MG_NAPALMBEAT +12 = MG_SAFETYWALL +13 = MG_SOULSTRIKE +14 = MG_COLDBOLT +15 = MG_FROSTDIVER +16 = MG_STONECURSE +17 = MG_FIREBALL +18 = MG_FIREWALL +19 = MG_FIREBOLT +20 = MG_LIGHTNINGBOLT +21 = MG_THUNDERSTORM +22 = AL_DP +23 = AL_DEMONBANE +24 = AL_RUWACH +25 = AL_PNEUMA +26 = AL_TELEPORT +27 = AL_WARP +28 = AL_HEAL +29 = AL_INCAGI +30 = AL_DECAGI +31 = AL_HOLYWATER +32 = AL_CRUCIS +33 = AL_ANGELUS +34 = AL_BLESSING +35 = AL_CURE +36 = MC_INCCARRY +37 = MC_DISCOUNT +38 = MC_OVERCHARGE +39 = MC_PUSHCART +40 = MC_IDENTIFY +41 = MC_VENDING +42 = MC_MAMMONITE +43 = AC_OWL +44 = AC_VULTURE +45 = AC_CONCENTRATION +46 = AC_DOUBLE +47 = AC_SHOWER +48 = TF_DOUBLE +49 = TF_MISS +50 = TF_STEAL +51 = TF_HIDING +52 = TF_POISON +53 = TF_DETOXIFY +54 = ALL_RESURRECTION +55 = KN_SPEARMASTERY +56 = KN_PIERCE +57 = KN_BRANDISHSPEAR +58 = KN_SPEARSTAB +59 = KN_SPEARBOOMERANG +60 = KN_TWOHANDQUICKEN +61 = KN_AUTOCOUNTER +62 = KN_BOWLINGBASH +63 = KN_RIDING +64 = KN_CAVALIERMASTERY +65 = PR_MACEMASTERY +66 = PR_IMPOSITIO +67 = PR_SUFFRAGIUM +68 = PR_ASPERSIO +69 = PR_BENEDICTIO +70 = PR_SANCTUARY +71 = PR_SLOWPOISON +72 = PR_STRECOVERY +73 = PR_KYRIE +74 = PR_MAGNIFICAT +75 = PR_GLORIA +76 = PR_LEXDIVINA +77 = PR_TURNUNDEAD +78 = PR_LEXAETERNA +79 = PR_MAGNUS +80 = WZ_FIREPILLAR +81 = WZ_SIGHTRASHER +83 = WZ_METEOR +84 = WZ_JUPITEL +85 = WZ_VERMILION +86 = WZ_WATERBALL +87 = WZ_ICEWALL +88 = WZ_FROSTNOVA +89 = WZ_STORMGUST +90 = WZ_EARTHSPIKE +91 = WZ_HEAVENDRIVE +92 = WZ_QUAGMIRE +93 = WZ_ESTIMATION +94 = BS_IRON +95 = BS_STEEL +96 = BS_ENCHANTEDSTONE +97 = BS_ORIDEOCON +98 = BS_DAGGER +99 = BS_SWORD +100 = BS_TWOHANDSWORD +101 = BS_AXE +102 = BS_MACE +103 = BS_KNUCKLE +104 = BS_SPEAR +105 = BS_HILTBINDING +106 = BS_FINDINGORE +107 = BS_WEAPONRESEARCH +108 = BS_REPAIRWEAPON +109 = BS_SKINTEMPER +110 = BS_HAMMERFALL +111 = BS_ADRENALINE +112 = BS_WEAPONPERFECT +113 = BS_OVERTHRUST +114 = BS_MAXIMIZE +115 = HT_SKIDTRAP +116 = HT_LANDMINE +117 = HT_ANKLESNARE +118 = HT_SHOCKWAVE +119 = HT_SANDMAN +120 = HT_FLASHER +121 = HT_FREEZINGTRAP +122 = HT_BLASTMINE +123 = HT_CLAYMORETRAP +124 = HT_REMOVETRAP +125 = HT_TALKIEBOX +126 = HT_BEASTBANE +127 = HT_FALCON +128 = HT_STEELCROW +129 = HT_BLITZBEAT +130 = HT_DETECTING +131 = HT_SPRINGTRAP +132 = AS_RIGHT +133 = AS_LEFT +134 = AS_KATAR +135 = AS_CLOAKING +136 = AS_SONICBLOW +137 = AS_GRIMTOOTH +138 = AS_ENCHANTPOISON +139 = AS_POISONREACT +140 = AS_VENOMDUST +141 = AS_SPLASHER +142 = NV_FIRSTAID +143 = NV_TRICKDEAD +144 = SM_MOVINGRECOVERY +145 = SM_FATALBLOW +146 = SM_AUTOBERSERK +147 = AC_MAKINGARROW +148 = AC_CHARGEARROW +149 = TF_SPRINKLESAND +150 = TF_BACKSLIDING +151 = TF_PICKSTONE +152 = TF_THROWSTONE +153 = MC_CARTREVOLUTION +154 = MC_CHANGECART +155 = MC_LOUD +156 = AL_HOLYLIGHT +157 = MG_ENERGYCOAT +158 = NPC_PIERCINGATT +159 = NPC_MENTALBREAKER +160 = NPC_RANGEATTACK +161 = NPC_ATTRICHANGE +162 = NPC_CHANGEWATER +163 = NPC_CHANGEGROUND +164 = NPC_CHANGEFIRE +165 = NPC_CHANGEWIND +166 = NPC_CHANGEPOISON +167 = NPC_CHANGEHOLY +168 = NPC_CHANGEDARLNESS +169 = NPC_CHANGETELEKINESIS +170 = NPC_CRITICALSLASH +171 = NPC_COMBOATTACK +172 = NPC_GUIDEATTACK +173 = NPC_SELFDESTRUCTION +174 = NPC_SPLASHATTACK +175 = NPC_SUICIDE +176 = NPC_POISON +177 = NPC_BLINDATTACK +178 = NPC_SILENCEATTACK +179 = NPC_STUNATTACK +180 = NPC_PETRIFYATTACK +181 = NPC_CURSEATTACK +182 = NPC_SLEEPATTACK +183 = NPC_RANDOMATTACK +184 = NPC_WATERATTACK +185 = NPC_GROUNDATTACK +186 = NPC_FIREATTACK +187 = NPC_WINDATTACK +188 = NPC_POISONATTACK +189 = NPC_HOLYATTACK +190 = NPC_DARKNESSATTACK +191 = NPC_TELEKINESISATTACK +192 = NPC_MAGICALATTACK +193 = NPC_METAMORPHOSIS +194 = NPC_PROVOCATION +195 = NPC_SMOKING +196 = NPC_SUMMONSLAVE +197 = NPC_EMOTION +198 = NPC_TRANSFORMATION +199 = NPC_BLOODDRAIN +200 = NPC_ENERGYDRAIN +201 = NPC_KEEPING +202 = NPC_DARKBREATH +203 = NPC_DARKBLESSING +204 = NPC_BARRIER +205 = NPC_DEFENDER +206 = NPC_LICK +207 = NPC_HALLUCINATION +208 = NPC_REBIRTH +209 = NPC_SUMMONMONSTER +210 = RG_SNATCHER +211 = RG_STEALCOIN +212 = RG_BACKSTAP +213 = RG_TUNNELDRIVE +214 = RG_RAID +215 = RG_STRIPWEAPON +216 = RG_STRIPSHIELD +217 = RG_STRIPARMOR +218 = RG_STRIPHELM +219 = RG_INTIMIDATE +220 = RG_GRAFFITI +221 = RG_FLAGGRAFFITI +222 = RG_CLEANER +223 = RG_GANGSTER +224 = RG_COMPULSION +225 = RG_PLAGIARISM +226 = AM_AXEMASTERY +227 = AM_LEARNINGPOTION +228 = AM_PHARMACY +229 = AM_DEMONSTRATION +230 = AM_ACIDTERROR +231 = AM_POTIONPITCHER +232 = AM_CANNIBALIZE +233 = AM_SPHEREMINE +234 = AM_CP_WEAPON +235 = AM_CP_SHIELD +236 = AM_CP_ARMOR +237 = AM_CP_HELM +248 = CR_TRUST +249 = CR_AUTOGUARD +250 = CR_SHIELDCHARGE +251 = CR_SHIELDBOOMERANG +252 = CR_REFLECTSHIELD +253 = CR_HOLYCROSS +254 = CR_GRANDCROSS +255 = CR_DEVOTION +256 = CR_PROVIDENCE +257 = CR_DEFENDER +258 = CR_SPEARQUICKEN +259 = MO_IRONHAND +260 = MO_SPIRITSRECOVERY +261 = MO_CALLSPIRITS +262 = MO_ABSORBSPIRITS +263 = MO_TRIPLEATTACK +264 = MO_BODYRELOCATION +265 = MO_DODGE +266 = MO_INVESTIGATE +267 = MO_FINGEROFFENSIVE +268 = MO_STEELBODY +269 = MO_BLADESTOP +270 = MO_EXPLOSIONSPIRITS +271 = MO_EXTREMITYFIST +272 = MO_CHAINCOMBO +273 = MO_COMBOFINISH +274 = SA_ADVANCEDBOOK +275 = SA_CASTCANCEL +276 = SA_MAGICROD +277 = SA_SPELLBREAKER +278 = SA_FREECAST +279 = SA_AUTOSPELL +280 = SA_FLAMELAUNCHER +281 = SA_FROSTWEAPON +282 = SA_LIGHTNINGLOADER +283 = SA_SEISMICWEAPON +284 = SA_DRAGONOLOGY +285 = SA_VOLCANO +286 = SA_DELUGE +287 = SA_VIOLENTGALE +288 = SA_LANDPROTECTOR +289 = SA_DISPELL +290 = SA_ABRACADABRA +291 = SA_MONOCELL +292 = SA_CLASSCHANGE +293 = SA_SUMMONMONSTER +294 = SA_REVERSEORCISH +295 = SA_DEATH +296 = SA_FORTUNE +297 = SA_TAMINGMONSTER +298 = SA_QUESTION +299 = SA_GRAVITY +300 = SA_LEVELUP +301 = SA_INSTANTDEATH +302 = SA_FULLRECOVERY +303 = SA_COMA +304 = BD_ADAPTATION +305 = BD_ENCORE +306 = BD_LULLABY +307 = BD_RICHMANKIM +308 = BD_ETERNALCHAOS +309 = BD_DRUMBATTLEFIELD +310 = BD_RINGNIBELUNGEN +311 = BD_ROKISWEIL +312 = BD_INTOABYSS +313 = BD_SIEGFRIED +315 = BA_MUSICALLESSON +316 = BA_MUSICALSTRIKE +317 = BA_DISSONANCE +318 = BA_FROSTJOKE +319 = BA_WHISTLE +320 = BA_ASSASSINCROSS +321 = BA_POEMBRAGI +322 = BA_APPLEIDUN +323 = DC_DANCINGLESSON +324 = DC_THROWARROW +325 = DC_UGLYDANCE +326 = DC_SCREAM +327 = DC_HUMMING +328 = DC_DONTFORGETME +329 = DC_FORTUNEKISS +330 = DC_SERVICEFORYOU +334 = WE_MALE +335 = WE_FEMALE +336 = WE_CALLPARTNER +355 = LK_AURABLADE +356 = LK_PARRYING +357 = LK_CONCENTRATION +358 = LK_TENSIONRELAX +359 = LK_BERSERK +361 = HP_ASSUMPTIO +362 = HP_BASILICA +363 = HP_MEDITATIO +364 = HW_SOULDRAIN +365 = HW_MAGICCRASHER +366 = HW_MAGICPOWER +367 = PA_PRESSURE +368 = PA_SACRIFICE +369 = PA_GOSPEL +370 = CH_PALMSTRIKE +371 = CH_TIGERFIST +372 = CH_CHAINCRUSH +373 = PF_HPCONVERSION +374 = PF_SOULCHANGE +375 = PF_SOULBURN +376 = ASC_KATAR +377 = ASC_HALLUCINATION +378 = ASC_EDP +379 = ASC_BREAKER +380 = SN_SIGHT +381 = SN_FALCONASSAULT +382 = SN_SHARPSHOOTING +383 = SN_WINDWALK +384 = WS_MELTDOWN +385 = WS_CREATECOIN +386 = WS_CREATENUGGET +387 = WS_CARTBOOST +388 = WS_SYSTEMCREATE +389 = ST_CHASEWALK +390 = ST_REJECTSWORD +392 = CR_ALCHEMY +393 = CR_SYNTHESISPOTION +394 = CG_ARROWVULCAN +395 = CG_MOONLIT +396 = CG_MARIONETTE +397 = LK_SPIRALPIERCE +398 = LK_HEADCRUSH +399 = LK_JOINTBEAT +400 = HW_NAPALMVULCAN +401 = CH_SOULCOLLECT +402 = PF_MINDBREAKER +403 = PF_MEMORIZE +404 = PF_FOGWALL +405 = PF_SPIDERWEB +406 = ASC_METEORASSAULT +407 = ASC_CDP +408 = WE_BABY +409 = WE_CALLPARENT +410 = WE_CALLBABY +411 = TK_RUN +412 = TK_READYSTORM +413 = TK_STORMKICK +414 = TK_READYDOWN +415 = TK_DOWNKICK +416 = TK_READYTURN +417 = TK_TURNKICK +418 = TK_READYCOUNTER +419 = TK_COUNTER +420 = TK_DODGE +421 = TK_JUMPKICK +422 = TK_HPTIME +423 = TK_SPTIME +424 = TK_POWER +425 = TK_SEVENWIND +426 = TK_HIGHJUMP +427 = SG_FEEL +428 = SG_SUN_WARM +429 = SG_MOON_WARM +430 = SG_STAR_WARM +431 = SG_SUN_COMFORT +432 = SG_MOON_COMFORT +433 = SG_STAR_COMFORT +434 = SG_HATE +435 = SG_SUN_ANGER +436 = SG_MOON_ANGER +437 = SG_STAR_ANGER +438 = SG_SUN_BLESS +439 = SG_MOON_BLESS +440 = SG_STAR_BLESS +441 = SG_DEVIL +442 = SG_FRIEND +443 = SG_KNOWLEDGE +444 = SG_FUSION +445 = SL_ALCHEMIST +446 = AM_BERSERKPITCHER +447 = SL_MONK +448 = SL_STAR +449 = SL_SAGE +450 = SL_CRUSADER +451 = SL_SUPERNOVICE +452 = SL_KNIGHT +453 = SL_WIZARD +454 = SL_PRIEST +455 = SL_BARDDANCER +456 = SL_ROGUE +457 = SL_ASSASIN +458 = SL_BLACKSMITH +459 = BS_ADRENALINE2 +460 = SL_HUNTER +461 = SL_SOULLINKER +462 = SL_KAIZEL +463 = SL_KAAHI +464 = SL_KAUPE +465 = SL_KAITE +466 = SL_KAINA +467 = SL_STIN +468 = SL_STUN +469 = SL_SMA +470 = SL_SWOO +471 = SL_SKE +472 = SL_SKA +10000 = GD_APPROVAL +10001 = GD_KAFRACONTRACT +10002 = GD_GUARDRESEARCH +10003 = GD_CHARISMA +10004 = GD_EXTENSION + +// ************************ +// * Item DB - Use Script * +// ************************ +itemskill: + -Format: itemskill skill_id,skill_lvl,"name"; + -Example: itemskill 28,3,"Heal"; //Healing skill + +itemheal: + -Format: itemheal hp,sp; + -Example: itemheal 30,0; //+30 HP, +0 SP. + +sc_start: + -Format: sc_start SC_CONSTANT,duration,value; + -Example: sc_start SC_POISON,1800,; //Starts Poison Status for 30 seconds + +sc_end: + -Format: sc_end SC_CONSTANT; + -Example: sc_end SC_BLIND; //Ends Blind Status + +warp: + -Format: warp "map",x,y; + -Example: warp "Random",0,0; //Fly wing + -Example: warp "SavePoint",0,0; //Butterfly wing + +getitem: + -Format: getitem item_id,count; + -Example: getitem 512,2; //Gives you two Apples + +produce: + -Format: produce produce_type; + -Example: produce 16; //Mini-furnace + +pet: + -Format: pet pet_id; + -Example: pet 1002; //Taming item for Poring + +monster: + -Example: monster "this",0,0,"--ja--",-1,1,""; //Dead branch + +percentheal: + -Format: percentheal percent_hp,percent_sp; + -Example: percentheal 100,100; //Heals you 100% of both HP and SP + +// ************************** +// * Item DB - Equip Script * +// ************************** \ No newline at end of file diff --git a/src/common/mmo.h b/src/common/mmo.h index a21680191..865468a16 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -14,6 +14,8 @@ #define RETCODE "\n" // (LF:Unix系) #endif +#define RET RETCODE + #define FIFOSIZE_SERVERLINK 128*1024 // set to 0 to not check IP of player between each server. diff --git a/src/login/login.c b/src/login/login.c index 28cfafce9..8d7ce12a2 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -191,6 +191,46 @@ int isGM(int account_id) { return 0; } +//---------------------------------------------------------------------- +// Adds a new GM using acc id and level +//---------------------------------------------------------------------- +void addGM(int account_id, int level) { + int i; + int do_add = 0; + for(i = 0; i < auth_num; i++) { + if (auth_dat[i].account_id==account_id) { + do_add = 1; + break; + } + } + for(i = 0; i < GM_num; i++) + if (gm_account_db[i].account_id == account_id) { + if (gm_account_db[i].level == level) + printf("addGM: GM account %d defined twice (same level: %d).\n", account_id, level); + else { + printf("addGM: GM account %d defined twice (levels: %d and %d).\n", account_id, gm_account_db[i].level, level); + gm_account_db[i].level = level; + } + return; + } + + // if new account + if (i == GM_num && do_add) { + if (GM_num >= GM_max) { + GM_max += 256; + gm_account_db = realloc(gm_account_db, sizeof(struct gm_account) * GM_max); + memset(gm_account_db + (GM_max - 256), 0, sizeof(struct gm_account) * 256); + } + gm_account_db[GM_num].account_id = account_id; + gm_account_db[GM_num].level = level; + GM_num++; + if (GM_num >= 4000) { + printf("***WARNING: 4000 GM accounts found. Next GM accounts are not read.\n"); + login_log("***WARNING: 4000 GM accounts found. Next GM accounts are not read." RETCODE); + } + } +} + //------------------------------------------------------- // Reading function of GM accounts file (and their level) //------------------------------------------------------- @@ -198,8 +238,9 @@ int read_gm_account() { char line[512]; FILE *fp; int account_id, level; - int i, line_counter; + int line_counter; struct stat file_stat; + int start_range = 0, end_range = 0, is_range = 0, current_id = 0; if(gm_account_db) free(gm_account_db); GM_num = 0; @@ -227,8 +268,9 @@ int read_gm_account() { line_counter++; if ((line[0] == '/' && line[1] == '/') || line[0] == '\0' || line[0] == '\n' || line[0] == '\r') continue; - if (sscanf(line, "%d %d", &account_id, &level) != 2 && sscanf(line, "%d: %d", &account_id, &level) != 2) - printf("read_gm_account: file [%s], invalid 'id_acount level' format (line #%d).\n", GM_account_filename, line_counter); + is_range = (sscanf(line, "%d%*[-~]%d %d",&start_range,&end_range,&level)==3); // ID Range [MC Cameri] + if (!is_range && sscanf(line, "%d %d", &account_id, &level) != 2 && sscanf(line, "%d: %d", &account_id, &level) != 2) + printf("read_gm_account: file [%s], invalid 'acount_id|range level' format (line #%d).\n", GM_account_filename, line_counter); else if (level <= 0) printf("read_gm_account: file [%s] %dth account (line #%d) (invalid level [0 or negative]: %d).\n", GM_account_filename, GM_num+1, line_counter, level); else { @@ -236,37 +278,23 @@ int read_gm_account() { printf("read_gm_account: file [%s] %dth account (invalid level, but corrected: %d->99).\n", GM_account_filename, GM_num+1, level); level = 99; } - for(i = 0; i < GM_num; i++) - if (gm_account_db[i].account_id == account_id) { - if (gm_account_db[i].level == level) - printf("read_gm_account: GM account %d defined twice (same level: %d).\n", account_id, level); - else { - printf("read_gm_account: GM account %d defined twice (levels: %d and %d).\n", account_id, gm_account_db[i].level, level); - gm_account_db[i].level = level; - } - break; - } - // if new account - if (i == GM_num) { - if (GM_num >= GM_max) { - GM_max += 256; - gm_account_db = realloc(gm_account_db, sizeof(struct gm_account) * GM_max); - memset(gm_account_db + (GM_max - 256), 0, sizeof(struct gm_account) * 256); - } - gm_account_db[GM_num].account_id = account_id; - gm_account_db[GM_num].level = level; - GM_num++; - if (GM_num >= 4000) { - printf("***WARNING: 4000 GM accounts found. Next GM accounts are not readed.\n"); - login_log("***WARNING: 4000 GM accounts found. Next GM accounts are not readed." RETCODE); - } + if (is_range) { + if (start_range==end_range) + printf("read_gm_account: file [%s] invalid range, beginning of range is equal to end of range (line #%d).\n", GM_account_filename, line_counter); + else if (start_range>end_range) + printf("read_gm_account: file [%s] invalid range, beginning of range must be lower than end of range (line #%d).\n", GM_account_filename, line_counter); + else + for (current_id = start_range;current_id<=end_range;current_id++) + addGM(current_id,level); + } else { + addGM(account_id,level); } } } fclose(fp); - printf("read_gm_account: file '%s' readed (%d GM accounts found).\n", GM_account_filename, GM_num); - login_log("read_gm_account: file '%s' readed (%d GM accounts found)." RETCODE, GM_account_filename, GM_num); + printf("read_gm_account: file '%s' read (%d GM accounts found).\n", GM_account_filename, GM_num); + login_log("read_gm_account: file '%s' read (%d GM accounts found)." RETCODE, GM_account_filename, GM_num); return 0; } @@ -447,6 +475,7 @@ int search_account_index(char* account_name) { quantity = 0; index = -1; + for(i = 0; i < auth_num; i++) { // Without case sensitive check (increase the number of similar account names found) if (stricmp(auth_dat[i].userid, account_name) == 0) { @@ -3872,8 +3901,8 @@ int do_init(int argc, char **argv) { gm_account_db = NULL; GM_num = 0; GM_max = 0; - read_gm_account(); mmo_auth_init(); + read_gm_account(); // set_termfunc(mmo_auth_sync); set_defaultparse(parse_login); login_fd = make_listen_port(login_port); diff --git a/src/map/atcommand.c b/src/map/atcommand.c index b8368db1d..7ea5eb975 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -220,6 +220,7 @@ ATCOMMAND_FUNC(refresh); // by MC Cameri ATCOMMAND_FUNC(petid); // by MC Cameri ATCOMMAND_FUNC(identify); // by MC Cameri ATCOMMAND_FUNC(gmotd); // Added by MC Cameri, created by davidsiaw +ATCOMMAND_FUNC(misceffect); // by MC Cameri #ifndef TXT_ONLY ATCOMMAND_FUNC(checkmail); // [Valaris] @@ -475,6 +476,7 @@ static AtCommandInfo atcommand_info[] = { { AtCommand_PetId, "@petid", 40, atcommand_petid }, // by MC Cameri { AtCommand_Identify, "@identify", 40, atcommand_identify }, // by MC Cameri { AtCommand_Gmotd, "@gmotd", 0, atcommand_gmotd }, // Added by MC Cameri, created by davidsiaw + { AtCommand_MiscEffect, "@misceffect", 50, atcommand_misceffect }, // by MC Cameri #ifndef TXT_ONLY // sql-only commands { AtCommand_CheckMail, "@checkmail", 1, atcommand_listmail }, // [Valaris] @@ -7914,6 +7916,21 @@ atcommand_gmotd( return 0; } +int atcommand_misceffect( + const int fd, struct map_session_data* sd, + const char* command, const char* message) +{ + int effect = 0; + nullpo_retr(-1, sd); + if (!message || !*message) + return -1; + if (sscanf(message, "%d", &effect) < 1) + return -1; + clif_misceffect(&sd->bl,effect); + + return 0; +} + #ifndef TXT_ONLY /* Begin SQL-Only commands */ /*========================================== diff --git a/src/map/atcommand.h b/src/map/atcommand.h index 77ecebf79..a87166064 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -200,6 +200,7 @@ enum AtCommandType { AtCommand_PetId, // by MC Cameri AtCommand_Identify, // by MC Cameri AtCommand_Gmotd, // Added by MC Cameri, created by davidsiaw + AtCommand_MiscEffect, // by MC Cameri // SQL-only commands start #ifndef TXT_ONLY diff --git a/src/map/charcommand.c b/src/map/charcommand.c index 6a8b0cbeb..c2e091302 100644 --- a/src/map/charcommand.c +++ b/src/map/charcommand.c @@ -408,6 +408,7 @@ int charcommand_petfriendly( t = pl_sd->pet.intimate; pl_sd->pet.intimate = friendly; clif_send_petstatus(pl_sd); + clif_pet_emotion(pl_sd->pd,0); if (battle_config.pet_status_support) { if ((pl_sd->pet.intimate > 0 && t <= 0) || (pl_sd->pet.intimate <= 0 && t > 0)) { diff --git a/src/map/script.c b/src/map/script.c index 0f76d4ec7..f198d42fe 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -2916,12 +2916,13 @@ int buildin_getequipisenableref(struct script_state *st) num=conv_num(st,& (st->stack->stack_data[st->start+2])); sd=script_rid2sd(st); i=pc_checkequip(sd,equip[num-1]); - if(i >= 0 && num<7 && sd->inventory_data[i] && (num!=1 || sd->inventory_data[i]->def > 1 + if(i >= 0 && num<7 && sd->inventory_data[i] && (num!=1 + || sd->inventory_data[i]->def > 1 || (sd->inventory_data[i]->def==1 && sd->inventory_data[i]->equip_script==NULL) - || (sd->inventory_data[i]->def<=0 && sd->inventory_data[i]->equip_script!=NULL)) - ){ + || (sd->inventory_data[i]->def<=0 && sd->inventory_data[i]->equip_script!=NULL))) + { push_val(st->stack,C_INT,1); - }else{ + } else { push_val(st->stack,C_INT,0); } -- cgit v1.2.3-70-g09d2