diff options
31 files changed, 2130 insertions, 1325 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index b18826d20..2b1745233 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ and this project does not adhere to [Semantic Versioning](http://semver.org/spec If you are reading this in a text editor, simply ignore this section --> +## [v2017.10.22-1] `October 22 2017` `PATCH 1` +### Fixed +- Fixed a wrong null pointer check in `logmes()`, which caused the command to never log and instead print debug information. + ## [v2017.10.22] `October 22 2017` ### Added - Added the script command `getmapinfo()`, which allows to obtain misc information about a map. (#1852) @@ -32,4 +36,5 @@ If you are reading this in a text editor, simply ignore this section - New versioning scheme and project changelogs/release notes (#1853) [Unreleased]: https://github.com/HerculesWS/Hercules/compare/stable...master +[v2017.10.22-1]: https://github.com/HerculesWS/Hercules/compare/v2017.10.22...v2017.10.22-1 [v2017.10.22]: https://github.com/HerculesWS/Hercules/compare/6b1fe2d...v2017.10.22 diff --git a/conf/login/login-server.conf b/conf/login/login-server.conf index 71928e3d0..4ad02deb2 100644 --- a/conf/login/login-server.conf +++ b/conf/login/login-server.conf @@ -54,6 +54,22 @@ login_configuration: { date_format: "%Y-%m-%d %H:%M:%S" } + // for packet version >= 20170726 + users_count: { + // if false, dont show any colored strings. + // if true, show special users count numbers for coloring char servers. + send_user_count_description: true + + // users counts for use different colors. + // below 'low' show green text + // below 'medium' show oragne text + // below 'high' show red text + // higher 'high' show purple text + low: 200 + medium: 500 + high: 1000 + } + // Account engine configuration account: { // Can you use _M/_F to make new accounts on the server? diff --git a/db/constants.conf b/db/constants.conf index 0015646dd..eda877671 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -3610,15 +3610,20 @@ constants_db: { HUNTING: 2 comment__: "questinfo" - QTYPE_NONE: 0x270f - QTYPE_QUEST: 0x00 - QTYPE_QUEST2: 0x01 - QTYPE_JOB: 0x02 - QTYPE_JOB2: 0x03 - QTYPE_EVENT: 0x04 - QTYPE_EVENT2: 0x05 - QTYPE_WARG: 0x06 - QTYPE_WARG2: 0x08 + QTYPE_NONE: 0x270f + QTYPE_QUEST: 0x00 + QTYPE_QUEST2: 0x01 + QTYPE_JOB: 0x02 + QTYPE_JOB2: 0x03 + QTYPE_EVENT: 0x04 + QTYPE_EVENT2: 0x05 + QTYPE_WARG: 0x06 + QTYPE_CLICKME: 0x06 + QTYPE_DAILYQUEST: 0x07 + QTYPE_WARG2: 0x08 + QTYPE_EVENT3: 0x08 + QTYPE_JOBQUEST: 0x09 + QTYPE_JUMPING_PORING: 0xA comment__: "Font weight" FW_DONTCARE: 0 @@ -3865,4 +3870,6 @@ constants_db: { UDT_LIFETIME: 52 UDT_MERC_KILLCOUNT: 53 UDT_STATADD: 54 + UDT_ROBE: 55 + UDT_BODY2: 56 } diff --git a/doc/constants.md b/doc/constants.md index 98c22bb3e..fa077b965 100644 --- a/doc/constants.md +++ b/doc/constants.md @@ -3543,7 +3543,12 @@ - `QTYPE_EVENT`: 4 - `QTYPE_EVENT2`: 5 - `QTYPE_WARG`: 6 +- `QTYPE_CLICKME`: 6 +- `QTYPE_DAILYQUEST`: 7 - `QTYPE_WARG2`: 8 +- `QTYPE_EVENT3`: 8 +- `QTYPE_JOBQUEST`: 9 +- `QTYPE_JUMPING_PORING`: 10 ### Font weight @@ -3782,6 +3787,8 @@ - `UDT_LIFETIME`: 52 - `UDT_MERC_KILLCOUNT`: 53 - `UDT_STATADD`: 54 +- `UDT_ROBE`: 55 +- `UDT_BODY2`: 56 ## Hardcoded Constants (source) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 5c730106b..940302982 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -189,6 +189,7 @@ There are two optional fields for monster size and AI. Size can be 0 Alternately, a monster spawned using 'boss_monster' instead of 'monster' is able to be detected on the map with the SC_CASH_BOSS_ALARM status (used by Convex Mirror, item ID# 12214). +A monster spawned using 'miniboss_monster' is spawn monster as mini boss view. ** NPC names @@ -3232,6 +3233,7 @@ Set an equipment's option index or value for the specified option slot. <equipment_index> For a list of equipment indexes see getequipid(). <option_slot> can range from 1 to MAX_ITEM_OPTIONS <type> can be IT_OPT_INDEX (the ID of the option bonus, @see "Id" or "Name" in db/item_options.conf) + removes the equip option if type is 0. <value> The value of the type to be set. returns 0 if value couldn't be set, 1 on success. @@ -9226,7 +9228,14 @@ No Icon : QTYPE_NONE ! Event Icon : QTYPE_EVENT ? Event Icon : QTYPE_EVENT2 Warg : QTYPE_WARG -Warg Face : QTYPE_WARG2 (Only for packetver >= 20120410) +Warg Face : QTYPE_WARG2 (Only for packetver >= 20120410 && packetver < 20170315) + +- Only for packetver >= 20170315 +Click Me Icon : QTYPE_CLICKME +! Daily Quest Icon : QTYPE_DAILYQUEST +! Green Event Icon : QTYPE_EVENT3 +! Job Quest Icon : QTYPE_JOBQUEST +Jumping Poring : QTYPE_JUMPING_PORING Map Mark Color, when used, creates a mark in the user's mini map on the position of the NPC, the available color values are: @@ -9335,7 +9344,14 @@ Remove Icon : QTYPE_NONE ! Event Icon : QTYPE_EVENT ? Event Icon : QTYPE_EVENT2 Warg : QTYPE_WARG -Warg Face : QTYPE_WARG2 (Only for packetver >= 20120410) +Warg Face : QTYPE_WARG2 (Only for packetver >= 20120410 && packetver < 20170315) + +- Only for packetver >= 20170315 +Click Me Icon : QTYPE_CLICKME +! Daily Quest Icon : QTYPE_DAILYQUEST +! Green Event Icon : QTYPE_EVENT3 +! Job Quest Icon : QTYPE_JOBQUEST +Jumping Poring : QTYPE_JUMPING_PORING Mark Color: 0 - No Mark diff --git a/npc/instances/OrcsMemory.txt b/npc/instances/OrcsMemory.txt index 28cc9bbd5..1aaf2fd42 100644 --- a/npc/instances/OrcsMemory.txt +++ b/npc/instances/OrcsMemory.txt @@ -38,132 +38,136 @@ gef_fild10,242,202,0 script Dimensional Gorge Piece 2_MONEMUS,{ .@party_id = getcharid(CHAR_ID_PARTY); .@p_name$ = getpartyname(.@party_id); - .@md_name$ = "Orc's Memory"; + .@md_name$ = _("Orc's Memory"); - if (!instance_check_party(.@party_id,2,30,80)) { - mes "Only users between Levels ^ff000030 ~ 80^000000 can enter this Dungeon."; - close; + if (!instance_check_party(.@party_id, 2, 30, 80)) { + mes("Only users between Levels ^ff000030 ~ 80^000000 can enter this Dungeon."); + close(); } - .@orctime = questprogress(12059,PLAYTIME); + .@orctime = questprogress(12059, PLAYTIME); if (.@orctime == 2) { - mes "^0000ffAll records and after-effects related to the Orc's Memory Dungeon are deleted. You can now regenerate or re-enter the dungeon.^000000"; - erasequest 12059; - close; + mes("^0000ffAll records and after-effects related to the Orc's Memory Dungeon are deleted. You can now regenerate or re-enter the dungeon.^000000"); + erasequest(12059); + close(); } if (.@orctime == 1) { - mes "You can enter the Dungeon if it has been generated."; - next; - if(select("Enter the Dungeon "+.@md_name$, "Cancel") == 2) - close; + mes("You can enter the Dungeon if it has been generated."); + next(); + .@str$ = sprintf(_$("Enter the Dungeon %s"), .@md_name$); + if (select(.@str$, "Cancel") == 2) + close(); // Fall through to access the dungeon } else { // !.@orctime - if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id,2)) { - mes "Party status confirmed. Would you like to book entrance to the "+.@md_name$+"?"; - next; - switch(select("Reserve the "+.@md_name$, "Enter the Dungeon", "Cancel")) { + if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) { + mesf("Party status confirmed. Would you like to book entrance to the %s?", .@md_name$); + next(); + .@str$ = sprintf(_$("Reserve the %s"), .@md_name$); + switch (select(.@str$, "Enter the Dungeon", "Cancel")) { case 1: - .@instance = instance_create(.@md_name$,.@party_id); + .@instance = instance_create(.@md_name$, .@party_id); if (.@instance < 0) { - mes "Party Name: "+.@p_name$; - mes "Party Leader: "+strcharinfo(PC_NAME); - mes "^0000ff"+.@md_name$+" ^000000 - Reservation Failed."; - close; + mesf("Party Name: %s", .@p_name$); + mesf("Party Leader: %s", strcharinfo(PC_NAME)); + mesf("^0000ff%s ^000000 - Reservation Failed.", .@md_name$); + close(); } - mes "^0000ff"+.@md_name$+"^000000- Attempting to book an entrance"; + mesf("^0000ff%s^000000- Attempting to book an entrance", .@md_name$); for (.@i = 1; .@i <= 2; ++.@i) { - if( instance_attachmap(.@i + "@orcs", .@instance) == "" ) + if (instance_attachmap(.@i + "@orcs", .@instance) == "") break; } - if( .@i < 2 ) { + if (.@i < 2) { instance_destroy(.@instance); - close; + close(); } - instance_set_timeout 7200,300,.@instance; + instance_set_timeout(7200, 300, .@instance); instance_init(.@instance); - mes "After making a reservation, you have to select 'Enter the Dungeon' from the menu if you wish to enter the "+.@md_name$+"."; - close; + mesf("After making a reservation, you have to select 'Enter the Dungeon' from the menu if you wish to enter the %s.", .@md_name$); + close(); case 2: break; // Fall through to access the dungeon (after the else) case 3: - close; + close(); } - } else if (select(.@md_name$ + " Enter the Memorial Dungeon", "Cancel") == 2) + } else if (select(sprintf(_$("%s Enter the Memorial Dungeon"), .@md_name$), "Cancel") == 2) { end; + } // Else access the dungeon } // Dungeon access if (has_instance("1@orcs") == "") { - mes "Memorial Dungeon "+.@md_name$+" does not exist."; - mes "The party leader has not reserved entrance to the dungeon yet."; - next; - mes "Once the reservation is complete, the dungeon will be generated."; - mes "If your dungeon has been destroyed you must wait 7 days before re-entering."; - close; + mesf("Memorial Dungeon %s does not exist.", .@md_name$); + mes("The party leader has not reserved entrance to the dungeon yet."); + next(); + mes("Once the reservation is complete, the dungeon will be generated."); + mes("If your dungeon has been destroyed you must wait 7 days before re-entering."); + close(); } - mapannounce "gef_fild10", strcharinfo(PC_NAME) + " of the party, " + .@p_name$ + " is entering the "+.@md_name$+".",bc_map,"0x00ff99"; - if (!questprogress(12059)) setquest 12059; - warp "1@orcs",179,15; + mapannounce("gef_fild10", sprintf(_$("%s of the party, %s is entering the %s."), strcharinfo(PC_NAME), .@p_name$, .@md_name$), bc_map, C_SPRINGGREEN); + if (!questprogress(12059)) + setquest(12059); + warp("1@orcs", 179, 15); end; } gef_fild10,238,202,6 script Mad Scientist#orc 4_LGTSCIENCE,{ if (BaseLevel < 50) { - mes "The Mad Scientist doesn't seem to notice you and keeps mumbling to himself..."; - close; + mes("The Mad Scientist doesn't seem to notice you and keeps mumbling to himself..."); + close(); } if (mad == 0) { - mes "[Mad Scientist]"; - mes "Haha, no Orcs are coming near me!"; - mes "The power of the Dimensional Gorge is undefeatable!!"; - next; - switch(select("Orcs don't attack you?", "You wish!")) { + mes("[Mad Scientist]"); + mes("Haha, no Orcs are coming near me!"); + mes("The power of the Dimensional Gorge is undefeatable!!"); + next(); + switch (select("Orcs don't attack you?", "You wish!")) { case 1: - mes "[Mad Scientist]"; - mes "Yeah, yeah.. I know it's hard to belive. I don't blame ya."; - mes "I used to study the Dimensional Gorge discovered near Morroc."; - mes "According to my research, the minerals found there have enormous power inside them!"; - next; + mes("[Mad Scientist]"); + mes("Yeah, yeah.. I know it's hard to belive. I don't blame ya."); + mes("I used to study the Dimensional Gorge discovered near Morroc."); + mes("According to my research, the minerals found there have enormous power inside them!"); + next(); break; case 2: - mes "[Mad Scientist]"; - mes "You are a pretty distrustful person, huh?"; - next; + mes("[Mad Scientist]"); + mes("You are a pretty distrustful person, huh?"); + next(); break; } select("Oh? Like what, travel to alternate space?"); - mes "[Mad Scientist]"; - mes "Very smart! I have actually just done that! See that statue over there? It's not your normal Monolith!"; - next; - mes "[Mad Scientist]"; - mes "I have created it with a combination of our technology and the unlimited energy I discovered from the Gorge! Want to try it?"; - next; + mes("[Mad Scientist]"); + mes("Very smart! I have actually just done that! See that statue over there? It's not your normal Monolith!"); + next(); + mes("[Mad Scientist]"); + mes("I have created it with a combination of our technology and the unlimited energy I discovered from the Gorge! Want to try it?"); + next(); select("...Um, that doesn't sound legal?"); - mes "[Mad Scientist]"; - mes "Hey, since when did something so interesting have to be legal!? How about it! You can talk to the Orcs! C'mon!"; - next; - mes "[Mad Scientist]"; - mes "Chances are they'll just give you lots of instructions once they see you, so just wing it! They're always saying the same thing, to the point where I memorized them!"; - next; - switch(select("Alright... What do I do?", "Umm, maybe not.")) { + mes("[Mad Scientist]"); + mes("Hey, since when did something so interesting have to be legal!? How about it! You can talk to the Orcs! C'mon!"); + next(); + mes("[Mad Scientist]"); + mes("Chances are they'll just give you lots of instructions once they see you, so just wing it! They're always saying the same thing, to the point where I memorized them!"); + next(); + switch (select("Alright... What do I do?", "Umm, maybe not.")) { case 1: - mes "[Mad Scientist]"; - mes "Very good! Just sit in the hands of this statue! And try to act natural when you're in there!"; + mes("[Mad Scientist]"); + mes("Very good! Just sit in the hands of this statue! And try to act natural when you're in there!"); mad = 1; - close; + close(); case 2: - mes "[Mad Scientist]"; - mes "Oh fine, be that way!"; - close; + mes("[Mad Scientist]"); + mes("Oh fine, be that way!"); + close(); } } else if (mad == 1) { - mes "[Mad Scientist]"; - mes "Hmm? Put your hand on that Monemus Statue if you want to experience traveling through dimensions!"; - close; + mes("[Mad Scientist]"); + mes("Hmm? Put your hand on that Monemus Statue if you want to experience traveling through dimensions!"); + close(); } else { mad = 1; end; @@ -175,60 +179,53 @@ gef_fild10,238,202,6 script Mad Scientist#orc 4_LGTSCIENCE,{ end; OnInstanceInit: - disablenpc instance_npcname("#Resurrect Monsters1"); + disablenpc(instance_npcname("#Resurrect Monsters1")); end; OnDisable: - stopnpctimer; - killmonster instance_mapname("1@orcs"),instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"; + stopnpctimer(); + killmonster(instance_mapname("1@orcs"), instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); end; OnEnable: - enablenpc instance_npcname("#Resurrect Monsters1"); - monster instance_mapname("1@orcs"),0,0,"Orc Warrior",1023,30,instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"; + enablenpc(instance_npcname("#Resurrect Monsters1")); + monster(instance_mapname("1@orcs"), 0, 0, _("Orc Warrior"), ORK_WARRIOR, 30, instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); end; OnMyMobDead: .@map$ = instance_mapname("1@orcs"); - .@mob_dead_num = 30 - mobcount(.@map$,instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); + .@mob_dead_num = 30 - mobcount(.@map$, instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); if (.@mob_dead_num > 0) { - .@mob_ran = rand(1,30); + .@mob_ran = rand(1, 30); if (.@mob_ran > 29) { - monster .@map$,0,0,"Orc Warrior",1023,.@mob_dead_num,instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"; - } - else if ((.@mob_ran > 28) && (.@mob_ran < 30)) { - monster .@map$,0,0,"High Orc",1213,.@mob_dead_num,instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"; - if (rand(1,10) == 9) { - mapannounce .@map$, "High Orc: We need more defenses! Get more people here!",bc_map,"0xff4444"; - } - } - else if ((.@mob_ran > 26) && (.@mob_ran < 29)) { - areamonster .@map$,41,91,51,81,"High Orc",1213,.@mob_dead_num,instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"; - if (rand(1,10) == 9) { - mapannounce .@map$, "Where are the High Orcs!? Get them to stop the enemies!",bc_map,"0xff4444"; - } - } - else { - areamonster .@map$,17,187,27,177,"High Orc",1213,.@mob_dead_num,instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"; - if (rand(1,5) == 3) { - mapannounce .@map$, "Caution: The army's starting to concentrate at Zone No. 4.",bc_map,"0x77ff77"; - } - if (rand(1,100) == 50) { - initnpctimer; - } + monster(.@map$, 0, 0, _("Orc Warrior"), ORK_WARRIOR, .@mob_dead_num, instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); + } else if (.@mob_ran > 28 && .@mob_ran < 30) { + monster(.@map$, 0, 0, _("High Orc"), HIGH_ORC, .@mob_dead_num, instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); + if (rand(1, 10) == 9) + mapannounce(.@map$, _("High Orc: We need more defenses! Get more people here!"), bc_map, "0xff4444"); + } else if (.@mob_ran > 26 && .@mob_ran < 29) { + areamonster(.@map$, 41, 91, 51, 81, _("High Orc"), HIGH_ORC, .@mob_dead_num, instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); + if (rand(1, 10) == 9) + mapannounce(.@map$, _("Where are the High Orcs!? Get them to stop the enemies!"), bc_map, "0xff4444"); + } else { + areamonster(.@map$, 17, 187, 27, 177, _("High Orc"), HIGH_ORC, .@mob_dead_num, instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); + if (rand(1, 5) == 3) + mapannounce(.@map$, _("Caution: The army's starting to concentrate at Zone No. 4."), bc_map, "0x77ff77"); + if (rand(1, 100) == 50) + initnpctimer(); } } end; OnTimer10: - mapannounce instance_mapname("1@orcs"), "Shouts of the Chief Orc of Safeguards: Looks like this will take longer than expected. Summon the Stalactic Golems!",bc_map,"0xff4444"; + mapannounce(instance_mapname("1@orcs"), _("Shouts of the Chief Orc of Safeguards: Looks like this will take longer than expected. Summon the Stalactic Golems!"), bc_map, "0xff4444"); end; OnTimer4010: .@map$ = instance_mapname("1@orcs"); - mapannounce .@map$, "Stalactic Golems are digging out of the deep underground.",bc_map,"0x77ff77"; - areamonster .@map$,17,187,27,177,"Stalactic Golem",1278,20,instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"; - stopnpctimer; + mapannounce(.@map$, _("Stalactic Golems are digging out of the deep underground."), bc_map, "0x77ff77"); + areamonster(.@map$, 17, 187, 27, 177, _("Stalactic Golem"), STALACTIC_GOLEM, 20, instance_npcname("#Resurrect Monsters1")+"::OnMyMobDead"); + stopnpctimer(); end; } @@ -236,30 +233,27 @@ OnTimer4010: end; OnInstanceInit: - disablenpc instance_npcname("#Resurrect Monsters2"); + disablenpc(instance_npcname("#Resurrect Monsters2")); end; OnDisable: - killmonster instance_mapname("1@orcs"),instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"; + killmonster(instance_mapname("1@orcs"), instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"); end; OnEnable: - enablenpc instance_npcname("#Resurrect Monsters2"); - monster instance_mapname("1@orcs"),0,0,"Trained Wolf",1106,15,instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"; + enablenpc(instance_npcname("#Resurrect Monsters2")); + monster(instance_mapname("1@orcs"), 0, 0, _("Trained Wolf"), DESERT_WOLF, 15, instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"); end; OnMyMobDead: .@map$ = instance_mapname("1@orcs"); - .@mob_dead_num = 15 - mobcount(.@map$,instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"); - if (rand(1,30) > 15) { - if (.@mob_dead_num > 0) { - monster .@map$,0,0,"Trained Wolf",1106,.@mob_dead_num,instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"; - } - } - else { - if (.@mob_dead_num > 0) { - areamonster .@map$,17,187,27,177,"Trained Wolf",1106,.@mob_dead_num,instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"; - } + .@mob_dead_num = 15 - mobcount(.@map$, instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"); + if (rand(1, 30) > 15) { + if (.@mob_dead_num > 0) + monster(.@map$, 0, 0, _("Trained Wolf"), DESERT_WOLF, .@mob_dead_num, instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"); + } else { + if (.@mob_dead_num > 0) + areamonster(.@map$, 17, 187, 27, 177, _("Trained Wolf"), DESERT_WOLF, .@mob_dead_num, instance_npcname("#Resurrect Monsters2")+"::OnMyMobDead"); } end; } @@ -268,39 +262,34 @@ OnMyMobDead: end; OnInstanceInit: - disablenpc instance_npcname("#Resurrect Monsters3"); + disablenpc(instance_npcname("#Resurrect Monsters3")); end; OnDisable: - killmonster instance_mapname("1@orcs"),instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"; + killmonster(instance_mapname("1@orcs"), instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"); end; OnEnable: - enablenpc instance_npcname("#Resurrect Monsters3"); - monster instance_mapname("1@orcs"),0,0,"Orc Archer",1189,15,instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"; + enablenpc(instance_npcname("#Resurrect Monsters3")); + monster(instance_mapname("1@orcs"), 0, 0, _("Orc Archer"), ORC_ARCHER, 15, instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"); end; OnMyMobDead: .@map$ = instance_mapname("1@orcs"); - .@mob_dead_num = 15 - mobcount(.@map$,instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"); - .@mob_ran = rand(1,30); + .@mob_dead_num = 15 - mobcount(.@map$, instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"); + .@mob_ran = rand(1, 30); if (.@mob_ran > 29) { + if (.@mob_dead_num > 0) + monster(.@map$, 0, 0, _("Orc Archer"), ORC_ARCHER, .@mob_dead_num, instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"); + } else if (.@mob_ran > 26 && .@mob_ran < 30) { if (.@mob_dead_num > 0) { - monster .@map$,0,0,"Orc Archer",1189,.@mob_dead_num,instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"; - } - } - else if ((.@mob_ran > 26) && (.@mob_ran < 30)) { - if (.@mob_dead_num > 0) { - areamonster .@map$,43,155,47,159,"Orc Archer",1189,.@mob_dead_num,instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"; - if (rand(1,3) == 3) { - mapannounce .@map$, "High Orc: Attack them from behind! Cut off their support!",bc_map,"0xff4444"; - } - } - } - else { - if (.@mob_dead_num > 0) { - areamonster .@map$,17,187,27,177,"Orc Archer",1189,.@mob_dead_num,instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"; + areamonster(.@map$, 43, 155, 47, 159, _("Orc Archer"), ORC_ARCHER, .@mob_dead_num, instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"); + if (rand(1, 3) == 3) + mapannounce(.@map$, _("High Orc: Attack them from behind! Cut off their support!"), bc_map, "0xff4444"); } + } else { + if (.@mob_dead_num > 0) + areamonster(.@map$, 17, 187, 27, 177, _("Orc Archer"), ORC_ARCHER, .@mob_dead_num, instance_npcname("#Resurrect Monsters3")+"::OnMyMobDead"); } end; } @@ -309,25 +298,24 @@ OnMyMobDead: end; OnInstanceInit: - enablenpc instance_npcname("#Resurrect Monsters4"); - areamonster instance_mapname("1@orcs"),98,35,178,115,"Anopheles",1627,10,instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"; + enablenpc(instance_npcname("#Resurrect Monsters4")); + areamonster(instance_mapname("1@orcs"), 98, 35, 178, 115, _("Anopheles"), ANOPHELES, 10, instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"); end; OnMyMobDead: .@map$ = instance_mapname("1@orcs"); - .@mob_dead_num = 10 - mobcount(.@map$,instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"); - if (.@mob_dead_num > 0) { - monster .@map$,0,0,"Anopheles",1627,.@mob_dead_num,instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"; - } + .@mob_dead_num = 10 - mobcount(.@map$, instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"); + if (.@mob_dead_num > 0) + monster(.@map$, 0, 0, _("Anopheles"), ANOPHELES, .@mob_dead_num, instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"); end; OnDisable: - killmonster instance_mapname("1@orcs"),instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"; + killmonster(instance_mapname("1@orcs"), instance_npcname("#Resurrect Monsters4")+"::OnMyMobDead"); end; } 1@orcs,180,29,4 script Kruger#1-1 4_ORCWARRIOR,{ - donpcevent instance_npcname("Kruger#1-2")+"::OnEnable"; + donpcevent(instance_npcname("Kruger#1-2")+"::OnEnable"); end; } @@ -335,164 +323,164 @@ OnDisable: end; OnInstanceInit: - disablenpc instance_npcname("Kruger#1-2"); + disablenpc(instance_npcname("Kruger#1-2")); end; OnEnable: - disablenpc instance_npcname("Kruger#1-1"); - enablenpc instance_npcname("Kruger#1-2"); - initnpctimer; + disablenpc(instance_npcname("Kruger#1-1")); + enablenpc(instance_npcname("Kruger#1-2")); + initnpctimer(); end; OnTimer10: - mapannounce instance_mapname("1@orcs"), "Kruger: Damn... What took you so long!! I don't have all day!!",bc_map,"0xffff00"; + mapannounce(instance_mapname("1@orcs"), _("Kruger: Damn... What took you so long!! I don't have all day!!"), bc_map, C_YELLOW); end; OnTimer5710: - mapannounce instance_mapname("1@orcs"), "Kruger: My plan was to let our comrades open the gate, but it's all ruined since I got busted by the Orc Shaman.",bc_map,"0xffff00"; + mapannounce(instance_mapname("1@orcs"), _("Kruger: My plan was to let our comrades open the gate, but it's all ruined since I got busted by the Orc Shaman."), bc_map, C_YELLOW); end; OnTimer14610: - mapannounce instance_mapname("1@orcs"), "Shouts of the Chief Orc of Safeguards: I smell a rat.. Send some patrols to the entrance!!",bc_map,"0xff4444"; + mapannounce(instance_mapname("1@orcs"), _("Shouts of the Chief Orc of Safeguards: I smell a rat.. Send some patrols to the entrance!!"), bc_map, "0xff4444"); end; OnTimer20210: - mapannounce instance_mapname("1@orcs"), "Kruger: Darn it.. They'll be here any minute. Ok. Listen to me now.",bc_map,"0xffff00"; + mapannounce(instance_mapname("1@orcs"), _("Kruger: Darn it.. They'll be here any minute. Ok. Listen to me now."), bc_map, C_YELLOW); end; OnTimer24910: - mapannounce instance_mapname("1@orcs"), "Kruger: The Orc Shaman has sealed the 1st basement by dividing it into 4 zones. Each zone has one Enchanted Orc who has the power to unseal the next zone.",bc_map,"0xffff00"; + mapannounce(instance_mapname("1@orcs"), _("Kruger: The Orc Shaman has sealed the 1st basement by dividing it into 4 zones. Each zone has one Enchanted Orc who has the power to unseal the next zone."), bc_map, C_YELLOW); end; OnTimer34310: - mapannounce instance_mapname("1@orcs"), "Kruger: Find those Enchanted Orcs and get rid of them to move to the next zone.",bc_map,"0xffff00"; + mapannounce(instance_mapname("1@orcs"), _("Kruger: Find those Enchanted Orcs and get rid of them to move to the next zone."), bc_map, C_YELLOW); end; OnTimer39710: - mapannounce instance_mapname("1@orcs"), "Kruger: Try to avoid encountering Orcs other then the Enchanted ones. Everytime you kill a normal Orc, High Orcs will gather at the last path to the 2nd floor.",bc_map,"0xffff00"; + mapannounce(instance_mapname("1@orcs"), _("Kruger: Try to avoid encountering Orcs other then the Enchanted ones. Everytime you kill a normal Orc, High Orcs will gather at the last path to the 2nd floor."), bc_map, C_YELLOW); end; OnTimer49210: - mapannounce instance_mapname("1@orcs"), "Kruger: In the worst case, the path to the 2nd floor could be completely blocked. For your own sake, you should be as sneaky as possible.",bc_map,"0xffff00"; + mapannounce(instance_mapname("1@orcs"), _("Kruger: In the worst case, the path to the 2nd floor could be completely blocked. For your own sake, you should be as sneaky as possible."), bc_map, C_YELLOW); end; OnTimer56310: - mapannounce instance_mapname("1@orcs"), "Mission: Sneak in and get rid of the 'Enchanted Orcs'. Avoiding battles with other Orcs is the best way of getting into the 2nd floor.",bc_map,"0x44ffff"; - donpcevent instance_npcname("#Resurrect Monsters1")+"::OnEnable"; - donpcevent instance_npcname("#Resurrect Monsters2")+"::OnEnable"; - donpcevent instance_npcname("#Resurrect Monsters3")+"::OnEnable"; - disablenpc instance_npcname("Kruger#1-2"); + mapannounce(instance_mapname("1@orcs"), _("Mission: Sneak in and get rid of the 'Enchanted Orcs'. Avoiding battles with other Orcs is the best way of getting into the 2nd floor."), bc_map, "0x44ffff"); + donpcevent(instance_npcname("#Resurrect Monsters1")+"::OnEnable"); + donpcevent(instance_npcname("#Resurrect Monsters2")+"::OnEnable"); + donpcevent(instance_npcname("#Resurrect Monsters3")+"::OnEnable"); + disablenpc(instance_npcname("Kruger#1-2")); end; OnTimer60000: - areamonster instance_mapname("1@orcs"),137,83,143,89,"Enchanted Orc",1023,1,instance_npcname("B1 Area Mobs")+"::OnMyMobDead"; - stopnpctimer; + areamonster(instance_mapname("1@orcs"), 137, 83, 143, 89, _("Enchanted Orc"), ORK_WARRIOR, 1, instance_npcname("B1 Area Mobs")+"::OnMyMobDead"); + stopnpctimer(); end; } 1@orcs,168,125,0 script B1 Area 1 WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("B1 Area 1"); + disablenpc(instance_npcname("B1 Area 1")); end; OnEnable: - enablenpc instance_npcname("B1 Area 1"); - areamonster instance_mapname("1@orcs"),103,105,109,111,"Enchanted Orc",1023,1,instance_npcname("B1 Area Mobs")+"::OnMyMobDead1"; + enablenpc(instance_npcname("B1 Area 1")); + areamonster(instance_mapname("1@orcs"), 103, 105, 109, 111, _("Enchanted Orc"), ORK_WARRIOR, 1, instance_npcname("B1 Area Mobs")+"::OnMyMobDead1"); end; OnTouch: - warp instance_mapname("1@orcs"),168,130; + warp(instance_mapname("1@orcs"), 168, 130); end; OnContinue: - donpcevent instance_npcname("B1 Area 2")+"::OnEnable"; - initnpctimer; + donpcevent(instance_npcname("B1 Area 2")+"::OnEnable"); + initnpctimer(); end; OnTimer10300: - mapannounce instance_mapname("1@orcs"), "Kruger's Whisper: The Orcs here used to be my companions. They just lost their will ever since the Orc Shaman started to control them with her magic.",bc_map,"0xff4499"; + mapannounce(instance_mapname("1@orcs"), _("Kruger's Whisper: The Orcs here used to be my companions. They just lost their will ever since the Orc Shaman started to control them with her magic."), bc_map, "0xff4499"); end; OnTimer18700: - mapannounce instance_mapname("1@orcs"), "Kruger's Whisper: There's nothing we can do but to defeat the Orc Shaman if we want to save the remaining tribes.",bc_map,"0xff4499"; - stopnpctimer; + mapannounce(instance_mapname("1@orcs"), _("Kruger's Whisper: There's nothing we can do but to defeat the Orc Shaman if we want to save the remaining tribes."), bc_map, "0xff4499"); + stopnpctimer(); end; } 1@orcs,89,94,0 script B1 Area 2 WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("B1 Area 2"); + disablenpc(instance_npcname("B1 Area 2")); end; OnEnable: - enablenpc instance_npcname("B1 Area 2"); - areamonster instance_mapname("1@orcs"),32,40,38,46,"Enchanted Orc",1023,1,instance_npcname("B1 Area Mobs")+"::OnMyMobDead2"; + enablenpc(instance_npcname("B1 Area 2")); + areamonster(instance_mapname("1@orcs"), 32, 40, 38, 46, _("Enchanted Orc"), ORK_WARRIOR, 1, instance_npcname("B1 Area Mobs")+"::OnMyMobDead2"); end; OnTouch: - warp instance_mapname("1@orcs"),85,85; + warp(instance_mapname("1@orcs"), 85, 85); end; OnContinue: - donpcevent instance_npcname("B1 Area 3")+"::OnEnable"; - initnpctimer; + donpcevent(instance_npcname("B1 Area 3")+"::OnEnable"); + initnpctimer(); end; OnTimer30300: - mapannounce instance_mapname("1@orcs"), "Kruger's Whisper: I saw the bodies of our tribe. It seems that the Orc Shaman used those Orcs for her rituals.",bc_map,"0xff4499"; + mapannounce(instance_mapname("1@orcs"), _("Kruger's Whisper: I saw the bodies of our tribe. It seems that the Orc Shaman used those Orcs for her rituals."), bc_map, "0xff4499"); end; OnTimer37600: - mapannounce instance_mapname("1@orcs"), "Kruger's Whisper: ... It all has to do with me. I am responsible for this evil.",bc_map,"0xff4499"; - stopnpctimer; + mapannounce(instance_mapname("1@orcs"), _("Kruger's Whisper: ... It all has to do with me. I am responsible for this evil."), bc_map, "0xff4499"); + stopnpctimer(); end; } 1@orcs,38,105,0 script B1 Area 3 WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("B1 Area 3"); + disablenpc(instance_npcname("B1 Area 3")); end; OnEnable: - enablenpc instance_npcname("B1 Area 3"); - areamonster instance_mapname("1@orcs"),19,177,25,183,"Enchanted Orc",1023,1,instance_npcname("B1 Area Mobs")+"::OnMyMobDead3"; + enablenpc(instance_npcname("B1 Area 3")); + areamonster(instance_mapname("1@orcs"), 19, 177, 25, 183, _("Enchanted Orc"), ORK_WARRIOR, 1, instance_npcname("B1 Area Mobs")+"::OnMyMobDead3"); end; OnTouch: - warp instance_mapname("1@orcs"),38,110; + warp(instance_mapname("1@orcs"), 38, 110); end; OnContinue: - donpcevent instance_npcname("B1 Area 4")+"::OnEnable"; - initnpctimer; + donpcevent(instance_npcname("B1 Area 4")+"::OnEnable"); + initnpctimer(); end; OnTimer30300: - mapannounce instance_mapname("1@orcs"), "Please, hang in there!",bc_map,"0xff4499"; + mapannounce(instance_mapname("1@orcs"), _("Please, hang in there!"), bc_map, "0xff4499"); end; OnTimer32700: - mapannounce instance_mapname("1@orcs"), "We'll get some rest when we get to the 2nd basement after passing through here.",bc_map,"0xff4499"; - stopnpctimer; + mapannounce(instance_mapname("1@orcs"), _("We'll get some rest when we get to the 2nd basement after passing through here."), bc_map, "0xff4499"); + stopnpctimer(); end; } 1@orcs,21,189,0 script B1 Area 4 WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("B1 Area 4"); + disablenpc(instance_npcname("B1 Area 4")); end; OnEnable: - enablenpc instance_npcname("B1 Area 4"); - donpcevent instance_npcname("#Resurrect Monsters1")+"::OnDisable"; - donpcevent instance_npcname("#Resurrect Monsters2")+"::OnDisable"; - donpcevent instance_npcname("#Resurrect Monsters3")+"::OnDisable"; - donpcevent instance_npcname("#Resurrect Monsters4")+"::OnDisable"; + enablenpc(instance_npcname("B1 Area 4")); + donpcevent(instance_npcname("#Resurrect Monsters1")+"::OnDisable"); + donpcevent(instance_npcname("#Resurrect Monsters2")+"::OnDisable"); + donpcevent(instance_npcname("#Resurrect Monsters3")+"::OnDisable"); + donpcevent(instance_npcname("#Resurrect Monsters4")+"::OnDisable"); end; OnTouch: - warp instance_mapname("2@orcs"),32,171; + warp(instance_mapname("2@orcs"), 32, 171); end; } @@ -500,19 +488,19 @@ OnTouch: end; OnMyMobDead: - donpcevent instance_npcname("B1 Area 1")+"::OnEnable"; + donpcevent(instance_npcname("B1 Area 1")+"::OnEnable"); end; OnMyMobDead1: - donpcevent instance_npcname("B1 Area 1")+"::OnContinue"; + donpcevent(instance_npcname("B1 Area 1")+"::OnContinue"); end; OnMyMobDead2: - donpcevent instance_npcname("B1 Area 2")+"::OnContinue"; + donpcevent(instance_npcname("B1 Area 2")+"::OnContinue"); end; OnMyMobDead3: - donpcevent instance_npcname("B1 Area 3")+"::OnContinue"; + donpcevent(instance_npcname("B1 Area 3")+"::OnContinue"); end; } @@ -521,57 +509,51 @@ OnMyMobDead3: end; OnInstanceInit: - disablenpc instance_npcname("#2Resurrect Monsters1"); + disablenpc(instance_npcname("#2Resurrect Monsters1")); end; OnEnable: - enablenpc instance_npcname("#2Resurrect Monsters1"); - monster instance_mapname("2@orcs"),0,0,"Vengeful Orc",1152,30,instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"; + enablenpc(instance_npcname("#2Resurrect Monsters1")); + monster(instance_mapname("2@orcs"), 0, 0, _("Vengeful Orc"), ORC_SKELETON, 30, instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); end; OnDisable: - stopnpctimer; - killmonster instance_mapname("2@orcs"),instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"; + stopnpctimer(); + killmonster(instance_mapname("2@orcs"), instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); end; OnMyMobDead: .@map$ = instance_mapname("2@orcs"); - .@mob_dead_num = 30 - mobcount(.@map$,instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); + .@mob_dead_num = 30 - mobcount(.@map$, instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); if (.@mob_dead_num > 0) { - .@mob_ran = rand(1,30); + .@mob_ran = rand(1, 30); if (.@mob_ran > 29) { - monster .@map$,0,0,"Vengeful Orc",1152,.@mob_dead_num,instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"; - } - else if ((.@mob_ran > 28) && (.@mob_ran < 30)) { - monster .@map$,0,0,"High Orc",1213,.@mob_dead_num,instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"; - } - else if ((.@mob_ran > 26) && (.@mob_ran < 29)) { - areamonster .@map$,157,112,167,122,"High Orc",1213,.@mob_dead_num,instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"; - if (rand(1,10) == 9) { - mapannounce .@map$, "Warning: High Orcs are gathering near area 3.",bc_map,"0xff4444"; - } - } - else { - areamonster .@map$,173,13,183,23,"High Orc",1213,.@mob_dead_num,instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"; - if (rand(1,5) == 3) { - mapannounce .@map$, "Caution: The Forces have started to concentrate at the Shaman's Altar.",bc_map,"0x77ff77"; - } - if (rand(1,70) == 50) { - initnpctimer; - } + monster(.@map$, 0, 0, _("Vengeful Orc"), ORC_SKELETON, .@mob_dead_num, instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); + } else if (.@mob_ran > 28 && .@mob_ran < 30) { + monster(.@map$, 0, 0, _("High Orc"), HIGH_ORC, .@mob_dead_num, instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); + } else if (.@mob_ran > 26 && .@mob_ran < 29) { + areamonster(.@map$, 157, 112, 167, 122, _("High Orc"), HIGH_ORC, .@mob_dead_num, instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); + if (rand(1, 10) == 9) + mapannounce(.@map$, _("Warning: High Orcs are gathering near area 3."), bc_map, "0xff4444"); + } else { + areamonster(.@map$, 173, 13, 183, 23, _("High Orc"), HIGH_ORC, .@mob_dead_num, instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); + if (rand(1, 5) == 3) + mapannounce(.@map$, _("Caution: The Forces have started to concentrate at the Shaman's Altar."), bc_map, "0x77ff77"); + if (rand(1, 70) == 50) + initnpctimer(); } } end; OnTimer10: - mapannounce instance_mapname("2@orcs"), "Voice from somewhere: Foolish... Do you really think the altar would fall like that?",bc_map,"0xff4444"; + mapannounce(instance_mapname("2@orcs"), _("Voice from somewhere: Foolish... Do you really think the altar would fall like that?"), bc_map, "0xff4444"); end; OnTimer4010: .@map$ = instance_mapname("2@orcs"); - mapannounce .@map$, "[ Wraiths were summoned by an unknown power ]",bc_map,"0x77ff77"; - areamonster .@map$,167,25,177,35,"Wraith",1475,30,instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"; - stopnpctimer; + mapannounce(.@map$, _("[ Wraiths were summoned by an unknown power ]"), bc_map, "0x77ff77"); + areamonster(.@map$, 167, 25, 177, 35, _("Wraith"), G_WRAITH, 30, instance_npcname("#2Resurrect Monsters1")+"::OnMyMobDead"); + stopnpctimer(); end; } @@ -579,40 +561,36 @@ OnTimer4010: end; OnInstanceInit: - disablenpc instance_npcname("#2Resurrect Monsters3"); + disablenpc(instance_npcname("#2Resurrect Monsters3")); end; OnEnable: - enablenpc instance_npcname("#2Resurrect Monsters3"); - monster instance_mapname("2@orcs"),0,0,"Orc Zombie",1153,15,instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"; + enablenpc(instance_npcname("#2Resurrect Monsters3")); + monster(instance_mapname("2@orcs"), 0, 0, _("Orc Zombie"), ORC_ZOMBIE, 15, instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"); end; OnMyMobDead: .@map$ = instance_mapname("2@orcs"); - .@mob_dead_num = 15 - mobcount(.@map$,instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"); - .@mob_ran = rand(1,30); + .@mob_dead_num = 15 - mobcount(.@map$, instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"); + .@mob_ran = rand(1, 30); if (.@mob_ran > 29) { if (.@mob_dead_num > 0) { - monster .@map$,0,0,"Orc Archer",1189,.@mob_dead_num,instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"; + monster(.@map$, 0, 0, _("Orc Archer"), ORC_ARCHER, .@mob_dead_num, instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"); } - } - else if ((.@mob_ran > 6) && (.@mob_ran < 30)) { - if (.@mob_dead_num > 0) { - areamonster .@map$,168,10,184,26,"Orc Archer",1189,.@mob_dead_num,instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"; - if (rand(1,15) == 3) { - mapannounce .@map$, "Warning: Orc Archer teams are gathering near the altar.",bc_map,"0xff4444"; - } - } - } - else { + } else if (.@mob_ran > 6 && .@mob_ran < 30) { if (.@mob_dead_num > 0) { - areamonster .@map$,168,21,184,21,"Orc Archer",1189,.@mob_dead_num,instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"; + areamonster(.@map$, 168, 10, 184, 26, _("Orc Archer"), ORC_ARCHER, .@mob_dead_num, instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"); + if (rand(1, 15) == 3) + mapannounce(.@map$, _("Warning: Orc Archer teams are gathering near the altar."), bc_map, "0xff4444"); } + } else { + if (.@mob_dead_num > 0) + areamonster(.@map$, 168, 21, 184, 21, _("Orc Archer"), ORC_ARCHER, .@mob_dead_num, instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"); } end; OnDisable: - killmonster instance_mapname("2@orcs"),instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"; + killmonster(instance_mapname("2@orcs"), instance_npcname("#2Resurrect Monsters3")+"::OnMyMobDead"); end; } @@ -620,21 +598,20 @@ OnDisable: end; OnInstanceInit: - enablenpc instance_npcname("#2Resurrect Monsters4"); - monster instance_mapname("2@orcs"),0,0,"Anopheles",1627,10,instance_npcname("#2Resurrect Monsters4")+"::OnMyMobDead"; + enablenpc(instance_npcname("#2Resurrect Monsters4")); + monster(instance_mapname("2@orcs"), 0, 0, _("Anopheles"), ANOPHELES, 10, instance_npcname("#2Resurrect Monsters4")+"::OnMyMobDead"); end; OnMyMobDead: .@map$ = instance_mapname("2@orcs"); - .@mob_dead_num = 10 - mobcount(.@map$,instance_npcname("#2Resurrect Monsters4")+"::OnMyMobDead"); - if (.@mob_dead_num > 0) { - monster .@map$,0,0,"Anopheles",1627,1,instance_npcname("#2Resurrect Monsters4")+"::OnMyMobDead"; - } + .@mob_dead_num = 10 - mobcount(.@map$, instance_npcname("#2Resurrect Monsters4")+"::OnMyMobDead"); + if (.@mob_dead_num > 0) + monster(.@map$, 0, 0, _("Anopheles"), ANOPHELES, 1, instance_npcname("#2Resurrect Monsters4")+"::OnMyMobDead"); end; } 2@orcs,35,169,4 script Kruger#2-1 4_ORCWARRIOR,{ - donpcevent instance_npcname("Kruger#2-2")+"::OnEnable"; + donpcevent(instance_npcname("Kruger#2-2")+"::OnEnable"); end; } @@ -642,72 +619,73 @@ OnMyMobDead: end; OnInstanceInit: - disablenpc instance_npcname("Kruger#2-2"); + disablenpc(instance_npcname("Kruger#2-2")); end; OnEnable: - disablenpc instance_npcname("Kruger#2-1"); - enablenpc instance_npcname("Kruger#2-2"); - initnpctimer; + disablenpc(instance_npcname("Kruger#2-1")); + enablenpc(instance_npcname("Kruger#2-2")); + initnpctimer(); end; OnTimer10: - mapannounce instance_mapname("2@orcs"), "Kruger's Whisper: I'll tell you how to get to the Shaman's altar.",bc_map,"0xffff00"; + mapannounce(instance_mapname("2@orcs"), _("Kruger's Whisper: I'll tell you how to get to the Shaman's altar."), bc_map, C_YELLOW); end; OnTimer3510: - mapannounce instance_mapname("2@orcs"), "Kruger's Whisper: Do you see the braziers that light the path? Unseal the next zone by strengthening their flames.",bc_map,"0xffff00"; + mapannounce(instance_mapname("2@orcs"), _("Kruger's Whisper: Do you see the braziers that light the path? Unseal the next zone by strengthening their flames."), bc_map, C_YELLOW); end; OnTimer10710: - mapannounce instance_mapname("2@orcs"), "Kruger's Whisper: Of course those monsters won't let you touch the braziers that easily.",bc_map,"0xffff00"; + mapannounce(instance_mapname("2@orcs"), _("Kruger's Whisper: Of course those monsters won't let you touch the braziers that easily."), bc_map, C_YELLOW); end; OnTimer16310: - mapannounce instance_mapname("2@orcs"), "Kruger's Whisper: But still, try keep the battles not too noticable so the Shaman won't guard the altar with her army squad.",bc_map,"0xffff00"; + mapannounce(instance_mapname("2@orcs"), _("Kruger's Whisper: But still, try keep the battles not too noticable so the Shaman won't guard the altar with her army squad."), bc_map, C_YELLOW); end; OnTimer21910: - mapannounce instance_mapname("2@orcs"), "Kruger's Whisper: Only the Party Leader can strengthen the flames, so protect your leader.",bc_map,"0xffff00"; + mapannounce(instance_mapname("2@orcs"), _("Kruger's Whisper: Only the Party Leader can strengthen the flames, so protect your leader."), bc_map, C_YELLOW); end; OnTimer23910: - mapannounce instance_mapname("2@orcs"), "Mission: Unseal the zone by lighting the braziers. They can only be lit in a certain order, so be careful.",bc_map,"0x4444ff"; - donpcevent instance_npcname("#2Resurrect Monsters1")+"::OnEnable"; - donpcevent instance_npcname("#2Resurrect Monsters3")+"::OnEnable"; - donpcevent instance_npcname("Torch#1-1")+"::OnEnable"; - disablenpc instance_npcname("Kruger#2-2"); + mapannounce(instance_mapname("2@orcs"), _("Mission: Unseal the zone by lighting the braziers. They can only be lit in a certain order, so be careful."), bc_map, "0x4444ff"); + donpcevent(instance_npcname("#2Resurrect Monsters1")+"::OnEnable"); + donpcevent(instance_npcname("#2Resurrect Monsters3")+"::OnEnable"); + donpcevent(instance_npcname("Torch#1-1")+"::OnEnable"); + disablenpc(instance_npcname("Kruger#2-2")); end; } 2@orcs,26,164,0 script Torch#1-1 CLEAR_NPC,{ - if(getpartyleader(getcharid(CHAR_ID_PARTY),2) != getcharid(CHAR_ID_CHAR)) end; - progressbar "ffff00",5; - setarray .@id[0], atoi(charat(strnpcinfo(NPC_NAME_HIDDEN),0)), atoi(charat(strnpcinfo(NPC_NAME_HIDDEN),2)); + if (getpartyleader(getcharid(CHAR_ID_PARTY), 2) != getcharid(CHAR_ID_CHAR)) + end; + progressbar(sprintf("0x%x", C_YELLOW), 5); + setarray(.@id[0], atoi(charat(strnpcinfo(NPC_NAME_HIDDEN), 0)), atoi(charat(strnpcinfo(NPC_NAME_HIDDEN), 2))); if (.@id[1] == 4) - donpcevent instance_npcname("#Warp2-"+.@id[0])+"::OnEnable"; + donpcevent(instance_npcname("#Warp2-"+.@id[0])+"::OnEnable"); else - donpcevent instance_npcname("Torch#"+.@id[0]+"-"+(.@id[1]+1))+"::OnEnable"; - initnpctimer; - disablenpc instance_npcname(strnpcinfo(NPC_NAME)); + donpcevent(instance_npcname("Torch#"+.@id[0]+"-"+(.@id[1]+1))+"::OnEnable"); + initnpctimer(); + disablenpc(instance_npcname(strnpcinfo(NPC_NAME))); end; OnInstanceInit: if (strnpcinfo(NPC_NAME) != "Torch#2-1" && strnpcinfo(NPC_NAME) != "Torch#3-1") - disablenpc instance_npcname(strnpcinfo(NPC_NAME)); + disablenpc(instance_npcname(strnpcinfo(NPC_NAME))); end; OnEnable: - enablenpc instance_npcname(strnpcinfo(NPC_NAME)); + enablenpc(instance_npcname(strnpcinfo(NPC_NAME))); end; OnTimer100: - specialeffect EF_FIREPILLAR; + specialeffect(EF_FIREPILLAR); end; OnTimer2000: - specialeffect EF_FIREPILLARBOMB; - stopnpctimer; + specialeffect(EF_FIREPILLARBOMB); + stopnpctimer(); end; } 2@orcs,55,155,0 duplicate(Torch#1-1) Torch#1-2 CLEAR_NPC @@ -716,27 +694,27 @@ OnTimer2000: 2@orcs,48,100,0 script #Warp2-1 WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("#Warp2-1"); + disablenpc(instance_npcname("#Warp2-1")); end; OnEnable: .@map$ = instance_mapname("2@orcs"); - monster .@map$,109,156,"Safeguard Chief",1981,1,instance_npcname("#Mobs Control")+"::OnMyMobDead1"; - mapannounce .@map$, "The Chief Orc of Safeguards: Oh!! Looks like I have company. Defeat me if you can!!",bc_map,"0xff8888"; + monster(.@map$, 109, 156, _("Safeguard Chief"), I_HIGH_ORC, 1, instance_npcname("#Mobs Control")+"::OnMyMobDead1"); + mapannounce(.@map$, _("The Chief Orc of Safeguards: Oh!! Looks like I have company. Defeat me if you can!!"), bc_map, "0xff8888"); end; OnContinue: - enablenpc instance_npcname("#Warp2-1"); - initnpctimer; + enablenpc(instance_npcname("#Warp2-1")); + initnpctimer(); end; OnTimer10000: - areamonster instance_mapname("2@orcs"),28,158,40,170,"Safeguard Chief",1981,1,instance_npcname("#Mobs Control")+"::OnMyMobDead1"; - stopnpctimer; + areamonster(instance_mapname("2@orcs"), 28, 158, 40, 170, _("Safeguard Chief"), I_HIGH_ORC, 1, instance_npcname("#Mobs Control")+"::OnMyMobDead1"); + stopnpctimer(); end; OnTouch: - warp instance_mapname("2@orcs"),47,93; + warp(instance_mapname("2@orcs"), 47, 93); end; } @@ -747,27 +725,27 @@ OnTouch: 2@orcs,101,55,0 script #Warp2-2 WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("#Warp2-2"); + disablenpc(instance_npcname("#Warp2-2")); end; OnEnable: .@map$ = instance_mapname("2@orcs"); - monster .@map$,67,64,"Orc Sniper",1982,1,instance_npcname("#Mobs Control")+"::OnMyMobDead2"; - mapannounce .@map$, "Orc Sniper: Hah! Pretty impressive that you made it this far, but your foolish little trip ends here...",bc_map,"0xff8888"; + monster(.@map$, 67, 64, _("Orc Sniper"), I_ORC_ARCHER, 1, instance_npcname("#Mobs Control")+"::OnMyMobDead2"); + mapannounce(.@map$, _("Orc Sniper: Hah! Pretty impressive that you made it this far, but your foolish little trip ends here..."), bc_map, "0xff8888"); end; OnContinue: - enablenpc instance_npcname("#Warp2-2"); - initnpctimer; + enablenpc(instance_npcname("#Warp2-2")); + initnpctimer(); end; OnTimer10000: - areamonster instance_mapname("2@orcs"),40,91,52,103,"Orc Sniper",1982,1,instance_npcname("#Mobs Control")+"::OnMyMobDead2"; - stopnpctimer; + areamonster(instance_mapname("2@orcs"), 40, 91, 52, 103, _("Orc Sniper"), I_ORC_ARCHER, 1, instance_npcname("#Mobs Control")+"::OnMyMobDead2"); + stopnpctimer(); end; OnTouch: - warp instance_mapname("2@orcs"),107,55; + warp(instance_mapname("2@orcs"), 107, 55); end; } @@ -778,41 +756,41 @@ OnTouch: 2@orcs,167,104,0 script #Warp2-3 WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("#Warp2-3"); + disablenpc(instance_npcname("#Warp2-3")); end; OnEnable: .@map$ = instance_mapname("2@orcs"); - monster .@map$,152,147,"Depraved Orc Spirit",1983,1,instance_npcname("#Mobs Control")+"::OnMyMobDead3"; - mapannounce .@map$, "Depraved Orc Spirit: I smell flesh! Hungry! Wanna try some human meat!!",bc_map,"0xff8888"; + monster(.@map$, 152, 147, _("Depraved Orc Spirit"), I_ORC_SKELETON, 1, instance_npcname("#Mobs Control")+"::OnMyMobDead3"); + mapannounce(.@map$, _("Depraved Orc Spirit: I smell flesh! Hungry! Wanna try some human meat!!"), bc_map, "0xff8888"); end; OnContinue: - areamonster instance_mapname("2@orcs"),117,61,129,73,"Depraved Orc Spirit",1983,1; - donpcevent instance_npcname("#Boss Control")+"::OnEnable"; - enablenpc instance_npcname("#Warp2-3"); - initnpctimer; + areamonster(instance_mapname("2@orcs"), 117, 61, 129, 73, _("Depraved Orc Spirit"), I_ORC_SKELETON, 1); + donpcevent(instance_npcname("#Boss Control")+"::OnEnable"); + enablenpc(instance_npcname("#Warp2-3")); + initnpctimer(); end; OnTimer10: - mapannounce instance_mapname("2@orcs"), "Shaman Cargalache: Hahaha!! So, you finally made it here. The assassin you sent was just terrible. That stupid Orc is getting cold under my feet.",bc_map,"0xffff00"; + mapannounce(instance_mapname("2@orcs"), _("Shaman Cargalache: Hahaha!! So, you finally made it here. The assassin you sent was just terrible. That stupid Orc is getting cold under my feet."), bc_map, C_YELLOW); end; OnTimer6810: - mapannounce instance_mapname("2@orcs"), "Shaman Cargalache: My loyal slave, go get those intruders!",bc_map,"0xffff00"; + mapannounce(instance_mapname("2@orcs"), _("Shaman Cargalache: My loyal slave, go get those intruders!"), bc_map, C_YELLOW); end; OnTimer10310: - mapannounce instance_mapname("2@orcs"), "Depraved Orc Hero: Whatever you say, my lord.",bc_map,"0xff7777"; + mapannounce(instance_mapname("2@orcs"), _("Depraved Orc Hero: Whatever you say, my lord."), bc_map, "0xff7777"); end; OnTimer13110: - mapannounce instance_mapname("2@orcs"), "Caution: You have been discovered by Shaman Cargalache. Kruger's plan to assassinate the Shaman has failed. You must defeat Cargalache and find traces of Kruger.",bc_map,"0x8888ff"; - stopnpctimer; + mapannounce(instance_mapname("2@orcs"), _("Caution: You have been discovered by Shaman Cargalache. Kruger's plan to assassinate the Shaman has failed. You must defeat Cargalache and find traces of Kruger."), bc_map, "0x8888ff"); + stopnpctimer(); end; OnTouch: - warp instance_mapname("2@orcs"),167,95; + warp(instance_mapname("2@orcs"), 167, 95); end; } @@ -820,93 +798,87 @@ OnTouch: end; OnInstanceInit: - disablenpc instance_npcname("#Boss Control"); + disablenpc(instance_npcname("#Boss Control")); end; OnEnable: .@map$ = instance_mapname("2@orcs"); - monster .@map$,185,8,"Shaman Cargalache",1984,1,instance_npcname("#Boss Control")+"::OnMyMobDead"; - monster .@map$,179,15,"Depraved Orc Hero",1087,1; - enablenpc instance_npcname("#Boss Control"); + monster(.@map$, 185, 8, _("Shaman Cargalache"), I_ORC_LADY, 1, instance_npcname("#Boss Control")+"::OnMyMobDead"); + monster(.@map$, 179, 15, _("Depraved Orc Hero"), ORK_HERO, 1); + enablenpc(instance_npcname("#Boss Control")); end; OnMyMobDead: - donpcevent instance_npcname("Kruger#")+"::OnEnable"; + donpcevent(instance_npcname("Kruger#")+"::OnEnable"); .@map$ = instance_mapname("2@orcs"); - .@mob_ran = rand(1,5); - if (.@mob_ran == 1) { - mapannounce .@map$, "Shaman Cargalache: How... How could this be... How could someone like you...!!",bc_map,"0xffff00"; - } - else if (.@mob_ran == 2) { - mapannounce .@map$, "Shaman Cargalache: How is it that I've been overpowered by mere humans!",bc_map,"0xffff00"; - } - else if (.@mob_ran == 3) { - mapannounce .@map$, "Shaman Cargalache: This... This can't be the end...",bc_map,"0xffff00"; - } - else if (.@mob_ran == 4) { - mapannounce .@map$, "Shaman Cargalache: I... Can't die... Yet...!",bc_map,"0xffff00"; - } - else { - mapannounce .@map$, "Shaman Cargalache: Defeated by these fools... It can't be happening...!",bc_map,"0xffff00"; - } - donpcevent instance_npcname("#2Resurrect Monsters1")+"::OnDisable"; - donpcevent instance_npcname("#2Resurrect Monsters3")+"::OnDisable"; - donpcevent instance_npcname("#Warp Outside Orc Dun")+"::OnEnable"; + .@mob_ran = rand(1, 5); + if (.@mob_ran == 1) + mapannounce(.@map$, _("Shaman Cargalache: How... How could this be... How could someone like you...!!"), bc_map, C_YELLOW); + else if (.@mob_ran == 2) + mapannounce(.@map$, _("Shaman Cargalache: How is it that I've been overpowered by mere humans!"), bc_map, C_YELLOW); + else if (.@mob_ran == 3) + mapannounce(.@map$, _("Shaman Cargalache: This... This can't be the end..."), bc_map, C_YELLOW); + else if (.@mob_ran == 4) + mapannounce(.@map$, _("Shaman Cargalache: I... Can't die... Yet...!"), bc_map, C_YELLOW); + else + mapannounce(.@map$, _("Shaman Cargalache: Defeated by these fools... It can't be happening...!"), bc_map, C_YELLOW); + donpcevent(instance_npcname("#2Resurrect Monsters1")+"::OnDisable"); + donpcevent(instance_npcname("#2Resurrect Monsters3")+"::OnDisable"); + donpcevent(instance_npcname("#Warp Outside Orc Dun")+"::OnEnable"); end; } 2@orcs,182,8,0 script #Warp Outside Orc Dun WARPNPC,3,3,{ OnInstanceInit: - disablenpc instance_npcname("#Warp Outside Orc Dun"); + disablenpc(instance_npcname("#Warp Outside Orc Dun")); end; OnEnable: - enablenpc instance_npcname("#Warp Outside Orc Dun"); + enablenpc(instance_npcname("#Warp Outside Orc Dun")); end; OnTouch: - warp "gef_fild10",240,197; + warp("gef_fild10", 240, 197); end; } 2@orcs,172,13,0 script Kruger# 4_ORCWARRIOR2,{ if (yong_odun < 2) { - mes "[Kruger]"; - mes "*Coughing*"; - mes ""+strcharinfo(PC_NAME)+", it's you..."; - next; - mes "["+strcharinfo(PC_NAME)+"] "; - mes "Don't move! You are wounded!"; - next; - mes "[Kruger]"; - mes "It's... all right.. I'm dying..."; - mes "...."; - mes "The Shaman? What about the Shaman?"; - next; - mes "["+strcharinfo(PC_NAME)+"] "; - mes "The Shaman's dead now. Who was that Shaman really?"; - next; - mes "Kruger seemed to be relieved as he hears of the death of the Shaman, but you notice the bitter expression on his face."; - next; - mes "[Kruger]"; - mes "I.. I just couldn't kill my own daughter..."; - mes "Thank you, I'm sure she's finally free from the nightmare that used to choke her soul."; - next; - mes "Kruger was about to say something more, but he breathed his last breath before he could..."; + mes("[Kruger]"); + mes("*Coughing*"); + mesf("%s, it's you...", strcharinfo(PC_NAME)); + next(); + mesf("[%s]", strcharinfo(PC_NAME)); + mes("Don't move! You are wounded!"); + next(); + mes("[Kruger]"); + mes("It's... all right.. I'm dying..."); + mes("...."); + mes("The Shaman? What about the Shaman?"); + next(); + mesf("[%s]", strcharinfo(PC_NAME)); + mes("The Shaman's dead now. Who was that Shaman really?"); + next(); + mes("Kruger seemed to be relieved as he hears of the death of the Shaman, but you notice the bitter expression on his face."); + next(); + mes("[Kruger]"); + mes("I.. I just couldn't kill my own daughter..."); + mes("Thank you, I'm sure she's finally free from the nightmare that used to choke her soul."); + next(); + mes("Kruger was about to say something more, but he breathed his last breath before he could..."); yong_odun = 2; - close; - } - else { - mes "You can see the dead body of Kruger, peacefully lying on the ground."; - close; + close(); + } else { + mes("You can see the dead body of Kruger, peacefully lying on the ground."); + close(); } OnInstanceInit: - disablenpc instance_npcname("Kruger#"); + disablenpc(instance_npcname("Kruger#")); end; OnEnable: - enablenpc instance_npcname("Kruger#"); + enablenpc(instance_npcname("Kruger#")); end; } @@ -914,14 +886,14 @@ OnEnable: end; OnMyMobDead1: - donpcevent instance_npcname("#Warp2-1")+"::OnContinue"; + donpcevent(instance_npcname("#Warp2-1")+"::OnContinue"); end; OnMyMobDead2: - donpcevent instance_npcname("#Warp2-2")+"::OnContinue"; + donpcevent(instance_npcname("#Warp2-2")+"::OnContinue"); end; OnMyMobDead3: - donpcevent instance_npcname("#Warp2-3")+"::OnContinue"; + donpcevent(instance_npcname("#Warp2-3")+"::OnContinue"); end; } diff --git a/npc/re/instances/ghost_palace.txt b/npc/re/instances/ghost_palace.txt index 6e77db2f8..e4ca12f99 100644 --- a/npc/re/instances/ghost_palace.txt +++ b/npc/re/instances/ghost_palace.txt @@ -35,7 +35,7 @@ dali02,44,129,5 script Unpleasent Royal Guard 4_M_SAKRAYROYAL,{ if (BaseLevel < 120) { mes("[Unpleasent Royal Guard]"); mes("Althought I need help with a task, you are not strong enough to assist me, noob~!"); - next; + next(); mes("[Unpleasent Royal Guard]"); mes("Come back after when you have done some training and are at least level 120!"); close(); @@ -50,7 +50,7 @@ dali02,44,129,5 script Unpleasent Royal Guard 4_M_SAKRAYROYAL,{ mes("[Unpleasent Royal Guard]"); mes("Did the gate close?\r" "Please enter the gate as soon as you can next time."); - erasequest 1260; + erasequest(1260); close(); } mes("[Unpleasent Royal Guard]"); @@ -64,7 +64,7 @@ dali02,44,129,5 script Unpleasent Royal Guard 4_M_SAKRAYROYAL,{ mes("This is a solo instance. Please form a solo party before continuing."); close(); } - if (getcharid(CHAR_ID_CHAR) != getpartyleader(.@party_id,2)) { + if (getcharid(CHAR_ID_CHAR) != getpartyleader(.@party_id, 2)) { mes("[Unpleasent Royal Guard]"); mes("I'm looking for adventurers to help me!\r" "I want to talk to the team leader, can I?"); @@ -72,25 +72,25 @@ dali02,44,129,5 script Unpleasent Royal Guard 4_M_SAKRAYROYAL,{ } mes("[Unpleasent Royal Guard]"); mes("I need some help, even from the likes of you."); - next; + next(); mes("[Unpleasent Royal Guard]"); mes("In the middle of the battle the princess disappeared while I was guarding the palace."); - next; + next(); mes("[Unpleasent Royal Guard]"); mes("You run ahead and i will catch up.\r" "We must save her."); - next; + next(); if (select("I will help.", "This is not a good time.") == 2) { mes("[Unpleasent Royal Guard]"); mes("Even now all the royal guards are fighting and dying to the monsters."); - next; + next(); mes("[Unpleasent Royal Guard]"); mes("We must save the princess no matter how much fear grips our hearts!"); close(); } - .@instance = instance_create("Ghost Palace", .@party_id); + .@instance = instance_create(_("Ghost Palace"), .@party_id); .@p_name$ = getpartyname(.@party_id); - .@md_name$ = "Ghost Palace"; + .@md_name$ = _("Ghost Palace"); if (.@instance < 0) { mesf("Party Name: %s", .@p_name$); mesf("Party Leader: %s", strcharinfo(PC_NAME)); @@ -100,7 +100,8 @@ dali02,44,129,5 script Unpleasent Royal Guard 4_M_SAKRAYROYAL,{ if (instance_attachmap("1@spa", .@instance) != "") { instance_set_timeout(3600, 300, .@instance); instance_init(.@instance); - if (!questprogress(1260)) setquest 1260; + if (!questprogress(1260)) + setquest(1260); mes("[Unpleasent Royal Guard]"); mes("Thank You..\r" "I will open the secret passage to ^0000FFGhost Palace.^000000\r" @@ -117,23 +118,23 @@ dali02,41,134,0 script Interdimensional Device::gpportal PORTAL,{ if (BaseLevel < 120) { mes("[Unpleasent Royal Guard]"); mes("Althought I need help with a task, you are not strong enough to assist me, noob~!"); - next; + next(); mes("[Unpleasent Royal Guard]"); mes("Come back after when you have done some training and are at least level 120!"); close(); } if (questprogress(1261)) { if (questprogress(1261, PLAYTIME) == 2) { - erasequest 1261; + erasequest(1261); if (questprogress(1260)) - erasequest 1260; + erasequest(1260); end; } mes("[Unpleasent Royal Guard]"); mes("The monsters that attacked the palace are wandering around the secret entrance. It would be very bad if they spotted us... Please wait until the time limit for re-entrance passed."); close(); } - if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id,2) && !questprogress(1260)) { + if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2) && !questprogress(1260)) { mes("[Unpleasent Royal Guard]"); mes("I'm looking for adventurers to help me!\r" "I want to talk to the team leader, can I?"); @@ -141,11 +142,11 @@ dali02,41,134,0 script Interdimensional Device::gpportal PORTAL,{ } mes("[Unpleasent Royal Guard]"); mes("I can see the secret passage into the Palace... Are you ready to save the princess?!"); - next; + next(); if (select("Enter", "Stop") == 2) { mes("[Unpleasent Royal Guard]"); mes("Even now all the royal guards are fighting and dying to the monsters."); - next; + next(); mes("[Unpleasent Royal Guard]"); mes("We must save the princess no matter how much fear grips our hearts!"); close(); @@ -155,8 +156,9 @@ dali02,41,134,0 script Interdimensional Device::gpportal PORTAL,{ close(); } mapannounce("dali", sprintf(_$("%s of the party, %s, is entering the Ghost Palace."), strcharinfo(PC_NAME), getpartyname(getcharid(CHAR_ID_PARTY))), bc_map, C_SPRINGGREEN); - if (!questprogress(1260)) setquest 1260; - setquest 1261; + if (!questprogress(1260)) + setquest(1260); + setquest(1261); warp("1@spa", 198, 188); close(); } @@ -165,35 +167,35 @@ dali02,41,134,0 script Interdimensional Device::gpportal PORTAL,{ mes("[King]"); mes("You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else."); npctalk(_("You are hereby appointed as the personal guard to Princess Tiara. I trust your loyalty above all else."), instance_npcname("King#gp1")); - next; + next(); mes("[Lurid Royal Guard]"); mes("I will protect the Princess with my life."); npctalk(_("I will protect the Princess with my life."), instance_npcname("Lurid Royal Guard#gp1")); - next; + next(); mes("[King]"); mes("The marriage arrangements are going as planned. The prince is here to meet the princess."); npctalk(_("The marriage arrangements are going as planned. The prince is here to meet the princess."), instance_npcname("King#gp1")); - next; + next(); mes("[Lurid Royal Guard]"); mes("...Yes, your majesty."); npctalk(_("...Yes, your majesty."), instance_npcname("Lurid Royal Guard#gp1")); - next; + next(); mes("[King]"); mes("My gods, there are monsters in the castle! Get rid of them now!"); npctalk(_("My gods, there are monsters in the castle! Get rid of them now!"), instance_npcname("King#gp1")); close2(); - donpcevent instance_npcname("#gp1control")+"::OnStart"; + donpcevent(instance_npcname("#gp1control")+"::OnStart"); end; } 1@spa,1,1,1 script #gp1control HIDDEN_NPC,{ end; OnStart: - hideonnpc instance_npcname("Lurid Royal Guard#gp1"); - hideonnpc instance_npcname("King#gp1"); - sleep 1000; + hideonnpc(instance_npcname("Lurid Royal Guard#gp1")); + hideonnpc(instance_npcname("King#gp1")); + sleep(1000); OnSummon: - sleep 2000; + sleep(2000); .@map$ = instance_mapname("1@spa"); areamonster(.@map$, 182, 190, 214, 214, _("Cursed Sentinel"), CURSED_SENTINEL, 2, instance_npcname("#gp1control")+"::OnMyMobDead"); areamonster(.@map$, 182, 190, 214, 214, _("Cursed Solider"), CURSED_SOLDIER, 2, instance_npcname("#gp1control")+"::OnMyMobDead"); @@ -203,16 +205,16 @@ OnMyMobDead: end; if ('gp1 < 2) { ++'gp1; - donpcevent instance_npcname("#gp1control")+"::OnSummon"; + donpcevent(instance_npcname("#gp1control")+"::OnSummon"); end; } mapannounce(instance_mapname("1@spa"), _("The passage on 2nd floor in the palace of the ghost is open."), bc_map, C_YELLOW); - enablenpc instance_npcname("#gp1warp"); - disablenpc instance_npcname("#gp1control"); + enablenpc(instance_npcname("#gp1warp")); + disablenpc(instance_npcname("#gp1control")); end; OnInstanceInit: 'gp1 = 0; - disablenpc instance_npcname("#gp1warp"); + disablenpc(instance_npcname("#gp1warp")); end; } @@ -221,53 +223,53 @@ OnInstanceInit: mes("[Lurid Royal Guard]"); mes("Your Highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him..."); npctalk(_("Your Highness, the King has invited a prince from a neighboring country to be your betrothed. Be ready to meet him..."), instance_npcname("Lurid Royal Guard#gp2")); - next; + next(); mes("[Princess Tiara]"); mes("If...if a marriage is arranged what should I do ?"); npctalk(_("If...if a marriage is arranged what should I do ?"), instance_npcname("Tiara Princess#gp2")); - next; + next(); mes("[Lurid Royal Guard]"); mes("The only thing I can do is protect you from physical harm."); npctalk(_("The only thing I can do is protect you from physical harm."), instance_npcname("Lurid Royal Guard#gp2")); - next; + next(); mes("[Princess Tiara]"); mes("Then, what can I do?"); npctalk(_("Then, what can I do?"), instance_npcname("Tiara Princess#gp2")); - next; + next(); mes("[Lurid Royal Guard]"); mes("......"); mes("You must decide that for yourself your highness..."); npctalk(_("You must decide that for yourself your highness..."), instance_npcname("Lurid Royal Guard#gp2")); - next; + next(); mes("[Princess Tiara]"); mes("Would it be easier for you if I were married and sent off to another country?"); npctalk(_("Would it be easier for you if I were married and sent off to another country?"), instance_npcname("Tiara Princess#gp2")); - next; + next(); cutin("", 255); mes("[Lurid Royal Guard]"); mes("I will alway stand by you and protect you forever."); npctalk(_("I will alway stand by you and protect you forever."), instance_npcname("Lurid Royal Guard#gp2")); - next; + next(); mes("[Princess Tiara]"); mes("Monsters in the castle? Protect me!"); npctalk(_("Monsters in the castle? Protect me!"), instance_npcname("Tiara Princess#gp2")); - next; + next(); mes("[Lurid Royal Guard]"); mes("Step back, Let's go!"); npctalk(_("Step back, Let's go!"), instance_npcname("Lurid Royal Guard#gp2")); close2(); - donpcevent instance_npcname("#gp2control")+"::OnStart"; + donpcevent(instance_npcname("#gp2control")+"::OnStart"); end; } 1@spa,1,1,1 script #gp2control HIDDEN_NPC,{ end; OnStart: - hideonnpc instance_npcname("Lurid Royal Guard#gp2"); - hideonnpc instance_npcname("Tiara Princess#gp2"); - sleep 1000; + hideonnpc(instance_npcname("Lurid Royal Guard#gp2")); + hideonnpc(instance_npcname("Tiara Princess#gp2")); + sleep(1000); OnSummon: - sleep 2000; + sleep(2000); .@map$ = instance_mapname("1@spa"); areamonster(.@map$, 143, 96, 94, 143, _("Broken Mind"), BROKEN_MIND, 3, instance_npcname("#gp2control")+"::OnMyMobDead"); areamonster(.@map$, 143, 96, 94, 143, _("Floating Word"), FLOATING_WORD, 4, instance_npcname("#gp2control")+"::OnMyMobDead"); @@ -277,11 +279,11 @@ OnMyMobDead: if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp2control")+"::OnMyMobDead")) end; mapannounce(instance_mapname("1@spa"), _("The passage on the 3rd floor of the palace is open."), bc_map, C_YELLOW); - enablenpc instance_npcname("#gp2warp"); - disablenpc instance_npcname("#gp2control"); + enablenpc(instance_npcname("#gp2warp")); + disablenpc(instance_npcname("#gp2control")); end; OnInstanceInit: - disablenpc instance_npcname("#gp2warp"); + disablenpc(instance_npcname("#gp2warp")); end; } @@ -289,29 +291,29 @@ OnInstanceInit: mes("[King]"); mes("It was you who brought the monsters here, you want to get rid of me and have the princess for yourself?"); npctalk(_("It was you who brought the monsters here, you want to get rid of me and have the princess for yourself?"), instance_npcname("King#gp3")); - next; + next(); mes("[Lurid Royal Guard]"); mes("It's a trap, you should trust me, your majesty!"); npctalk(_("It's a trap, you should trust me, your majesty!"), instance_npcname("Lurid Royal Guard#gp3")); - next; + next(); mes("[King]"); mes("Shut up! You're betrayed me ! I trusted you... you must pay for your disgrace."); npctalk(_("Shut up! You're betrayed me ! I trusted you... you must pay for your disgrace."), instance_npcname("King#gp3")); - next; + next(); mes("[King]"); mes("You will suffer for the rest of your life."); npctalk(_("You will suffer for the rest of your life."), instance_npcname("King#gp3")); close2(); - donpcevent instance_npcname("#gp3control")+"::OnStart"; + donpcevent(instance_npcname("#gp3control")+"::OnStart"); end; } 1@spa,54,28,0 script #gp3warp WARPNPC,1,1,{ - if (!'gp5) + if (!'gp5) { warp("1@spa", 218, 186); - else { + } else { if (questprogress(40024)) - completequest 40024; + completequest(40024); mes("It is time to leave Palace of the ghost.\r" "Everything is completed.\r" "Everything will be vanished..."); @@ -332,7 +334,7 @@ OnInstanceInit: 1@spa,35,56,1 script Ominous Voice#gp3 4_TRACE,{ end; OnStart: - initnpctimer; + initnpctimer(); end; OnTimer3000: npctalk(_("Oh, faithful royal guard, you are trapped.")); @@ -356,32 +358,32 @@ OnTimer21000: npctalk(_("Kukuku... What do you want boy?")); end; OnTimer24000: - stopnpctimer; - hideonnpc instance_npcname("Ominous Voice#gp3"); - hideonnpc instance_npcname("Lurid Royal Guard#gp3"); - donpcevent instance_npcname("#gp3control")+"::OnSummon"; + stopnpctimer(); + hideonnpc(instance_npcname("Ominous Voice#gp3")); + hideonnpc(instance_npcname("Lurid Royal Guard#gp3")); + donpcevent(instance_npcname("#gp3control")+"::OnSummon"); end; } 1@spa,1,1,1 script #gp3control HIDDEN_NPC,{ end; OnStart: - hideonnpc instance_npcname("King#gp3"); - hideonnpc instance_npcname("Soldier#gp3_1"); - hideonnpc instance_npcname("Soldier#gp3_2"); - hideonnpc instance_npcname("Soldier#gp3_3"); - hideonnpc instance_npcname("Captain of the Guard#gp3"); - donpcevent instance_npcname("Ominous Voice#gp3")+"::OnStart"; + hideonnpc(instance_npcname("King#gp3")); + hideonnpc(instance_npcname("Soldier#gp3_1")); + hideonnpc(instance_npcname("Soldier#gp3_2")); + hideonnpc(instance_npcname("Soldier#gp3_3")); + hideonnpc(instance_npcname("Captain of the Guard#gp3")); + donpcevent(instance_npcname("Ominous Voice#gp3")+"::OnStart"); end; OnSummon: - initnpctimer; + initnpctimer(); .@map$ = instance_mapname("1@spa"); 'talkid[0] = areamonster(.@map$, 61, 63, 24, 24, _("Cursed Memory"), CURSED_MEMORY, 2 + 'gp3, instance_npcname("#gp3control")+"::OnMyMobDead"); 'talkid[1] = areamonster(.@map$, 61, 63, 24, 24, _("Colorless Vow"), COLORLESS_VOW, 3 + 'gp3, instance_npcname("#gp3control")+"::OnMyMobDead"); 'talkid[2] = areamonster(.@map$, 61, 63, 24, 24, _("Old Friendship"), OLD_FRIENDSHIP, 2 + 'gp3, instance_npcname("#gp3control")+"::OnMyMobDead"); end; OnTimer2000: - stopnpctimer; + stopnpctimer(); unittalk('talkid[0], _("Faithful Guards")); unittalk('talkid[1], _("Run!")); unittalk('talkid[2], _("Being framed...")); @@ -390,21 +392,21 @@ OnMyMobDead: if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp3control")+"::OnMyMobDead")) end; if (!'gp3) { - mapannounce instance_mapname("1@spa"), "The passage on the 4rd floor of the palace is open.", bc_map, C_YELLOW; - enablenpc instance_npcname("#gp3warp"); - donpcevent instance_npcname("#gp4control")+"::OnSummon"; - disablenpc instance_npcname("#gp1warp"); + mapannounce(instance_mapname("1@spa"), _("The passage on the 4rd floor of the palace is open."), bc_map, C_YELLOW); + enablenpc(instance_npcname("#gp3warp")); + donpcevent(instance_npcname("#gp4control")+"::OnSummon"); + disablenpc(instance_npcname("#gp1warp")); } ++'gp3; - if ('gp3 < 5) - donpcevent instance_npcname("#gp3control")+"::OnSummon"; - else { - stopnpctimer; - disablenpc instance_npcname("#gp3control"); + if ('gp3 < 5) { + donpcevent(instance_npcname("#gp3control")+"::OnSummon"); + } else { + stopnpctimer(); + disablenpc(instance_npcname("#gp3control")); } end; OnInstanceInit: - disablenpc instance_npcname("#gp3warp"); + disablenpc(instance_npcname("#gp3warp")); 'gp3 = 0; end; } @@ -413,26 +415,26 @@ OnInstanceInit: mes("[Lurid Royal Guard]"); mes("Where is Princess Tiara?"); npctalk(_("Where is Princess Tiara?"), instance_npcname("Lurid Royal Guard#gp4")); - next; + next(); mes("[Visiting Prince]"); mes("You are too late... but you brought what I was looking for. Thanks for your help."); npctalk(_("You are too late... but you brought what I was looking for. Thanks for your help."), instance_npcname("Visiting Prince#gp4")); - next; + next(); mes("[Visiting Prince]"); mes("Cursed Thanatos Magic Trace! Are you ready to have a new master?"); npctalk(_("Cursed Thanatos Magic Trace! Are you ready to have a new master?"), instance_npcname("Visiting Prince#gp4")); - next; + next(); cutin("tartanos", 3); mes("[Thanatos Magic Trace]"); mes("How dare you!"); npctalk(_("How dare you!"), instance_npcname("Thanatos Magic Trace#gp4")); - next; + next(); mes("[Visiting Prince]"); mes("Aah, aah!!!"); npctalk(_("Aah, aah!!!"), instance_npcname("Visiting Prince#gp4")); close2(); cutin("", 255); - donpcevent instance_npcname("#gp4control")+"::OnBoss"; + donpcevent(instance_npcname("#gp4control")+"::OnBoss"); end; } @@ -442,56 +444,56 @@ OnStart: end; OnSummon: .@map$ = instance_mapname("1@spa"); - areamonster(.@map$, 182, 217, 214, 188, _("Cursed Sentinel"), CURSED_SENTINEL, rand(2,3), instance_npcname("#gp4control")+"::OnMyMobDead"); - areamonster(.@map$, 182, 217, 214, 188, _("Sweet Slaughter"), SWEET_SLAUGHTER, rand(2,3), instance_npcname("#gp4control")+"::OnMyMobDead"); + areamonster(.@map$, 182, 217, 214, 188, _("Cursed Sentinel"), CURSED_SENTINEL, rand(2, 3), instance_npcname("#gp4control")+"::OnMyMobDead"); + areamonster(.@map$, 182, 217, 214, 188, _("Sweet Slaughter"), SWEET_SLAUGHTER, rand(2, 3), instance_npcname("#gp4control")+"::OnMyMobDead"); end; OnMyMobDead: if (mobcount(instance_mapname("1@spa"), instance_npcname("#gp4control")+"::OnMyMobDead")) end; ++'gp4; if ('gp4 > 3) - donpcevent instance_npcname("#gp4control")+"::OnStory"; + donpcevent(instance_npcname("#gp4control")+"::OnStory"); else - donpcevent instance_npcname("#gp4control")+"::OnSummon"; + donpcevent(instance_npcname("#gp4control")+"::OnSummon"); end; OnStory: for(.@i = 1; .@i <= 4; ++.@i) - enablenpc instance_npcname("Soldier's Corpse#gp4_"+.@i); - enablenpc instance_npcname("Captain's Corpse#gp4"); - enablenpc instance_npcname("King's Corpse#gp4"); - enablenpc instance_npcname("Lurid Royal Guard#gp4"); - enablenpc instance_npcname("Thanatos Magic Trace#gp4"); - enablenpc instance_npcname("Visiting Prince#gp4"); + enablenpc(instance_npcname("Soldier's Corpse#gp4_"+.@i)); + enablenpc(instance_npcname("Captain's Corpse#gp4")); + enablenpc(instance_npcname("King's Corpse#gp4")); + enablenpc(instance_npcname("Lurid Royal Guard#gp4")); + enablenpc(instance_npcname("Thanatos Magic Trace#gp4")); + enablenpc(instance_npcname("Visiting Prince#gp4")); end; OnBoss: for(.@i = 1; .@i <= 4; ++.@i) - hideonnpc instance_npcname("Soldier's Corpse#gp4_"+.@i); - hideonnpc instance_npcname("Captain's Corpse#gp4"); - hideonnpc instance_npcname("King's Corpse#gp4"); - hideonnpc instance_npcname("Lurid Royal Guard#gp4"); - hideonnpc instance_npcname("Thanatos Magic Trace#gp4"); - hideonnpc instance_npcname("Visiting Prince#gp4"); - sleep 1000; + hideonnpc(instance_npcname("Soldier's Corpse#gp4_"+.@i)); + hideonnpc(instance_npcname("Captain's Corpse#gp4")); + hideonnpc(instance_npcname("King's Corpse#gp4")); + hideonnpc(instance_npcname("Lurid Royal Guard#gp4")); + hideonnpc(instance_npcname("Thanatos Magic Trace#gp4")); + hideonnpc(instance_npcname("Visiting Prince#gp4")); + sleep(1000); monster(instance_mapname("1@spa"), 197, 218, _("Torturous Redeemer"), TORTUROUS_REDEEMER, 1, instance_npcname("#gp4control")+"::OnBossDead"); end; OnBossDead: monster(instance_mapname("1@spa"), 197, 180, _("Sweet Slaughter"), SWEET_SLAUGHTER, 1, instance_npcname("#gp4control")+"::OnMobDead"); end; OnMobDead: - mapannounce instance_mapname("1@spa"), "The passage on the 5th floor of the palace is open.", bc_map, C_YELLOW; - enablenpc instance_npcname("#gp4warp"); - donpcevent instance_npcname("#gp5control")+"::OnStart"; - disablenpc instance_npcname("#gp4control"); + mapannounce(instance_mapname("1@spa"), _("The passage on the 5th floor of the palace is open."), bc_map, C_YELLOW); + enablenpc(instance_npcname("#gp4warp")); + donpcevent(instance_npcname("#gp5control")+"::OnStart"); + disablenpc(instance_npcname("#gp4control")); end; OnInstanceInit: - disablenpc instance_npcname("#gp4warp"); + disablenpc(instance_npcname("#gp4warp")); for(.@i = 1; .@i <= 4; ++.@i) - disablenpc instance_npcname("Soldier's Corpse#gp4_"+.@i); - disablenpc instance_npcname("Captain's Corpse#gp4"); - disablenpc instance_npcname("King's Corpse#gp4"); - disablenpc instance_npcname("Lurid Royal Guard#gp4"); - disablenpc instance_npcname("Thanatos Magic Trace#gp4"); - disablenpc instance_npcname("Visiting Prince#gp4"); + disablenpc(instance_npcname("Soldier's Corpse#gp4_"+.@i)); + disablenpc(instance_npcname("Captain's Corpse#gp4")); + disablenpc(instance_npcname("King's Corpse#gp4")); + disablenpc(instance_npcname("Lurid Royal Guard#gp4")); + disablenpc(instance_npcname("Thanatos Magic Trace#gp4")); + disablenpc(instance_npcname("Visiting Prince#gp4")); 'gp4 = 0; end; } @@ -500,35 +502,35 @@ OnInstanceInit: mes("[Princess Tiara]"); mes("You kept your promise."); npctalk(_("You kept your promise."), instance_npcname("Tiara Princess#gp5")); - next; + next(); mes("[Lurid Royal Guard]"); mes("princess!"); npctalk(_("princess"), instance_npcname("Lurid Royal Guard#gp5")); - next; + next(); cutin("npc-tiara", 3); mes("[Princess Tiara]"); mes("Thank you..now I can rest at beside you..."); npctalk(_("Thank you..now I can rest at beside you..."), instance_npcname("Tiara Princess#gp5")); - next; + next(); mes("[Lurid Royal Guard]"); mes("No..NO!!!!!!"); npctalk(_("No..NO!!!!!!"), instance_npcname("Lurid Royal Guard#gp5")); - next; + next(); mes("[The Voice of Princess Tiara]"); mes("I want to be with you forever in peace...forever..."); npctalk(_("I want to be with you forever in peace...forever..."), instance_npcname("Tiara Princess#gp5")); - next; + next(); cutin("b-tiara", 3); mes("[Lurid Royal Guard]"); mes("no.....Ahh ahh ahh!!!~!"); npctalk(_("no.....Ahh ahh ahh!!!~!"), instance_npcname("Lurid Royal Guard#gp5")); - next; + next(); mes("[The Voice of Princess Tiara]"); mes("I love you..."); npctalk(_("I love you..."), instance_npcname("Tiara Princess#gp5")); close2(); cutin("", 255); - donpcevent instance_npcname("#gp5control")+"::OnStart2"; + donpcevent(instance_npcname("#gp5control")+"::OnStart2"); end; } @@ -537,63 +539,63 @@ OnInstanceInit: mes("[Lurid Royal Guard]"); mes("Are you satisfied..? Thanatos Magic Trace?"); npctalk(_("Are you satisfied..? Thanatos Magic Trace?"), instance_npcname("Sakray#gp5")); - next; + next(); mes("[Thanatos Magic Trace]"); mes("I need more blood..Sakray, offer me his blood."); npctalk(_("I need more blood..Sakray, offer me his blood."), instance_npcname("Thanatos Magic Trace#gp5")); - next; + next(); mes("[Sakray]"); mes("Okay, that is good. A traveler.\r" "Did you see?"); npctalk(_("Okay, that is good. A traveler. Did you see?"), instance_npcname("Sakray#gp5")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("Sakray, What do you want sympathy? Or is it a trap?"); unittalk(getcharid(CHAR_ID_ACCOUNT), _("Sakray, What do you want sympathy? Or is it a trap?")); - next; + next(); mes("[Sakray]"); mes("Non...I did not need to make an effort to catch a novice."); npctalk(_("Non...I did not need to make an effort to catch a novice."), instance_npcname("Sakray#gp5")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("If so... then why...?"); unittalk(getcharid(CHAR_ID_ACCOUNT), _("If so... then why...?")); - next; + next(); cutin("cry-b", 3); mes("[Sakray]"); mes("I wanted to get rid of a piece of humanity inside of me through you."); npctalk(_("I wanted to get rid of a piece of humanity inside of me through you."), instance_npcname("Sakray#gp5")); - next; + next(); mes("[Sakray]"); mes("I am quite satisfied with the result."); - next; + next(); mes("[Thanatos Magic Trace]"); mes("Sakray, offer the blood to me now!"); npctalk(_("Sakray, offer the blood to me now!"), instance_npcname("Thanatos Magic Trace#gp5")); - next; + next(); mes("[Sakray]"); mes("If you were me, what would you do?"); - next; + next(); mes("[Sakray]"); mes("Can you set yourself free from this curse?"); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("..."); unittalk(getcharid(CHAR_ID_ACCOUNT), _("...")); - next; + next(); mes("[Sakray]"); mes("Heh heh... I will keep watching you until the day you grow up enough."); - next; + next(); mes("[Sakray]"); mes("I am willing to hunt you later for Thanatos."); - next; + next(); cutin("", 255); mes("[Sakray]"); mes("Farewell then."); close2(); - donpcevent instance_npcname("#gp5control")+"::OnEnd"; - hideonnpc instance_npcname("Sakray#gp5"); - hideonnpc instance_npcname("Thanatos Magic Trace#gp5"); + donpcevent(instance_npcname("#gp5control")+"::OnEnd"); + hideonnpc(instance_npcname("Sakray#gp5")); + hideonnpc(instance_npcname("Thanatos Magic Trace#gp5")); end; } @@ -601,25 +603,25 @@ OnInstanceInit: end; OnStart: stopnpctimer instance_npcname("#gp3control"); - disablenpc instance_npcname("#gp3control"); - killmonster instance_mapname("1@spa"), "All"; - disablenpc instance_npcname("#gp3warp"); - enablenpc instance_npcname("Lurid Royal Guard#gp5"); - enablenpc instance_npcname("Tiara Princess#gp5"); + disablenpc(instance_npcname("#gp3control")); + killmonster(instance_mapname("1@spa"), "All"); + disablenpc(instance_npcname("#gp3warp")); + enablenpc(instance_npcname("Lurid Royal Guard#gp5")); + enablenpc(instance_npcname("Tiara Princess#gp5")); end; OnStart2: - hideonnpc instance_npcname("Lurid Royal Guard#gp5"); - hideonnpc instance_npcname("Tiara Princess#gp5"); - sleep 2000; + hideonnpc(instance_npcname("Lurid Royal Guard#gp5")); + hideonnpc(instance_npcname("Tiara Princess#gp5")); + sleep(2000); OnSummon: - initnpctimer; + initnpctimer(); .@map$ = instance_mapname("1@spa"); - 'talkid[0] = areamonster(.@map$, 61, 63, 24, 24, _("Forgotten Name"), FORGOTTEN_NAME, rand(1,2), instance_npcname("#gp5control")+"::OnMyMobDead"); + 'talkid[0] = areamonster(.@map$, 61, 63, 24, 24, _("Forgotten Name"), FORGOTTEN_NAME, rand(1, 2), instance_npcname("#gp5control")+"::OnMyMobDead"); 'talkid[1] = areamonster(.@map$, 61, 63, 24, 24, _("Colorless Vow"), COLORLESS_VOW, 2, instance_npcname("#gp5control")+"::OnMyMobDead"); - 'talkid[2] = areamonster(.@map$, 61, 63, 24, 24, _("Sweet Slaughter"), SWEET_SLAUGHTER, rand(1,2), instance_npcname("#gp5control")+"::OnMyMobDead"); + 'talkid[2] = areamonster(.@map$, 61, 63, 24, 24, _("Sweet Slaughter"), SWEET_SLAUGHTER, rand(1, 2), instance_npcname("#gp5control")+"::OnMyMobDead"); end; OnTimer2000: - stopnpctimer; + stopnpctimer(); unittalk('talkid[0], _("What is this..??")); unittalk('talkid[1], _("Wake up! look at us... We are monsters?")); unittalk('talkid[2], _("Sakray killed the princess!")); @@ -629,51 +631,51 @@ OnMyMobDead: end; ++'gp5; if ('gp5 > 2) - donpcevent instance_npcname("#gp5control")+"::OnStory"; + donpcevent(instance_npcname("#gp5control")+"::OnStory"); else - donpcevent instance_npcname("#gp5control")+"::OnSummon"; + donpcevent(instance_npcname("#gp5control")+"::OnSummon"); end; OnBossDead: - enablenpc instance_npcname("Sakray#gp5"); - enablenpc instance_npcname("Thanatos Magic Trace#gp5"); + enablenpc(instance_npcname("Sakray#gp5")); + enablenpc(instance_npcname("Thanatos Magic Trace#gp5")); end; OnStory: - stopnpctimer; + stopnpctimer(); 'BossID = monster(instance_mapname("1@spa"), 44, 47, _("Torturous Redeemer"), E_TORTUROUS_REDEEMER, 1, instance_npcname("#gp5control")+"::OnBossDead"); unittalk('BossID, _("Thanatos Magic Trace! I will destroy you if I can't have you... Oh no! How could this be?")); - sleep 3000; - unitkill 'BossID; + sleep(3000); + unitkill('BossID); end; OnEnd: - hideoffnpc instance_npcname("Voice of Princess Tiara"); - hideoffnpc instance_npcname("Voice of Sakray"); - hideoffnpc instance_npcname("Thanatos Magic Trace"); + hideoffnpc(instance_npcname("Voice of Princess Tiara")); + hideoffnpc(instance_npcname("Voice of Sakray")); + hideoffnpc(instance_npcname("Thanatos Magic Trace")); npctalk(_("What can I do for you?"), instance_npcname("Voice of Princess Tiara")); - sleep 3000; + sleep(3000); npctalk(_("I will always stand by you. Please reset beside me."), instance_npcname("Voice of Sakray")); - sleep 3000; + sleep(3000); npctalk(_("Your soul is mine until you find the blood that satisfies me.."), instance_npcname("Thanatos Magic Trace")); - sleep 3000; + sleep(3000); npctalk(_("Reset in the shadow with me."), instance_npcname("Voice of Sakray")); - sleep 3000; + sleep(3000); npctalk(_("In the dark forever..."), instance_npcname("Voice of Sakray")); - sleep 3000; + sleep(3000); mapannounce(instance_mapname("1@spa"), _("It is time to leave the Ghost Palace."), bc_map, C_YELLOW); - enablenpc instance_npcname("King#gpend"); - enablenpc instance_npcname("#gp3warp"); - hideonnpc instance_npcname("Voice of Princess Tiara"); - hideonnpc instance_npcname("Voice of Sakray"); - hideonnpc instance_npcname("Thanatos Magic Trace"); + enablenpc(instance_npcname("King#gpend")); + enablenpc(instance_npcname("#gp3warp")); + hideonnpc(instance_npcname("Voice of Princess Tiara")); + hideonnpc(instance_npcname("Voice of Sakray")); + hideonnpc(instance_npcname("Thanatos Magic Trace")); end; OnInstanceInit: - disablenpc instance_npcname("Lurid Royal Guard#gp5"); - disablenpc instance_npcname("Tiara Princess#gp5"); - disablenpc instance_npcname("Thanatos Magic Trace#gp5"); - disablenpc instance_npcname("Sakray#gp5"); - disablenpc instance_npcname("King#gpend"); - hideonnpc instance_npcname("Voice of Princess Tiara"); - hideonnpc instance_npcname("Voice of Sakray"); - hideonnpc instance_npcname("Thanatos Magic Trace"); + disablenpc(instance_npcname("Lurid Royal Guard#gp5")); + disablenpc(instance_npcname("Tiara Princess#gp5")); + disablenpc(instance_npcname("Thanatos Magic Trace#gp5")); + disablenpc(instance_npcname("Sakray#gp5")); + disablenpc(instance_npcname("King#gpend")); + hideonnpc(instance_npcname("Voice of Princess Tiara")); + hideonnpc(instance_npcname("Voice of Sakray")); + hideonnpc(instance_npcname("Thanatos Magic Trace")); 'gp5 = 0; end; } @@ -682,34 +684,34 @@ OnInstanceInit: mes("[King]"); mes("Hey there, are you alive?\r" "I did not expect to meet someone alive"); - next; + next(); mes("[King]"); mes("Do you possibly have ^009900Gray Piece^000000?\r" "Can you give it to me?\r" "The old memory of faithful royal guard,\r" "the memory of everyone he loved becomes broken pieces and are contained inside of them."); - next; + next(); mes("[King]"); mes("Will you give ^009900Gray Piece^000000 to me?\r" "The guilt is eating my soul.\r" "My soul is stuck in ghost palace."); - next; + next(); mes("[King]"); mes("I am collecting Sakray's abandoned memories from these shards."); - next; + next(); mes("[King]"); mes("If you give any Gray Shards to me, I can make equipment for you."); - next; + next(); mes("[King]"); mes("The cursed knight...\r" "Please help me save the soul of Sakray."); - next; + next(); setarray(.@items_list, - Thanos_Sword, Thanos_Great_Sword, Thanos_Spear, Thanos_Long_Spear, Thanos_Staff, Thanos_Rod, Thanos_Bow, - Thanos_Dagger, Thanos_Katar, Thanos_Knuckle, Thanos_Hammer, Thanos_Axe, Thanos_Violin, Thanos_Whip, Shield_Of_Gray, - Armor_Of_Gray, Gray_Robe, Cloak_Of_Gray, Boots_Of_Gray, Gray_Helmet); + Thanos_Sword, Thanos_Great_Sword, Thanos_Spear, Thanos_Long_Spear, Thanos_Staff, Thanos_Rod, Thanos_Bow, + Thanos_Dagger, Thanos_Katar, Thanos_Knuckle, Thanos_Hammer, Thanos_Axe, Thanos_Violin, Thanos_Whip, Shield_Of_Gray, + Armor_Of_Gray, Gray_Robe, Cloak_Of_Gray, Boots_Of_Gray, Gray_Helmet); - setarray .@cost, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 100, 100, 100, 100, 100, 100; + setarray(.@cost, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 100, 100, 100, 100, 100, 100); .@menulist$ = ""; for (.@i = 0; .@i < getarraysize(.@items_list); ++.@i) .@menulist$ += getitemname(.@items_list[.@i])+":"; @@ -721,19 +723,19 @@ OnInstanceInit: "I believe collecting Gray Shards is the only method to save him."); close(); } - next; + next(); mes("[King]"); mesf("to make a ^FF0000%s^000000 \r" "I need %d ^009900Gray Shard^000000", getitemname(.@items_list[.@choice]), .@cost[.@choice]); - switch (select("Cancel", "hand over "+.@cost[.@choice]+" Gray Shard.")) { + switch (select("Cancel", sprintf(_$("hand over %d Gray Shard."), .@cost[.@choice]))) { case 1: - next; + next(); mes("[King]"); mes("Someday, Sakray will get out of curse for sure. I believe"); - next; + next(); break; case 2: - next; + next(); if (countitem(Gray_Shard) < .@cost[.@choice]) { mes("[King]"); mes("You don't have enough Gray Shards."); @@ -743,20 +745,20 @@ OnInstanceInit: mes("[King]"); mesf("I will make a ^FF0000%s^000000 \r" "with %d ^009900Gray Shard^000000", getitemname(.@items_list[.@choice]), .@cost[.@choice]); - next; + next(); mes("[King]"); mes("You see a light through the folded hands of the king and it gradually takes on a shape."); - next; + next(); mes("[King]"); mesf("All right, it is done.\r" "Take this ^FF0000%s.^000000\r" "Use it to confront Sakray and Thanatos.", getitemname(.@items_list[.@choice])); - next; + next(); mes("[King]"); mes("The power requires a sacrifice.\r" "Please be careful..."); delitem(Gray_Shard, .@cost[.@choice]); - getitem .@items_list[.@choice], 1; + getitem(.@items_list[.@choice], 1); close(); } } @@ -766,27 +768,33 @@ OnInstanceInit: 1@spa,198,201,1 script Lurid Royal Guard#gp1 4_M_SAKRAYROYAL,{ end; } + 1@spa,197,217,0 warp #gp1warp 1,1,1@spa,114,120 // 2nd floor npc's 1@spa,135,125,3 script Tiara Princess#gp2 4_F_MAYSEL,{ end; } + 1@spa,117,137,0 warp #gp2warp 1,1,1@spa,60,43 // 3rd floor npc's 1@spa,30,58,5 script Lurid Royal Guard#gp3 4_M_SAKRAY_TIED,{ end; } + 1@spa,28,52,0 script Captain of the Guard#gp3 4_M_KY_KNT,{ end; } + 1@spa,30,52,0 script Soldier#gp3_1 4_M_KY_SOLD,{ end; } + 1@spa,34,53,1 script Soldier#gp3_2 4_M_CRU_SOLD,{ end; } + 1@spa,25,53,0 script Soldier#gp3_3 4_M_CRU_SOLD,{ end; } @@ -795,43 +803,54 @@ OnInstanceInit: 1@spa,201,198,1 script Soldier's Corpse#gp4_1 4_M_DIEMAN,{ end; } + 1@spa,191,207,0 script Soldier's Corpse#gp4_2 4_M_DIEMAN,{ end; } + 1@spa,206,209,0 script Soldier's Corpse#gp4_3 4_M_DIEMAN,{ end; } + 1@spa,189,193,0 script Soldier's Corpse#gp4_4 4_M_DIEMAN,{ end; } + 1@spa,211,194,4 script Captain's Corpse#gp4 4_M_LIEMAN,{ end; } + 1@spa,194,214,5 script King's Corpse#gp4 4_M_TRISTAN,{ end; } + 1@spa,197,218,5 script Visiting Prince#gp4 4_M_KNIGHT_SILVER,{ end; } + 1@spa,197,218,0 script Thanatos Magic Trace#gp4 HIDDEN_WARP_NPC,{ end; } + 1@spa,178,186,0 warp #gp4warp 1,1,1@spa,30,57 // 5th floor npc's 1@spa,60,43,3 script Tiara Princess#gp5 4_F_MAYSEL,{ end; } + 1@spa,40,44,0 script Thanatos Magic Trace#gp5 HIDDEN_WARP_NPC,{ end; } + 1@spa,40,46,0 script Voice of Princess Tiara CLEAR_NPC,{ end; } + 1@spa,42,43,0 script Voice of Sakray CLEAR_NPC,{ end; } + 1@spa,40,41,0 script Thanatos Magic Trace CLEAR_NPC,{ end; } - diff --git a/npc/re/instances/octopus_cave.txt b/npc/re/instances/octopus_cave.txt index b134742c9..e4d8d4357 100644 --- a/npc/re/instances/octopus_cave.txt +++ b/npc/re/instances/octopus_cave.txt @@ -37,51 +37,52 @@ mal_dun01,151,235,5 script Starfish 4_ASTER,{ .@party_id = getcharid(CHAR_ID_PARTY); - .@md_name$ = "Octopus Cave"; + .@md_name$ = _("Octopus Cave"); if (!.@party_id) { mes("[Starfish]"); mes("You alone is powerless, hehe! Better get someone to help you out. Make a party, and come back later."); - close; + close(); } if (getcharid(CHAR_ID_CHAR) != getpartyleader(.@party_id, 2)) { mes("[Starfish]"); mes("Where is your leader, hehe. I don't talk to some random people. Bring your boss to me."); - close; + close(); } mes("[Starfish]"); mes("I am guarding here, hehe! It is just roughly blocked for now. But someday this cave must be sealed forever, hehe!"); - next; - while(1) { + next(); + while (true) { switch (select("Ask what's going on.", "Ask to open the gate.", "Go to other location.")) { case 1: mes("[Starfish]"); mes("Lately, our Starfish lady is suffering with some issues, ooh ooh. Something bad happen in this peaceful place, hehe!"); - next; + next(); mes("[Starfish]"); mes("Weird looking limbs came out from the hole there, tried to kidnap our lady Starfish. Ooh Ooh."); - next; + next(); mes("[Starfish]"); mes("It seems those limbs belong to that ugly octopus. That monster should be taken care of,\r" "but it's hard for ourselves only to make it happen, hehe."); - next; + next(); mes("[Starfish]"); mes("I want to find someone special, and ask to punish this ugly octopus.\r" "I hope this octopus won't ever harass our lady, hehe."); - next; + next(); mes("[Starfish]"); mes("Go catch that octopus and stick it to this pick. If you bring back the pick,\r" "I will open this gate for a while. You should challenge if you are interested, hehe."); - next; + next(); break; case 2: .@playtime = questprogress(4197, PLAYTIME); if (.@playtime == 1) { mes("[Starfish]"); mes("Octopus is not around now, hehe. Please come back later."); - close; + close(); } - if (.@playtime == 2) erasequest 4197; + if (.@playtime == 2) + erasequest(4197); if (countitem(Octopus_Hunt_Stick)) { .@instance = instance_create(.@md_name$, .@party_id); if (.@instance < 0) { @@ -90,12 +91,12 @@ mal_dun01,151,235,5 script Starfish 4_ASTER,{ mesf("Party leader is... %s.", strcharinfo(PC_NAME)); mesf("^0000FF%s^000000, I cannot open now, hehe.", .@md_name$); mes("Now is not the time, please wait."); - close; + close(); } if (instance_attachmap("1@cash", .@instance) == "") { mesf("^0000FF%s^000000 - Reservation Failed!", .@md_name$); instance_destroy(.@instance); - close; + close(); } instance_set_timeout(3600, 300, .@instance); instance_init(.@instance); @@ -103,23 +104,23 @@ mal_dun01,151,235,5 script Starfish 4_ASTER,{ mes("[Starfish]"); mesf("I will open the gate for a while to ^0000FF%s^000000.", .@md_name$); mes("Please catch that pervert octopus, and come back with it sticked to the pick, hehe."); - close; + close(); } mes("[Starfish]"); mes("Prepare a pick first, so you can thread that octopus with that pick.\r" "Then, I will let you in for a while, hehe."); - close; + close(); case 3: mes("[Starfish]"); mes("This is not a good location, check someplace else."); - close; + close(); } } } mal_dun01,153,237,5 script Weird Entrance CLEAR_NPC,{ mes("There is a strange entrance blocked roughly with some boards."); - next; + next(); switch (select("Go in.", "Stop.")) { case 1: if (countitem(Octopus_Hunt_Stick)) { @@ -127,25 +128,26 @@ mal_dun01,153,237,5 script Weird Entrance CLEAR_NPC,{ if (questprogress(4197, PLAYTIME) == 1) { mes("[Starfish]"); mes("Ah, now is not the time... Would you come back later? Hehe."); - close; + close(); } mes("[Starfish]"); mes("Shhh... Weird aura is coming from that entrance. Big trouble is waiting, if you go in now."); - close; + close(); } mapannounce("mal_dun01", sprintf(_$("%s party's %s member started to hunt the Octopus!"), getpartyname(getcharid(CHAR_ID_PARTY)), strcharinfo(PC_NAME)), bc_map, C_SPRINGGREEN); - if (!questprogress(4197)) setquest 4197; - warp "1@cash", 199, 99; + if (!questprogress(4197)) + setquest(4197); + warp("1@cash", 199, 99); end; } mes("[Starfish]"); mes("You should definitely prepare hunting stick if you want to punish the Octopus. Or I will not let you in! Hehe."); - close; + close(); case 2: mes("[Starfish]"); mes("Yes Yes, you better quit."); - close; + close(); } } @@ -153,25 +155,25 @@ mal_dun01,153,237,5 script Weird Entrance CLEAR_NPC,{ 1@cash,199,99,0 script oct_enter HIDDEN_WARP_NPC,4,4,{ end; OnTouch: - donpcevent instance_npcname("oct_enter_broad")+"::OnEnable"; - specialeffect EF_BASH; - disablenpc instance_npcname("oct_enter"); + donpcevent(instance_npcname("oct_enter_broad")+"::OnEnable"); + specialeffect(EF_BASH); + disablenpc(instance_npcname("oct_enter")); end; } 1@cash,1,1,0 script oct_enter_broad FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("oct_enter_broad")+"::OnDisable"; + donpcevent(instance_npcname("oct_enter_broad")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("oct_enter_broad"); - donpcevent instance_npcname("oct_foot_4")+"::OnEnable"; - donpcevent instance_npcname("oct_mob_con")+"::OnEnable"; - initnpctimer; + enablenpc(instance_npcname("oct_enter_broad")); + donpcevent(instance_npcname("oct_foot_4")+"::OnEnable"); + donpcevent(instance_npcname("oct_mob_con")+"::OnEnable"); + initnpctimer(); end; OnDisable: - disablenpc instance_npcname("oct_enter_broad"); + disablenpc(instance_npcname("oct_enter_broad")); end; OnTimer1000: mapannounce(instance_mapname("1@cash"), _("Pervert Octopus : How dare you to come inside of my place!"), bc_map, C_YELLOW); @@ -181,22 +183,22 @@ OnTimer4000: end; OnTimer7000: mapannounce(instance_mapname("1@cash"), _("Pervert Octopus : My juniors~ There is your toy! Play with it~ kakaka"), bc_map, C_YELLOW); - stopnpctimer; - donpcevent instance_npcname("oct_enter_broad")+"::OnDisable"; + stopnpctimer(); + donpcevent(instance_npcname("oct_enter_broad")+"::OnDisable"); end; } 1@cash,3,3,0 script oct_foot_4 FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("oct_foot_4")+"::OnDisable"; + donpcevent(instance_npcname("oct_foot_4")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("oct_foot_4"); - donpcevent instance_npcname("oct_foot1")+"::OnEnable"; - donpcevent instance_npcname("oct_foot2")+"::OnEnable"; - donpcevent instance_npcname("oct_foot3")+"::OnEnable"; - donpcevent instance_npcname("oct_foot4")+"::OnEnable"; + enablenpc(instance_npcname("oct_foot_4")); + donpcevent(instance_npcname("oct_foot1")+"::OnEnable"); + donpcevent(instance_npcname("oct_foot2")+"::OnEnable"); + donpcevent(instance_npcname("oct_foot3")+"::OnEnable"); + donpcevent(instance_npcname("oct_foot4")+"::OnEnable"); .@map$ = instance_mapname("1@cash"); monster(.@map$, 20, 114, _("Octopus Leg#1"), MD_OCTOPUS_LEG, 1, instance_npcname("oct_foot_4")+"::OnMyMobDead"); monster(.@map$, 88, 190, _("Octopus Leg#2"), MD_OCTOPUS_LEG, 1, instance_npcname("oct_foot_4")+"::OnMyMobDead"); @@ -204,15 +206,15 @@ OnEnable: monster(.@map$, 372, 131, _("Octopus Leg#4"), MD_OCTOPUS_LEG, 1, instance_npcname("oct_foot_4")+"::OnMyMobDead"); end; OnDisable: - disablenpc instance_npcname("oct_foot_4"); + disablenpc(instance_npcname("oct_foot_4")); end; OnMyMobDead: .@map$ = instance_mapname("1@cash"); - if (mobcount(.@map$,instance_npcname("oct_foot_4")+"::OnMyMobDead") < 1) { - donpcevent instance_npcname("oct_boss_con")+"::OnEnable"; + if (mobcount(.@map$, instance_npcname("oct_foot_4")+"::OnMyMobDead") < 1) { + donpcevent(instance_npcname("oct_boss_con")+"::OnEnable"); mapannounce(.@map$, _("Hey you!! I'll personally take care of you all! Let's bring it on!"), bc_map, C_SPRINGGREEN); - enablenpc instance_npcname("oct_boss_warp"); - instance_warpall .@map$, 199, 99; + enablenpc(instance_npcname("oct_boss_warp")); + instance_warpall(.@map$, 199, 99); end; } mapannounce(.@map$, _("Arrgg!! That hurts!!! I need another strategy..."), bc_map, C_SPRINGGREEN); @@ -222,12 +224,12 @@ OnMyMobDead: 1@cash,20,114,0 script oct_foot1 HIDDEN_WARP_NPC,6,6,{ end; OnInstanceInit: - donpcevent instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable"; + donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname(strnpcinfo(NPC_NAME)); + enablenpc(instance_npcname(strnpcinfo(NPC_NAME))); .@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"; - .@i = atoi(charat(strnpcinfo(NPC_NAME),8)); + .@i = atoi(charat(strnpcinfo(NPC_NAME), 8)); .@map$ = instance_mapname("1@cash"); switch (.@i) { case 1: @@ -249,7 +251,7 @@ OnEnable: areamonster(.@map$, 123, 93, 127, 97, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); areamonster(.@map$, 113, 90, 115, 92, _("Octopus's Henchman"), MD_OCTOPUS, 2, .@label$); areamonster(.@map$, 103, 89, 105, 91, _("Octopus's Henchman"), MD_OCTOPUS, 2, .@label$); - areamonster(.@map$, 89, 90, 91,92, _("Octopus's Henchman"), MD_OCTOPUS, 2, .@label$); + areamonster(.@map$, 89, 90, 91, 92, _("Octopus's Henchman"), MD_OCTOPUS, 2, .@label$); areamonster(.@map$, 74, 104, 76, 106, _("Octopus's Henchman"), MD_OCTOPUS, 2, .@label$); areamonster(.@map$, 74, 120, 76, 122, _("Octopus's Henchman"), MD_OCTOPUS, 2, .@label$); areamonster(.@map$, 83, 131, 87, 135, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); @@ -285,56 +287,57 @@ OnEnable: } end; OnDisable: - killmonster instance_mapname("1@cash"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"; // Not in official script. - disablenpc instance_npcname(strnpcinfo(NPC_NAME)); + killmonster(instance_mapname("1@cash"), instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); // Not in official script. + disablenpc(instance_npcname(strnpcinfo(NPC_NAME))); end; OnTouch: - if (getd("."+strnpcinfo(NPC_NAME)+instance_id())) end; - setd "."+strnpcinfo(NPC_NAME)+instance_id(),1; - hideonnpc instance_npcname(strnpcinfo(NPC_NAME)); + if (getd("."+strnpcinfo(NPC_NAME)+instance_id())) + end; + setd("."+strnpcinfo(NPC_NAME)+instance_id(), 1); + hideonnpc(instance_npcname(strnpcinfo(NPC_NAME))); mapannounce(instance_mapname("1@cash"), _("Come out all my babies and help me out!"), bc_map, C_YELLOW); - initnpctimer; + initnpctimer(); end; OnTimer5000: .@map$ = instance_mapname("1@cash"); mapannounce(.@map$, _("Let's give them a lesson!"), bc_map, C_YELLOW); .@label$ = instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"; - .@i = atoi(charat(strnpcinfo(NPC_NAME),8)); + .@i = atoi(charat(strnpcinfo(NPC_NAME), 8)); switch (.@i) { case 1: - areamonster(.@map$, 18, 112, 22,116, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); - areamonster(.@map$, 18, 112, 22,116, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 18, 112, 22, 116, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 18, 112, 22, 116, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); break; case 2: - areamonster(.@map$, 86, 188, 90,192, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); - areamonster(.@map$, 96, 98, 100,102, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 86, 188, 90, 192, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 96, 98, 100, 102, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); break; case 3: - areamonster(.@map$, 305, 213, 309,217, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); - areamonster(.@map$, 305, 213, 309,217, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 305, 213, 309, 217, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 305, 213, 309, 217, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); break; case 4: - areamonster(.@map$, 370, 129, 374,133, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); - areamonster(.@map$, 370, 129, 374,133, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 370, 129, 374, 133, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); + areamonster(.@map$, 370, 129, 374, 133, _("Octopus's Henchman"), MD_OCTOPUS, 3, .@label$); break; } end; OnTimer30000: - setd "."+strnpcinfo(NPC_NAME)+instance_id(),0; - stopnpctimer; - .@i = atoi(charat(strnpcinfo(NPC_NAME),8)); - donpcevent instance_npcname("oct_foot_exit"+.@i)+"::OnEnable"; - donpcevent instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable"; + setd("."+strnpcinfo(NPC_NAME)+instance_id(), 0); + stopnpctimer(); + .@i = atoi(charat(strnpcinfo(NPC_NAME), 8)); + donpcevent(instance_npcname("oct_foot_exit"+.@i)+"::OnEnable"); + donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable"); end; OnMyMobDead: .@map$ = instance_mapname("1@cash"); - if (mobcount(.@map$,instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") < 1) { + if (mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead") < 1) { mapannounce(.@map$, _("You hurt my babies!!? You'll have to pay for this!!!"), bc_map, C_SPRINGGREEN); - setd "."+strnpcinfo(NPC_NAME)+instance_id(),0; - stopnpctimer; - .@i = atoi(charat(strnpcinfo(NPC_NAME),8)); - donpcevent instance_npcname("oct_foot_exit"+.@i)+"::OnEnable"; - donpcevent instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable"; + setd("."+strnpcinfo(NPC_NAME)+instance_id(), 0); + stopnpctimer(); + .@i = atoi(charat(strnpcinfo(NPC_NAME), 8)); + donpcevent(instance_npcname("oct_foot_exit"+.@i)+"::OnEnable"); + donpcevent(instance_npcname(strnpcinfo(NPC_NAME))+"::OnDisable"); end; } end; @@ -346,13 +349,13 @@ OnMyMobDead: 1@cash,16,117,0 script oct_foot_exit1 WARPNPC,2,2,{ end; OnInstanceInit: - disablenpc instance_npcname(strnpcinfo(NPC_NAME)); + disablenpc(instance_npcname(strnpcinfo(NPC_NAME))); end; OnEnable: - enablenpc instance_npcname(strnpcinfo(NPC_NAME)); + enablenpc(instance_npcname(strnpcinfo(NPC_NAME))); end; OnTouch: - warp instance_mapname("1@cash"), 198, 99; + warp(instance_mapname("1@cash"), 198, 99); end; } 1@cash,77,193,0 duplicate(oct_foot_exit1) oct_foot_exit2 WARPNPC,2,2 @@ -362,11 +365,11 @@ OnTouch: 1@cash,15,15,0 script oct_mob_con FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("oct_mob_con")+"::OnDisable"; + donpcevent(instance_npcname("oct_mob_con")+"::OnDisable"); end; OnEnable: .@map$ = instance_mapname("1@cash"); - enablenpc instance_npcname("oct_mob_con"); + enablenpc(instance_npcname("oct_mob_con")); monster(.@map$, 32, 94, _("Hydra"), HYDRA, 1); monster(.@map$, 41, 101, _("Hydra"), HYDRA, 1); monster(.@map$, 35, 78, _("Hydra"), HYDRA, 1); @@ -410,21 +413,21 @@ OnEnable: areamonster(.@map$, 292, 97, 312, 117, _("Stapo"), STAPO, 1); areamonster(.@map$, 355, 64, 375, 84, _("Stapo"), STAPO, 1); areamonster(.@map$, 317, 17, 337, 37, _("Stapo"), STAPO, 1); - donpcevent instance_npcname("oct_backattack1")+"::OnEnable"; - donpcevent instance_npcname("oct_backattack2")+"::OnEnable"; - donpcevent instance_npcname("oct_backattack3")+"::OnEnable"; - donpcevent instance_npcname("oct_backattack4")+"::OnEnable"; - donpcevent instance_npcname("oct_mob_con")+"::OnDisable"; + donpcevent(instance_npcname("oct_backattack1")+"::OnEnable"); + donpcevent(instance_npcname("oct_backattack2")+"::OnEnable"); + donpcevent(instance_npcname("oct_backattack3")+"::OnEnable"); + donpcevent(instance_npcname("oct_backattack4")+"::OnEnable"); + donpcevent(instance_npcname("oct_mob_con")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("oct_mob_con"); + disablenpc(instance_npcname("oct_mob_con")); end; } 1@cash,45,53,0 script oct_backattack1 HIDDEN_WARP_NPC,3,3,{ end; OnInstanceInit: - disablenpc instance_npcname("oct_backattack1"); + disablenpc(instance_npcname("oct_backattack1")); end; OnTouch: .@map$ = instance_mapname("1@cash"); @@ -436,27 +439,28 @@ OnTouch: monster(.@map$, 49, 50, _("Hydra"), HYDRA, 1); monster(.@map$, 41, 53, _("Octopus's Henchman"), MD_OCTOPUS, 1); mapannounce(.@map$, _("Don't let them break through, stop them!!!"), bc_map, C_SPRINGGREEN); - specialeffect EF_BASH; - disablenpc instance_npcname("oct_backattack1"); + specialeffect(EF_BASH); + disablenpc(instance_npcname("oct_backattack1")); end; OnEnable: - enablenpc instance_npcname("oct_backattack1"); + enablenpc(instance_npcname("oct_backattack1")); end; } 1@cash,78,99,0 script oct_backattack2 HIDDEN_WARP_NPC,3,3,{ end; OnInstanceInit: - disablenpc instance_npcname("oct_backattack2"); + disablenpc(instance_npcname("oct_backattack2")); end; OnTouch: - if (getd("."+instance_id())) end; - setd "."+instance_id(),1; - initnpctimer; + if (getd("."+instance_id())) + end; + setd("."+instance_id(), 1); + initnpctimer(); .@map$ = instance_mapname("1@cash"); monster(.@map$, 71, 105, _("Octopus's Henchman"), MD_OCTOPUS, 1); mapannounce(.@map$, _("Headquarters are empty, GO!!!"), bc_map, C_SPRINGGREEN); - hideonnpc instance_npcname("oct_backattack2"); + hideonnpc(instance_npcname("oct_backattack2")); end; OnTimer2000: .@map$ = instance_mapname("1@cash"); @@ -477,21 +481,22 @@ OnTimer8000: .@map$ = instance_mapname("1@cash"); monster(.@map$, 71, 105, _("Octopus's Henchman"), MD_OCTOPUS, 1); mapannounce(.@map$, _("There is no time to lose, hurry up!!!"), bc_map, C_SPRINGGREEN); - stopnpctimer; + stopnpctimer(); end; OnEnable: - enablenpc instance_npcname("oct_backattack2"); + enablenpc(instance_npcname("oct_backattack2")); end; } 1@cash,299,144,0 script oct_backattack3 HIDDEN_WARP_NPC,3,3,{ end; OnInstanceInit: - disablenpc instance_npcname("oct_backattack3"); + disablenpc(instance_npcname("oct_backattack3")); end; OnTouch: - if (getd("."+instance_id())) end; - setd "."+instance_id(),1; + if (getd("."+instance_id())) + end; + setd("."+instance_id(), 1); .@map$ = instance_mapname("1@cash"); monster(.@map$, 293, 153, _("Octopus's Henchman"), MD_OCTOPUS, 1); monster(.@map$, 294, 152, _("Octopus's Henchman"), MD_OCTOPUS, 1); @@ -499,26 +504,27 @@ OnTouch: monster(.@map$, 293, 151, _("Octopus's Henchman"), MD_OCTOPUS, 1); monster(.@map$, 293, 152, _("Octopus's Henchman ?"), MD_MARSE, 1); mapannounce(.@map$, _("Kakaka! Suprised??!!"), bc_map, C_SPRINGGREEN); - initnpctimer; - hideonnpc instance_npcname("oct_backattack3"); + initnpctimer(); + hideonnpc(instance_npcname("oct_backattack3")); end; OnTimer5000: mapannounce(instance_mapname("1@cash"), _("... Looks like we have a spy among us."), bc_map, C_SPRINGGREEN); - stopnpctimer; + stopnpctimer(); end; OnEnable: - enablenpc instance_npcname("oct_backattack3"); + enablenpc(instance_npcname("oct_backattack3")); end; } 1@cash,336,36,0 script oct_backattack4 HIDDEN_WARP_NPC,3,3,{ end; OnInstanceInit: - disablenpc instance_npcname("oct_backattack4"); + disablenpc(instance_npcname("oct_backattack4")); end; OnTouch: - if (getd("."+instance_id())) end; - setd "."+instance_id(),1; + if (getd("."+instance_id())) + end; + setd("."+instance_id(), 1); .@map$ = instance_mapname("1@cash"); monster(.@map$, 332, 37, _("Octopus's Henchman"), MD_OCTOPUS, 1); monster(.@map$, 332, 36, _("Octopus's Henchman"), MD_OCTOPUS, 1); @@ -534,34 +540,34 @@ OnTouch: monster(.@map$, 259, 40, _("Mercenary Squid"), MD_MARSE, 1); monster(.@map$, 261, 40, _("Mercenary Squid"), MD_MARSE, 1); mapannounce(.@map$, _("What a successful pincer tactic! The enemy is strong! Let's not lose yourselves! Anyway, where are all the mercenaries??"), bc_map, C_SPRINGGREEN); - initnpctimer; - hideonnpc instance_npcname("oct_backattack4"); + initnpctimer(); + hideonnpc(instance_npcname("oct_backattack4")); end; OnTimer5000: mapannounce(instance_mapname("1@cash"), _("Mercenary Squid : eh...eh... wrong direction. No enemies are shown in this direction."), bc_map, C_SPRINGGREEN); end; OnTimer7000: mapannounce(instance_mapname("1@cash"), _("Pervert Octopus : Fools! Can't you read the map??!! Useless!!"), bc_map, C_SPRINGGREEN); - stopnpctimer; + stopnpctimer(); end; OnEnable: - enablenpc instance_npcname("oct_backattack4"); + enablenpc(instance_npcname("oct_backattack4")); end; } 1@cash,2,2,0 script oct_boss_con FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("oct_boss_con")+"::OnDisable"; + donpcevent(instance_npcname("oct_boss_con")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("oct_boss_con"); + disablenpc(instance_npcname("oct_boss_con")); end; OnEnable: - enablenpc instance_npcname("oct_boss_con"); - donpcevent instance_npcname("oct_boss_foot")+"::OnEnable"; + enablenpc(instance_npcname("oct_boss_con")); + donpcevent(instance_npcname("oct_boss_foot")+"::OnEnable"); monster(instance_mapname("1@cash"), 199, 188, _("Disgusting Octopus"), MD_GIANT_OCTOPUS, 1, instance_npcname("oct_boss_con")+"::OnMyMobDead"); - initnpctimer; + initnpctimer(); end; OnTimer7000: callsub OnAnnounce, @@ -604,21 +610,21 @@ OnTimer49000: "errrrrrrrrrrrrrrrrrrrrrrrr... Cough! Cough!", "Disgusting Octopus : Violence cannot be justified in any case.", "This is my place!!!"; - stopnpctimer; - initnpctimer; + stopnpctimer(); + initnpctimer(); end; OnAnnounce: mapannounce(instance_mapname("1@cash"), sprintf(_$("Disgusting Octopus : %s"), getarg(rand(3))), bc_map, C_YELLOW); return; OnMyMobDead: .@map$ = instance_mapname("1@cash"); - if (mobcount(.@map$,instance_npcname("oct_boss_con")+"::OnMyMobDead") < 1) { + if (mobcount(.@map$, instance_npcname("oct_boss_con")+"::OnMyMobDead") < 1) { mapannounce(.@map$, _("Disgusting Octopus : That's it for the today! Next time, I will play with you badly!"), bc_map, C_YELLOW); - enablenpc instance_npcname("oct_exit_1"); - enablenpc instance_npcname("oct_exit_2"); - donpcevent instance_npcname("oct_boss_foot")+"::OnDisable"; - stopnpctimer; - donpcevent instance_npcname("oct_boss_con")+"::OnDisable"; + enablenpc(instance_npcname("oct_exit_1")); + enablenpc(instance_npcname("oct_exit_2")); + donpcevent(instance_npcname("oct_boss_foot")+"::OnDisable"); + stopnpctimer(); + donpcevent(instance_npcname("oct_boss_con")+"::OnDisable"); end; } end; @@ -627,16 +633,16 @@ OnMyMobDead: 1@cash,4,4,0 script oct_boss_foot FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("oct_boss_foot")+"::OnDisable"; + donpcevent(instance_npcname("oct_boss_foot")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("oct_boss_foot"); - initnpctimer; + enablenpc(instance_npcname("oct_boss_foot")); + initnpctimer(); end; OnCall: .@map$ = instance_mapname("1@cash"); - if (mobcount(.@map$,instance_npcname("oct_boss_foot")+"::OnMyMobDead") < 100) { - switch(rand(2)) { + if (mobcount(.@map$, instance_npcname("oct_boss_foot")+"::OnMyMobDead") < 100) { + switch (rand(2)) { case 0: mapannounce(.@map$, _("Disgusting Octopus : Do you know how many legs octopus have? It doesn't matter, I have unlimited legs!!"), bc_map, C_YELLOW); areamonster(.@map$, 192, 181, 206, 195, _("Octopus Leg"), MD_OCTOPUS_LEG, 1, instance_npcname("oct_boss_foot")+"::OnMyMobDead"); @@ -647,16 +653,16 @@ OnCall: break; } } - initnpctimer; + initnpctimer(); end; OnTimer10000: - stopnpctimer; - donpcevent instance_npcname("oct_boss_foot")+"::OnCall"; + stopnpctimer(); + donpcevent(instance_npcname("oct_boss_foot")+"::OnCall"); end; OnDisable: - stopnpctimer; - killmonster instance_mapname("1@cash"), instance_npcname("oct_boss_foot")+"::OnMyMobDead"; // Not in official script. - disablenpc instance_npcname("oct_boss_foot"); + stopnpctimer(); + killmonster(instance_mapname("1@cash"), instance_npcname("oct_boss_foot")+"::OnMyMobDead"); // Not in official script. + disablenpc(instance_npcname("oct_boss_foot")); end; OnMyMobDead: end; @@ -665,24 +671,24 @@ OnMyMobDead: 1@cash,198,116,0 script oct_boss_warp WARPNPC,2,2,{ end; OnInstanceInit: - disablenpc instance_npcname("oct_boss_warp"); + disablenpc(instance_npcname("oct_boss_warp")); end; OnTouch: - warp instance_mapname("1@cash"), 210, 172; + warp(instance_mapname("1@cash"), 210, 172); end; } 1@cash,190,208,0 script oct_exit_1 WARPNPC,2,2,{ end; OnInstanceInit: - disablenpc instance_npcname(strnpcinfo(NPC_NAME)); + disablenpc(instance_npcname(strnpcinfo(NPC_NAME))); end; OnTouch: mes("Do you want to go out from the octopus dungeon?"); - next; + next(); if (select("No!", "Yes!") == 2) - warp "mal_dun01", 153, 233; - close; + warp("mal_dun01", 153, 233); + close(); } 1@cash,198,82,0 duplicate(oct_exit_1) oct_exit_2 WARPNPC,2,2 // This is never enabled in the official script. diff --git a/npc/re/instances/saras_memory.txt b/npc/re/instances/saras_memory.txt index 38b598d5b..c9a47534b 100644 --- a/npc/re/instances/saras_memory.txt +++ b/npc/re/instances/saras_memory.txt @@ -41,113 +41,113 @@ dali,130,107,5 script Leon the Adventurer#Sara 4_M_DST_GRAND,{ // instance CD check only at the Dimensional Device mes("[Leon the Adventurer]"); if (BaseLevel < 99) { - mes("You know... this place doesn't seem to be safe for you. Please returnto me once you have achieved LV. 99"); - close; + mes("You know... this place doesn't seem to be safe for you. Please return to me once you have achieved LV. 99"); + close(); } if (!questprogress(15003)) { if (!sarainstance) { // doing the instance for the 1st time mes("Wow! I thought I was the only one who knew about this place."); - next; + next(); mes("[Leon the Adventurer]"); mes("Excuse my rudeness! I am Pon de Leon, the famous adventurer!"); - next; + next(); mes("[Leon the Adventurer]"); mes("My friend calls me Leon the Lion! For my tough appearance and attitude. Plus I have quite a bite!"); - next; + next(); mes("[Leon the Adventurer]"); mes("You know, this is such a strange location..."); - next; + next(); mes("[Leon the Adventurer]"); mes("As you explore it you start to see cracks in space and time. Each one covered by a dimensional device."); - next; + next(); mes("[Leon the Adventurer]"); mes("For example, I think I have caught glimpses of Payon through the dimensional device closest to us.\r" "But it doesn't seem right. Almost like it is a little bit older then it should be."); - next; + next(); mes("[Leon the Adventurer]"); mes("I want to explore it, but with my old age and my knees I don't seem to be quite up to the task."); - next; + next(); mes("[Leon the Adventurer]"); mes("So, I would like to ask something of you."); - next; + next(); mes("[Leon the Adventurer]"); mes("Please venture through the dimensional device and report to me what you find within."); - next; + next(); mes("[Leon the Adventurer]"); mes("Though, I should warn you. It might be unstable. Make sure you enter the first chance you get."); - close2; - setquest 15003; + close2(); + setquest(15003); end; } else { mes("You wish to relive the past again?"); - next; - if (select("Yes","No") == 2) - close; + next(); + if (select("Yes", "No") == 2) + close(); mes("[Leon the Adventurer]"); mes("Please venture through the dimensional device and report to me what you find within."); - next; + next(); mes("[Leon the Adventurer]"); mes("Though, I should warn you. It might be unstable. Make sure you enter the first chance you get."); - setquest 15003; - close; + setquest(15003); + close(); } } if (questprogress(15003) == 1) { mes("I am not sure you have fully explored the crack in space and time yet. Perhaps you should look a bit further into it."); - next; + next(); if (!sarainstance) - close; + close(); switch (select("Okay", "Give up")) { case 1: mes("[Leon the Adventurer]"); mes("I am glad to hear that! Maybe someday you can be as brave as old Leon the Lion!"); - close; + close(); case 2: mes("[Leon the Adventurer]"); mes("Well.. I can't force you. Buf if you ever find your courage pelase talk to me again."); - erasequest 15003; - close; + erasequest(15003); + close(); } } if (questprogress(15003) == 2) { if (!sarainstance) { // 1st time reward and text mes("What did you see in there?!"); - next; + next(); mes("[Leon the Adventurer]"); mes("Hrumpf, Sara Irene?! She's one of the 12 Valkyries. I didn't know her story was that tragic...."); - next; + next(); mes("[Leon the Adventurer]"); mes("It seems that you caused a huge misunderstanding between her and her father."); - next; + next(); mes("[Leon the Adventurer]"); - mes("I would not blame yourself for what occured. Or all the blood that was spilled. It seems that the\r" + mes("I would not blame yourself for what occured. Or all the blood that was spilled. It seems that the\r" "events that day were fated to happen no matter who was there."); - next; + next(); mes("[Leon the Adventurer]"); mes("Please don't tell anyone about your time traveling adventure. We can't have anyone thinking you more\r" "important then old Leon. Plus they wouldn't believe such a story anyways."); - next; + next(); mes("[Leon the Adventurer]"); mes("I think that in about 20 hours after you last entered the rift will stable enough for you to transverse it again."); sarainstance = 1; - getexp 770000, 1000000; // reward first time + getexp(770000, 1000000); // reward first time } else { // 2nd time text mes("What did you see in there?! Was there anything new?"); - next; + next(); select("Nothing has changed from the last time."); mes("[Leon the Adventurer]"); mes("I am sorry to hear that... If..."); - next; + next(); mes("[Leon the Adventurer]"); mes("If you want to try again. I think that in about 20 hours after you last entered the rift will be stable enough\r" "for you to transverse it again."); - next; + next(); mes("[Leon the Adventurer]"); mes("You should rest up. Travelling Through time would make even Leon tired!"); - getexp 550000, 550000; // reward 2nd and following + getexp(550000, 550000); // reward 2nd and following } - erasequest 15003; - close; + erasequest(15003); + close(); } } @@ -155,29 +155,29 @@ dali,138,118,0 script Dimensional Device#dimen PORTAL,{ if (!questprogress(15003)) { mes("[Leon the Adventurer]"); mes("Before you go playing around with that. Why don't you come over here and talk to me?"); - close; + close(); } .@sara_time = questprogress(15002, PLAYTIME); if (.@sara_time == 1) { mes("[Leon the Adventurer]"); mes("I think that in about 20 hours after you last entered the rift will stable enough for you to\r" "transverse it again."); - close; + close(); } else if (.@sara_time == 2) { - erasequest 15002; + erasequest(15002); end; } else if (!.@sara_time) { .@party_id = getcharid(CHAR_ID_PARTY); .@p_name$ = getpartyname(.@party_id); - .@md_name$ = "Sara's Memory"; + .@md_name$ = _("Sara's Memory"); if (!instance_check_party(.@party_id)) { mes("[Leon the Adventurer]"); mes("Before you enter you need to organize a party! Don't know how? Type /organize PARTYNAMEHERE. You\r" "can use quotes to put spaces in a party name."); - close; + close(); } if (getcharid(CHAR_ID_CHAR) == getpartyleader(.@party_id, 2)) - .@menu1$ = "Boot up the dimensional device"; + .@menu1$ = _("Boot up the dimensional device"); else .@menu1$ = ""; switch (select(.@menu1$, "Use the dimensional device", "Cancel")) { @@ -189,30 +189,30 @@ dali,138,118,0 script Dimensional Device#dimen PORTAL,{ mesf("Party Name: %s", .@p_name$); mesf("Party Leader: %s", strcharinfo(PC_NAME)); mesf("^0000FF%s^000000 - Reservation Failed!", .@md_name$); - close; + close(); } if (instance_attachmap("1@sara", .@instance) == "") { mesf("^0000FF%s^000000 - Reservation Failed!", .@md_name$); instance_destroy(.@instance); - close; + close(); } instance_set_timeout(3600, 300, .@instance); instance_init(.@instance); mes("^FF0000The dimensional boots up cleanly. Use the device to enter the crack in space and time.^000000"); - close; + close(); case 2: if (has_instance("1@sara") == "") { mesf("The memorial dungeon ^0000FF%s^000000 does not exist.\r" "The party leader did not generate the dungeon yet.", .@md_name$); - close; + close(); } mapannounce("dali", sprintf(_$("%s, member of the party %s entered the instance %s."), strcharinfo(PC_NAME), .@p_name$, .@md_name$), bc_map, C_SPRINGGREEN); - setquest 15002; - warp "1@sara", 250, 155; + setquest(15002); + warp("1@sara", 250, 155); end; break; case 3: - close; + close(); } } } @@ -223,469 +223,468 @@ dali,138,118,0 script Dimensional Device#dimen PORTAL,{ mesf("[%s]", strcharinfo(PC_NAME)); mes("Where am I?"); unittalk(getcharid(CHAR_ID_ACCOUNT), _("Where am I?")); - next; - cutin "sara_9sara1.bmp", 2; + next(); + cutin("sara_9sara1.bmp", 2); mes("[A girl]"); mes("Hello! This is the village of Payon. You don't seem to be from around here..."); npctalk(_("A girl : Hello! This is the village of Payon. You don't seem to be from around here...")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("Are you from here? You don't seem to quite match the locals either."); unittalk(getcharid(CHAR_ID_ACCOUNT), _("Are you from here? You don't seem to quite match to locals either.")); - next; + next(); mes("[A girl]"); mes("Yes! I was born here! My name is Sara. Sara Irene!"); npctalk(_("A girl : Yes! I was born here! My name is Sara. Sara Irene!")); - next; + next(); mes("[Sara Irene]"); mes("My father is doyen of this village! I just take after my mother."); npctalk(_("My father is doyen of this village! I just take after my mother."), instance_npcname("Sara Irene#saratalk")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("Oh! I am sorry! Uh... Why are you standing out here all alone?"); unittalk(getcharid(CHAR_ID_ACCOUNT), _("Oh! I am sorry! Uh... Why are you standing out here all alone?")); - next; + next(); mes("[Sara Irene]"); mes("I am waiting for my father. He said that he will be here soon."); npctalk(_("I am waiting for my father. He said that he will be here soon."), instance_npcname("Sara Irene#saratalk")); - next; + next(); mes("^FF0000An older man exits the house. Sara's face brightens at the sight of him.^000000"); - donpcevent instance_npcname("Doyen Irene#sarains")+"::OnEnable"; - next; + donpcevent(instance_npcname("Doyen Irene#sarains")+"::OnEnable"); + next(); mes("[Sara Irene]"); mes("Hi daddy!"); npctalk(_("Hi daddy!"), instance_npcname("Sara Irene#saratalk")); - next; - cutin "sara_elder_irine1.bmp", 2; + next(); + cutin("sara_elder_irine1.bmp", 2); mes("[Doyen Irene]"); mes("Sweetheart you look so happy."); npctalk(_("Sweetheart you look so happy."), instance_npcname("Doyen Irene#sarains")); - next; - cutin "sara_9sara1.bmp", 2; + next(); + cutin("sara_9sara1.bmp", 2); mes("[Sara Irene]"); mes("You said you would come back soon! I waited for you and you lied!"); npctalk(_("You said you would come back soon! I waited for you and you lied!"), instance_npcname("Sara Irene#saratalk")); - next; - cutin "sara_elder_irine1.bmp", 2; + next(); + cutin("sara_elder_irine1.bmp", 2); mes("[Doyen Irene]"); mes("Sweetheart, I am sorry I made you wait so long. The meeting with the village elders took longer than expected."); npctalk(_("Sweetheart, I am sorry I made you wait so long. The meeting with the village elders took longer than expected."), instance_npcname("Doyen Irene#sarains")); - next; - cutin "sara_9sara1.bmp", 2; + next(); + cutin("sara_9sara1.bmp", 2); mes("[Sara Irene]"); mes("I hate those old fogeys."); npctalk(_("I hate those old fogeys."), instance_npcname("Sara Irene#saratalk")); - next; - cutin "sara_elder_irine1.bmp", 2; + next(); + cutin("sara_elder_irine1.bmp", 2); mes("[Doyen Irene]"); mes("Don't say that sweetheart... Who is this with you?"); npctalk(_("Don't say that sweetheart... Who is this with you?"), instance_npcname("Doyen Irene#sarains")); - next; + next(); mes("^FF0000Doyen Irene stares at you with fire in this eyes.^000000"); dispbottom(_("Doyen Irene stares at you with fire in this eyes.")); - next; + next(); mes("^FF0000Sara starts humming and singing softly to herself. She picks some wild flowers near by and presents\r" "them to the Doyen.^000000"); dispbottom(_("Sara starts humming and singing softly to herself. She picks some wild flowers near by and presents them to the Doyen.")); - next; - cutin "sara_9sara1.bmp", 2; + next(); + cutin("sara_9sara1.bmp", 2); mes("[Sara Irene]"); mes("Here you go daddy!"); npctalk(_("Here you go daddy!"), instance_npcname("Sara Irene#saratalk")); - next; - cutin "sara_elder_irine1.bmp", 2; + next(); + cutin("sara_elder_irine1.bmp", 2); mes("[Doyen Irene]"); mes("Oh Sara, should I have them?"); npctalk(_("Oh Sara, should I have them?"), instance_npcname("Doyen Irene#sarains")); - next; - cutin "sara_9sara1.bmp", 2; + next(); + cutin("sara_9sara1.bmp", 2); mes("[Sara Irene]"); mes("Of course silly daddy!"); npctalk(_("Of course silly daddy!"), instance_npcname("Sara Irene#saratalk")); - next; + next(); mes("^FF0000After being given the flowers the Doyen's mood seems to greatly improve.^000000"); dispbottom(_("After being given the flowers the Doyen's mood seems to greatly improve.")); - next; - cutin "sara_elder_irine1.bmp", 2; + next(); + cutin("sara_elder_irine1.bmp", 2); mes("[Doyen Irene]"); mes("Alright my princess, where should we go now?"); npctalk(_("Alright my princess, where should we go now?"), instance_npcname("Doyen Irene#sarains")); - next; - cutin "sara_9sara1.bmp", 2; + next(); + cutin("sara_9sara1.bmp", 2); mes("[Sara Irene]"); mes("Oh daddy! Let's go to the top of that hill over there!"); npctalk(_("Oh daddy! Let's go to the top of that hill over there!"), instance_npcname("Sara Irene#saratalk")); - next; - cutin "sara_elder_irine1.bmp", 2; + next(); + cutin("sara_elder_irine1.bmp", 2); mes("[Doyen Irene]"); mes("Hah! Hold onto me tight!"); npctalk(_("Hah! Hold onto me tight!"), instance_npcname("Doyen Irene#sarains")); - next; - cutin "sara_elder_irine1.bmp", 255; + next(); + cutin("sara_elder_irine1.bmp", 255); mes("^FF0000As they wander off you hear strange voices from around the corner...^000000"); - donpcevent instance_npcname("Doyen Irene#sarains")+"::OnDisable"; - donpcevent instance_npcname("A girl#sarains")+"::OnDisable"; - dispbottom(_("As they wander off you hear strange voices from around the corner...")),""; - disablenpc instance_npcname("Sara Irene#saratalk"); - next; + donpcevent(instance_npcname("Doyen Irene#sarains")+"::OnDisable"); + donpcevent(instance_npcname("A girl#sarains")+"::OnDisable"); + dispbottom(_("As they wander off you hear strange voices from around the corner..."), ""); + disablenpc(instance_npcname("Sara Irene#saratalk")); + next(); mes("[Strange Old Man A]"); mes("I can feel Sara's power growing. We cannot just stand by and let her achieve her full potential!"); npctalk(_("I can feel Sara's power growing. We cannot just stand by and let her achieve her full potential!"), instance_npcname("Strange Old Man A#stalk")); - next; + next(); mes("[Strange Old Man B]"); mes("She was born under a bad sign and her mother isn't even one of us!"); npctalk(_("She was born under a bad sign and her mother isn't even one of us!"), instance_npcname("Strange Old Man B#stalk")); - next; + next(); mes("[Strange Old Man B]"); mes("Someday she will cause blood to flow in our streets."); npctalk(_("Someday she will cause blood to flow in our streets."), instance_npcname("Strange Old Man B#stalk")); - next; + next(); mes("[Strange Old Man A]"); mes("We have to do something before the Holy creatures select her. I asked HIM to take care of it."); npctalk(_("We have to do something before the Holy creatures select her. I asked HIM to take care of it."), instance_npcname("Strange Old Man A#stalk")); - next; + next(); mes("[Strange Old Man B]"); mes("We will see... I look forward to hearing the bad news that has befallen her..."); npctalk(_("We will see... I look forward to hearing the bad news that has befallen her..."), instance_npcname("Strange Old Man B#stalk")); - next; + next(); mes("^FF0000The old man wander off it seems Sara might be in danger. We have to do something!^000000"); dispbottom(_("The old man wander off it seems Sara might be in danger. We have to do something!")); - close2; - donpcevent instance_npcname("Strange Old Man A#stalk")+"::OnDisable"; - donpcevent instance_npcname("Strange Old Man B#stalk")+"::OnDisable"; - donpcevent instance_npcname("Sara Irene#sarains1")+"::OnEnable"; - donpcevent instance_npcname("#sarawarp1")+"::OnEnable"; - viewpoint 1, 240, 145, 1, C_GREEN; - specialeffect EF_BASH; + close2(); + donpcevent(instance_npcname("Strange Old Man A#stalk")+"::OnDisable"); + donpcevent(instance_npcname("Strange Old Man B#stalk")+"::OnDisable"); + donpcevent(instance_npcname("Sara Irene#sarains1")+"::OnEnable"); + donpcevent(instance_npcname("#sarawarp1")+"::OnEnable"); + viewpoint(1, 240, 145, 1, C_GREEN); + specialeffect(EF_BASH); end; OnInstanceInit: - donpcevent instance_npcname("A girl#sarains")+"::OnEnable"; + donpcevent(instance_npcname("A girl#sarains")+"::OnEnable"); end; OnEnable: - hideoffnpc instance_npcname("A girl#sarains"); + hideoffnpc(instance_npcname("A girl#sarains")); end; OnDisable: - hideonnpc instance_npcname("A girl#sarains"); + hideonnpc(instance_npcname("A girl#sarains")); end; } 1@sara,268,158,3 script Doyen Irene#sarains 4_M_CHIEF_IRIN,{ end; OnInstanceInit: - donpcevent instance_npcname("Doyen Irene#sarains")+"::OnDisable"; + donpcevent(instance_npcname("Doyen Irene#sarains")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Doyen Irene#sarains"); + hideoffnpc(instance_npcname("Doyen Irene#sarains")); end; OnDisable: - hideonnpc instance_npcname("Doyen Irene#sarains"); + hideonnpc(instance_npcname("Doyen Irene#sarains")); end; } 1@sara,260,156,0 script Sara Irene#saratalk HIDDEN_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#saratalk")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#saratalk")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Sara Irene#saratalk"); + hideoffnpc(instance_npcname("Sara Irene#saratalk")); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#saratalk"); + hideonnpc(instance_npcname("Sara Irene#saratalk")); end; } - 1@sara,260,156,0 script Strange Old Man A#stalk FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("Strange Old Man A#stalk")+"::OnDisable"; + donpcevent(instance_npcname("Strange Old Man A#stalk")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Strange Old Man A#stalk"); + hideoffnpc(instance_npcname("Strange Old Man A#stalk")); end; OnDisable: - hideonnpc instance_npcname("Strange Old Man A#stalk"); + hideonnpc(instance_npcname("Strange Old Man A#stalk")); end; } 1@sara,260,156,0 script Strange Old Man B#stalk FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("Strange Old Man B#stalk")+"::OnDisable"; + donpcevent(instance_npcname("Strange Old Man B#stalk")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Strange Old Man B#stalk"); + hideoffnpc(instance_npcname("Strange Old Man B#stalk")); end; OnDisable: - hideonnpc instance_npcname("Strange Old Man B#stalk"); + hideonnpc(instance_npcname("Strange Old Man B#stalk")); end; } 1@sara,240,145,0 script #sarawarp1 WARPNPC,1,2,{ end; OnInstanceInit: - donpcevent instance_npcname("#sarawarp1")+"::OnDisable"; + donpcevent(instance_npcname("#sarawarp1")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("#sarawarp1"); + disablenpc(instance_npcname("#sarawarp1")); end; OnEnable: - enablenpc instance_npcname("#sarawarp1"); + enablenpc(instance_npcname("#sarawarp1")); end; OnTouch: .@map$ = instance_mapname("1@sara"); - warp .@map$, 94, 320; + warp(.@map$, 94, 320); end; } 1@sara,209,250,0 script #sarawarp2 WARPNPC,1,2,{ end; OnInstanceInit: - donpcevent instance_npcname("#sarawarp2")+"::OnDisable"; + donpcevent(instance_npcname("#sarawarp2")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("#sarawarp2"); + disablenpc(instance_npcname("#sarawarp2")); end; OnEnable: - enablenpc instance_npcname("#sarawarp2"); + enablenpc(instance_npcname("#sarawarp2")); end; OnTouch: .@map$ = instance_mapname("1@sara"); - warp .@map$, 230, 316; + warp(.@map$, 230, 316); end; } 1@sara,226,190,0 script #sarawarp3 WARPNPC,1,2,{ end; OnInstanceInit: - donpcevent instance_npcname("#sarawarp3")+"::OnDisable"; + donpcevent(instance_npcname("#sarawarp3")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("#sarawarp3"); + disablenpc(instance_npcname("#sarawarp3")); end; OnEnable: - enablenpc instance_npcname("#sarawarp3"); + enablenpc(instance_npcname("#sarawarp3")); end; OnTouch: .@map$ = instance_mapname("1@sara"); - warp .@map$, 263, 94; + warp(.@map$, 263, 94); end; } 1@sara,166,67,0 script #sarawarp4 WARPNPC,1,2,{ end; OnInstanceInit: - donpcevent instance_npcname("#sarawarp4")+"::OnDisable"; + donpcevent(instance_npcname("#sarawarp4")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("#sarawarp4"); + disablenpc(instance_npcname("#sarawarp4")); end; OnEnable: - enablenpc instance_npcname("#sarawarp4"); + enablenpc(instance_npcname("#sarawarp4")); end; OnTouch: .@map$ = instance_mapname("1@sara"); - warp .@map$, 164, 81; + warp(.@map$, 164, 81); end; } 1@sara,155,180,0 script #sarawarp5 WARPNPC,1,2,{ end; OnInstanceInit: - donpcevent instance_npcname("#sarawarp5")+"::OnDisable"; + donpcevent(instance_npcname("#sarawarp5")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("#sarawarp5"); + disablenpc(instance_npcname("#sarawarp5")); end; OnEnable: - enablenpc instance_npcname("#sarawarp5"); + enablenpc(instance_npcname("#sarawarp5")); end; OnTouch: .@map$ = instance_mapname("1@sara"); - warp .@map$, 155, 196; + warp(.@map$, 155, 196); end; } 1@sara,88,188,0 script #sarawarp6 WARPNPC,1,2,{ end; OnInstanceInit: - donpcevent instance_npcname("#sarawarp6")+"::OnDisable"; + donpcevent(instance_npcname("#sarawarp6")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("#sarawarp6"); + disablenpc(instance_npcname("#sarawarp6")); end; OnEnable: - enablenpc instance_npcname("#sarawarp6"); + enablenpc(instance_npcname("#sarawarp6")); end; OnTouch: .@map$ = instance_mapname("1@sara"); - warp .@map$, 89, 175; - if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY),2)) - viewpoint 1, 39, 142, 1, C_GREEN; + warp(.@map$, 89, 175); + if (getcharid(CHAR_ID_CHAR) == getpartyleader(getcharid(CHAR_ID_PARTY), 2)) + viewpoint(1, 39, 142, 1, C_GREEN); end; } 1@sara,19,143,0 script #sarawarp7 WARPNPC,1,2,{ end; OnInstanceInit: - donpcevent instance_npcname("#sarawarp7")+"::OnDisable"; + donpcevent(instance_npcname("#sarawarp7")+"::OnDisable"); end; OnDisable: - disablenpc instance_npcname("#sarawarp7"); + disablenpc(instance_npcname("#sarawarp7")); end; OnEnable: - enablenpc instance_npcname("#sarawarp7"); + enablenpc(instance_npcname("#sarawarp7")); end; OnTouch: - completequest 15003; - warp "dali", 134, 111; + completequest(15003); + warp("dali", 134, 111); end; } 1@sara,107,325,5 script Sara Irene#sarains1 4_F_SARAH_BABY,{ if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) end; - cutin "sara_9sara1.bmp", 2; + cutin("sara_9sara1.bmp", 2); mes("[Sara Irene]"); mes("Oh! Hello again! I remember you, what's up?"); npctalk(_("Oh! Hello again! I remember you, what's up?")); - next; + next(); mes("[Sara Irene]"); mes("I am here to give flowers to my mommy!"); npctalk(_("I am here to give flowers to my mommy!")); - next; + next(); mes("^FF0000Sara leaps forward to open the door, flowers at the ready.^000000"); dispbottom(_("Sara leaps forward to open the door, flowers at the ready.")); - next; + next(); mes("[Sara Irene]"); mes("Mom! Dad! Look what I found!"); npctalk(_("Mom! Dad! Look what I found!")); - next; - cutin "sara_9sara1.bmp", 255; - cutin "sara_momdie.bmp", 4; + next(); + cutin("sara_9sara1.bmp", 255); + cutin("sara_momdie.bmp", 4); mes("^FF0000The door opens to reveal a woman laying dead on the floor and the\r" "Doyen standing over the woman with a bloody sword.^000000"); dispbottom(_("The door opens to reveal a woman laying dead on the floor and the Doyen standing over the woman with a bloody sword.")); - next; + next(); mes("[Sara Irene]"); mes("..."); npctalk("..."); - next; + next(); mes("[Sara Irene]"); mes("..."); npctalk("..."); - next; + next(); mes("[Sara Irene]"); mes("..."); npctalk("..."); mapannounce(instance_mapname("1@sara"), _("[Sara's Mother] : Sara...Ru-..away..."), bc_map, C_YELLOW); - next; + next(); mes("[Sara Irene]"); mes("..."); npctalk("..."); - next; + next(); mes("^FF0000A gem rolls from the womans hand and comes to a rest in front of\r" "Sara. Unconsciously Sara reaches down and picks up the gem.^000000"); dispbottom(_("A gem rolls from the womans hand and comes to a rest in front of Sara. Unconsciously Sara reaches down and picks up the gem.")); - next; + next(); mes("^FF0000The Doyen turns around and notices Sara.^000000"); dispbottom(_("The Doyen turns around and notices Sara.")); - next; - cutin "sara_momdie.bmp", 255; - cutin "sara_elder_irine4.bmp", 2; + next(); + cutin("sara_momdie.bmp", 255); + cutin("sara_elder_irine4.bmp", 2); mes("[Doyen Irene]"); mes("Ahh Sara! I was just looking for you..."); npctalk(_("Ahh Sara! I was just looking for you..."), instance_npcname("Doyen Irene#sarains1")); - next; - cutin "sara_9sara2.bmp", 2; + next(); + cutin("sara_9sara2.bmp", 2); mes("[Sara Irene]"); mes("..."); npctalk("..."); - next; + next(); select("Escape with Sara."); mes("[Sara Irene]"); mes("..."); npctalk("..."); - next; - cutin "sara_elder_irine3.bmp", 2; + next(); + cutin("sara_elder_irine3.bmp", 2); mes("[Doyen Irene]"); mes("Guards! GUARDS! There is a murderer here! Catch him!"); npctalk(_("Guards! GUARDS! There is a murderer here! Catch him!"), instance_npcname("Doyen Irene#sarains1")); - next; + next(); mes("^FF0000The sound of many pairs of boots can be heard running outside!^000000"); dispbottom(_("The sound of many pairs of boots can be heard running outside!")); - next; - cutin "sara_9sara3.bmp", 2; + next(); + cutin("sara_9sara3.bmp", 2); mes("[Sara Irene]"); mes("Mommy no!!!!!!!!!!!!!!!"); npctalk(_("Mommy no!!!!!!!!!!!!!!!")); - next; - cutin "sara_9sara3.bmp", 255; + next(); + cutin("sara_9sara3.bmp", 255); mes("^FF0000Sara runs aways and the sound of the guards is getting closer...^000000"); dispbottom(_("Sara runs aways and the sound of the guards is getting closer...")); - close2; - donpcevent instance_npcname("Sara Irene#sarains1")+"::OnDisable"; - donpcevent instance_npcname("Sara Irene#sarains4")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains5")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains6")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains7")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains8")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains9")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains10")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains11")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains12")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains13")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains14")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains15")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains16")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains17")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains18")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains19")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains20")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains21")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains22")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains23")+"::OnEnable"; - donpcevent instance_npcname("#controlsara")+"::OnEnable"; + close2(); + donpcevent(instance_npcname("Sara Irene#sarains1")+"::OnDisable"); + donpcevent(instance_npcname("Sara Irene#sarains4")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains5")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains6")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains7")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains8")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains9")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains10")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains11")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains12")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains13")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains14")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains15")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains16")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains17")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains18")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains19")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains20")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains21")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains22")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains23")+"::OnEnable"); + donpcevent(instance_npcname("#controlsara")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains1")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains1")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Sara Irene#sarains1"); + hideoffnpc(instance_npcname("Sara Irene#sarains1")); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains1"); + hideonnpc(instance_npcname("Sara Irene#sarains1")); end; } 1@sara,107,325,0 script Doyen Irene#sarains1 FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("Doyen Irene#sarains1")+"::OnDisable"; + donpcevent(instance_npcname("Doyen Irene#sarains1")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Doyen Irene#sarains1"); + hideoffnpc(instance_npcname("Doyen Irene#sarains1")); end; OnDisable: - hideonnpc instance_npcname("Doyen Irene#sarains1"); + hideonnpc(instance_npcname("Doyen Irene#sarains1")); end; } 1@sara,107,327,0 script #controlsara CLEAR_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("#controlsara")+"::OnDisable"; + donpcevent(instance_npcname("#controlsara")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("#controlsara"); - hideonnpc instance_npcname("#controlsara"); - initnpctimer; + enablenpc(instance_npcname("#controlsara")); + hideonnpc(instance_npcname("#controlsara")); + initnpctimer(); end; OnDisable: - disablenpc instance_npcname("#controlsara"); + disablenpc(instance_npcname("#controlsara")); end; OnTimer2000: mapannounce(instance_mapname("1@sara"), _("<SYSTEM> The guards must be defeated to gain access to the next area."), bc_map, C_YELLOW); @@ -694,12 +693,12 @@ OnTimer4000: mapannounce(instance_mapname("1@sara"), _("<SYSTEM> The guards have formed groups of their own to fight you!"), bc_map, C_YELLOW); end; OnTimer5000: - donpcevent instance_npcname("#controlsara")+"::OnRespawn"; - stopnpctimer; + donpcevent(instance_npcname("#controlsara")+"::OnRespawn"); + stopnpctimer(); end; OnRespawn: .@map$ = instance_mapname("1@sara"); - + monster(.@map$, .@x, .@y, _("Maggot"), MG_ARCLOUSE, .@mobs, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); monster(.@map$, 107, 325, _("Payon Town Guard"), PAYONSOLDIER, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); monster(.@map$, 115, 325, _("Payon Town Guard"), PAYONSOLDIER, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); @@ -773,11 +772,11 @@ OnMyMobDead: .@a_mob_num = mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); .@mob_dead_num = .@callnum - .@a_mob_num; if (.@mob_dead_num > 57) { - viewpoint 1, 209, 250, 1, C_GREEN; + viewpoint(1, 209, 250, 1, C_GREEN); mapannounce(instance_mapname("1@sara"), _("<SYSTEM> Sara ran away again! You think she went in the 2 O'clock direction!"), bc_map, C_YELLOW); - donpcevent instance_npcname("#controlsara")+"::OnDisable"; - donpcevent instance_npcname("#controlsara1")+"::OnEnable"; - donpcevent instance_npcname("#sarawarp2")+"::OnEnable"; + donpcevent(instance_npcname("#controlsara")+"::OnDisable"); + donpcevent(instance_npcname("#controlsara1")+"::OnEnable"); + donpcevent(instance_npcname("#sarawarp2")+"::OnEnable"); } end; } @@ -785,15 +784,15 @@ OnMyMobDead: 1@sara,230,316,0 script #controlsara1 CLEAR_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("#controlsara1")+"::OnDisable"; + donpcevent(instance_npcname("#controlsara1")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("#controlsara1"); - hideonnpc instance_npcname("#controlsara1"); - donpcevent instance_npcname("#controlsara1")+"::OnRespawn"; + enablenpc(instance_npcname("#controlsara1")); + hideonnpc(instance_npcname("#controlsara1")); + donpcevent(instance_npcname("#controlsara1")+"::OnRespawn"); end; OnDisable: - disablenpc instance_npcname("#controlsara1"); + disablenpc(instance_npcname("#controlsara1")); end; OnRespawn: .@map$ = instance_mapname("1@sara"); @@ -825,11 +824,11 @@ OnMyMobDead: .@b_mob_num = mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); .@mob_dead_num = .@callnum - .@b_mob_num; if (.@mob_dead_num > 15) { - viewpoint 1, 226, 190, 1, C_GREEN; + viewpoint(1, 226, 190, 1, C_GREEN); mapannounce(instance_mapname("1@sara"), _("<SYSTEM> Sara ran away yet again! You think she went in the 5 O'clock direction!"), bc_map, C_YELLOW); - donpcevent instance_npcname("#controlsara1")+"::OnDisable"; - donpcevent instance_npcname("#controlsara2")+"::OnEnable"; - donpcevent instance_npcname("#sarawarp3")+"::OnEnable"; + donpcevent(instance_npcname("#controlsara1")+"::OnDisable"); + donpcevent(instance_npcname("#controlsara2")+"::OnEnable"); + donpcevent(instance_npcname("#sarawarp3")+"::OnEnable"); } end; } @@ -837,15 +836,15 @@ OnMyMobDead: 1@sara,263,94,0 script #controlsara2 CLEAR_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("#controlsara2")+"::OnDisable"; + donpcevent(instance_npcname("#controlsara2")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("#controlsara2"); - hideonnpc instance_npcname("#controlsara2"); - donpcevent instance_npcname("#controlsara2")+"::OnRespawn"; + enablenpc(instance_npcname("#controlsara2")); + hideonnpc(instance_npcname("#controlsara2")); + donpcevent(instance_npcname("#controlsara2")+"::OnRespawn"); end; OnDisable: - disablenpc instance_npcname("#controlsara2"); + disablenpc(instance_npcname("#controlsara2")); end; OnRespawn: .@map$ = instance_mapname("1@sara"); @@ -909,11 +908,11 @@ OnMyMobDead: .@c_mob_num = mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); .@mob_dead_num = .@callnum - .@c_mob_num; if (.@mob_dead_num > 44) { - viewpoint 1, 166, 67, 1, C_GREEN; + viewpoint(1, 166, 67, 1, C_GREEN); mapannounce(instance_mapname("1@sara"), _("<SYSTEM> Sara ran away yet again! *sigh* You think she went in the 6 O'clock direction!"), bc_map, C_YELLOW); - donpcevent instance_npcname("#controlsara2")+"::OnDisable"; - donpcevent instance_npcname("#controlsara3")+"::OnEnable"; - donpcevent instance_npcname("#sarawarp4")+"::OnEnable"; + donpcevent(instance_npcname("#controlsara2")+"::OnDisable"); + donpcevent(instance_npcname("#controlsara3")+"::OnEnable"); + donpcevent(instance_npcname("#sarawarp4")+"::OnEnable"); } end; } @@ -921,15 +920,15 @@ OnMyMobDead: 1@sara,164,81,0 script #controlsara3 CLEAR_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("#controlsara3")+"::OnDisable"; + donpcevent(instance_npcname("#controlsara3")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("#controlsara3"); - hideonnpc instance_npcname("#controlsara3"); - donpcevent instance_npcname("#controlsara3")+"::OnRespawn"; + enablenpc(instance_npcname("#controlsara3")); + hideonnpc(instance_npcname("#controlsara3")); + donpcevent(instance_npcname("#controlsara3")+"::OnRespawn"); end; OnDisable: - disablenpc instance_npcname("#controlsara3"); + disablenpc(instance_npcname("#controlsara3")); end; OnRespawn: .@map$ = instance_mapname("1@sara"); @@ -975,7 +974,7 @@ OnRespawn: monster(.@map$, 155, 180, _("Payon Town Guard"), PAYONSOLDIER2, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); monster(.@map$, 157, 180, _("Payon Town Guard"), PAYONSOLDIER2, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); monster(.@map$, 159, 180, _("Payon Town Guard"), PAYONSOLDIER2, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); - + monster(.@map$, 173, 139, _("Payon Town Guard"), PAYONSOLDIER, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); monster(.@map$, 170, 139, _("Payon Town Guard"), PAYONSOLDIER, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); monster(.@map$, 167, 139, _("Payon Town Guard"), PAYONSOLDIER, 1, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); @@ -992,15 +991,15 @@ OnMyMobDead: .@d_mob_num = mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); .@mob_dead_num = .@callnum - .@d_mob_num; if (.@mob_dead_num > 42) { - viewpoint 1, 155, 180, 1, C_GREEN; + viewpoint(1, 155, 180, 1, C_GREEN); mapannounce(instance_mapname("1@sara"), _("<SYSTEM> Sara ran away yet again! You think she went in the 12 O'clock direction!"), bc_map, C_YELLOW); - for (.@i=4; .@i<=23; .@i++) { - donpcevent instance_npcname("Sara Irene#sarains" + .@i)+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains" + .@i)+"::OnDisable"; + for (.@i = 4; .@i <= 23; .@i++) { + donpcevent(instance_npcname("Sara Irene#sarains" + .@i)+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains" + .@i)+"::OnDisable"); } - donpcevent instance_npcname("#controlsara3")+"::OnDisable"; - donpcevent instance_npcname("#sarawarp5")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains2")+"::OnEnable"; + donpcevent(instance_npcname("#controlsara3")+"::OnDisable"); + donpcevent(instance_npcname("#sarawarp5")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains2")+"::OnEnable"); } end; } @@ -1008,84 +1007,84 @@ OnMyMobDead: 1@sara,152,233,5 script Sara Irene#sarains2 4_F_SARAH_BABY,{ if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) end; - cutin "sara_9sara2.bmp", 2; + cutin("sara_9sara2.bmp", 2); mes("[Sara Irene]"); mes("Mommy!"); npctalk(_("Mommy!")); - next; - cutin "sara_elder_irine4.bmp", 2; + next(); + cutin("sara_elder_irine4.bmp", 2); mes("[Doyen Irene]"); mes("Sara..."); npctalk(_("Sara..."), instance_npcname("Doyen Irene#sarains2")); - next; - cutin "sara_9sara2.bmp", 2; + next(); + cutin("sara_9sara2.bmp", 2); mes("[Sara Irene]"); mes("No!"); npctalk(_("No!")); - next; - cutin "sara_elder_irine4.bmp", 2; + next(); + cutin("sara_elder_irine4.bmp", 2); mes("[Doyen Irene]"); mes("I have been looking for you Sara. Please come with daddy it is very dangerous here!"); npctalk(_("I have been looking for you Sara. Please come with daddy it is very dangerous here!"), instance_npcname("Doyen Irene#sarains2")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("I won't let you take Sara!"); unittalk(getcharid(CHAR_ID_ACCOUNT), _("I won't let you take Sara!")); - next; - cutin "sara_elder_irine3.bmp", 2; + next(); + cutin("sara_elder_irine3.bmp", 2); mes("[Doyen Irene]"); mes("The murderer is here! Guards! We will finish him once and for all!"); npctalk(_("The murderer is here! Guards! We will finish him once and for all!"), instance_npcname("Doyen Irene#sarains2")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("Sara... run! Save yourself!"); unittalk(getcharid(CHAR_ID_ACCOUNT), _("Sara... run! Save yourself!")); - next; - cutin "sara_9sara2.bmp", 2; + next(); + cutin("sara_9sara2.bmp", 2); mes("[Sara Irene]"); mes("...okay."); npctalk(_("...okay.")); - close2; - cutin "sara_9sara2.bmp", 255; - donpcevent instance_npcname("Sara Irene#sarains2")+"::OnDisable"; - donpcevent instance_npcname("#controlsara4")+"::OnEnable"; + close2(); + cutin("sara_9sara2.bmp", 255); + donpcevent(instance_npcname("Sara Irene#sarains2")+"::OnDisable"); + donpcevent(instance_npcname("#controlsara4")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains2")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains2")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Sara Irene#sarains2"); + hideoffnpc(instance_npcname("Sara Irene#sarains2")); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains2"); + hideonnpc(instance_npcname("Sara Irene#sarains2")); end; } 1@sara,152,233,5,0 script Doyen Irene#sarains2 FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("Doyen Irene#sarains2")+"::OnDisable"; + donpcevent(instance_npcname("Doyen Irene#sarains2")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Doyen Irene#sarains2"); + hideoffnpc(instance_npcname("Doyen Irene#sarains2")); end; OnDisable: - hideonnpc instance_npcname("Doyen Irene#sarains2"); + hideonnpc(instance_npcname("Doyen Irene#sarains2")); end; } 1@sara,152,233,0 script #controlsara4 FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("#controlsara4")+"::OnDisable"; + donpcevent(instance_npcname("#controlsara4")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("#controlsara4"); - donpcevent instance_npcname("#controlsara4")+"::OnRespawn"; + enablenpc(instance_npcname("#controlsara4")); + donpcevent(instance_npcname("#controlsara4")+"::OnRespawn"); end; OnDisable: - disablenpc instance_npcname("#controlsara4"); + disablenpc(instance_npcname("#controlsara4")); end; OnRespawn: .@map$ = instance_mapname("1@sara"); @@ -1112,9 +1111,9 @@ OnMyMobDead: .@f_mob_num = mobcount(.@map$, instance_npcname(strnpcinfo(NPC_NAME))+"::OnMyMobDead"); .@mob_dead_num = .@callnum - .@f_mob_num; if (.@mob_dead_num > 7) { - mapannounce(instance_mapname("1@sara"),_("<SYSTEM> Doyen Irene draws his blade!"), bc_map, C_YELLOW); - donpcevent instance_npcname("#controlsara4")+"::OnDisable"; - donpcevent instance_npcname("#controlsara5")+"::OnEnable"; + mapannounce(instance_mapname("1@sara"), _("<SYSTEM> Doyen Irene draws his blade!"), bc_map, C_YELLOW); + donpcevent(instance_npcname("#controlsara4")+"::OnDisable"); + donpcevent(instance_npcname("#controlsara5")+"::OnEnable"); } end; } @@ -1122,14 +1121,14 @@ OnMyMobDead: 1@sara,155,226,0 script #controlsara5 FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("#controlsara5")+"::OnDisable"; + donpcevent(instance_npcname("#controlsara5")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("#controlsara5"); - donpcevent instance_npcname("#controlsara5")+"::OnRespawn"; + enablenpc(instance_npcname("#controlsara5")); + donpcevent(instance_npcname("#controlsara5")+"::OnRespawn"); end; OnDisable: - disablenpc instance_npcname("#controlsara5"); + disablenpc(instance_npcname("#controlsara5")); end; OnRespawn: .@map$ = instance_mapname("1@sara"); @@ -1143,8 +1142,8 @@ OnMyMobDead: .@mob_dead_num = .@callnum - .@g_mob_num; if (.@mob_dead_num > 0) { mapannounce(instance_mapname("1@sara"), _("<SYSTEM> Doyen Irene has fallen."), bc_map, C_YELLOW); - donpcevent instance_npcname("#controlsara5")+"::OnDisable"; - donpcevent instance_npcname("Doyen Irene#sarains3")+"::OnEnable"; + donpcevent(instance_npcname("#controlsara5")+"::OnDisable"); + donpcevent(instance_npcname("Doyen Irene#sarains3")+"::OnEnable"); } end; } @@ -1152,82 +1151,82 @@ OnMyMobDead: 1@sara,156,236,3 script Doyen Irene#sarains3 4_M_CHIEF_IRIN,{ if (getcharid(CHAR_ID_CHAR) != getpartyleader(getcharid(CHAR_ID_PARTY), 2)) end; - cutin "sara_elder_irine4.bmp", 2; + cutin("sara_elder_irine4.bmp", 2); mes("[Doyen Irene]"); mes("You... were too strong for me."); npctalk(_("You... were too strong for me.")); - next; + next(); mes("[Doyen Irene]"); mes("Why.. *hack* are you trying to kill my wife and daughter?"); npctalk(_("Why.. *hack* are you trying to kill my wife and daughter?")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("What are you talking about? We saw you standing over Sara's mother with your sword COVERED in blood!"); unittalk(getcharid(CHAR_ID_ACCOUNT), _("What are you talking about? We saw you standing over Sara's mother with your sword COVERED in blood!")); - next; + next(); mes("[Doyen Irene]"); mes("You.. think I killed Sara's mother?"); npctalk(_("You.. think I killed Sara's mother?")); - next; + next(); mes("[Doyen Irene]"); mes("She *cough* had already been killed by an assassin. I slew him that *hack* is why my blade was covered in blood..."); npctalk(_("She *cough* had already been killed by an assassin. I slew him that *hack* is why my blade was covered in blood...")); - next; - cutin "sara_elder_irine4.bmp", 255; - cutin "sara_momdie.bmp", 4; + next(); + cutin("sara_elder_irine4.bmp", 255); + cutin("sara_momdie.bmp", 4); mes("^FF0000Thinking back you seem to recall another body laying in the left\r" "corner of the room. Maybe that was the assassin the Doyen is talking about.^000000"); dispbottom(_("Thinking back you seem to recall another body laying in the left corner of the room. Maybe that was the assassin the Doyen is talking about.")); - next; - cutin "sara_momdie.bmp", 255; - cutin "sara_elder_irine4.bmp", 2; + next(); + cutin("sara_momdie.bmp", 255); + cutin("sara_elder_irine4.bmp", 2); mes("[Doyen Irene]"); mes("If.. you are not the assassin sent to kill my wife and daughter, who are you?"); npctalk(_("If.. you are not the assassin sent to kill my wife and daughter, who are you?")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("I am just an adventurer who was passing through. I heard some men plotting their deaths and needed to intervene."); unittalk(getcharid(CHAR_ID_ACCOUNT), _("I am just an adventurer who was passing through. I heard some men plotting their deaths and needed to intervene.")); - next; + next(); mes("[Doyen Irene]"); mes("If.. you are telling the truth...\r" "forgive me. I though you were one of them."); npctalk(_("If.. you are telling the truth... forgive me. I though you were one of them.")); - next; + next(); mes("[Doyen Irene]"); mes("Strange men... I bet they were some of the village elders. Ugh..."); npctalk(_("Strange men... I bet they were some of the village elders. Ugh...")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("There might be more assassins so we have to find Sara as fast as we can."); unittalk(getcharid(CHAR_ID_ACCOUNT), _("There might be more assassins so we have to find Sara as fast as we can.")); - next; + next(); mesf("[%s]", strcharinfo(PC_NAME)); mes("Sara believes that you killed her mother. We need to tell her the truth."); unittalk(getcharid(CHAR_ID_ACCOUNT), _("Sara believes that you killed her mother. We need to tell her the truth.")); - next; + next(); mes("[Doyen Irene]"); mes("We must do our best to find her. Let's split up and search for her.\r" "Please help me find my daughter and explain everything to her."); npctalk(_("We must do our best to find her. Let's split up and search for her. Please help me find my daughter and explain everything to her.")); - close2; - cutin "sara_elder_irine4.bmp", 255; - viewpoint 1, 88, 188, 1, C_GREEN; + close2(); + cutin("sara_elder_irine4.bmp", 255); + viewpoint(1, 88, 188, 1, C_GREEN); mapannounce(instance_mapname("1@sara"), _("<SYSTEM> We must find Sara. You seem remember her running in the 8 O'clock direction."), bc_map, C_YELLOW); - donpcevent instance_npcname("Doyen Irene#sarains3")+"::OnDisable"; - donpcevent instance_npcname("#sarawarp6")+"::OnEnable"; - donpcevent instance_npcname("????-#saratalk")+"::OnEnable"; - donpcevent instance_npcname("Sara Irene#sarains3")+"::OnEnable"; + donpcevent(instance_npcname("Doyen Irene#sarains3")+"::OnDisable"); + donpcevent(instance_npcname("#sarawarp6")+"::OnEnable"); + donpcevent(instance_npcname("????-#saratalk")+"::OnEnable"); + donpcevent(instance_npcname("Sara Irene#sarains3")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Doyen Irene#sarains3")+"::OnDisable"; + donpcevent(instance_npcname("Doyen Irene#sarains3")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Doyen Irene#sarains3"); + hideoffnpc(instance_npcname("Doyen Irene#sarains3")); end; OnDisable: - hideonnpc instance_npcname("Doyen Irene#sarains3"); + hideonnpc(instance_npcname("Doyen Irene#sarains3")); end; } @@ -1236,69 +1235,69 @@ OnDisable: end; mes("^FF0000As you are about to call out to Sara a sudden blow knocks you down from behind.^000000"); dispbottom(_("As you are about to call out to Sara a sudden blow knocks you down from behind.")); - next; - cutin "sara_beholder.bmp", 2; + next(); + cutin("sara_beholder.bmp", 2); mes("[?????]"); mes("The time travellers cannot interfere any longer. You cannot stop us from meeting Sara."); npctalk(_("The time travellers cannot interfere any longer. You cannot stop us from meeting Sara."), instance_npcname("????-#saratalk")); - next; + next(); mes("[?????]"); mes("You should go back to the time where you belong."); npctalk(_("You should go back to the time where you belong."), instance_npcname("????-#saratalk")); - next; + next(); mes("^FF0000As you fall to the ground two dark figures approach Sara.^000000"); dispbottom(_("As you fall to the ground two dark figures approach Sara.")); - next; + next(); mes("[?????]"); mes("A girl full of betrayal, despair, and hate. We will guide you to your ultimate fate."); npctalk(_("A girl full of betrayal, despair, and hate. We will guide you to your ultimate fate."), instance_npcname("????-#saratalk")); - next; - cutin "sara_9sara2.bmp", 2; + next(); + cutin("sara_9sara2.bmp", 2); mes("[Sara Irene]"); mes("..."); npctalk("..."); - next; - cutin "sara_beholder.bmp", 2; + next(); + cutin("sara_beholder.bmp", 2); mes("[?????]"); mes("Sara Irene, he will make your dreams come true."); npctalk(_("Sara Irene, he will make your dreams come true."), instance_npcname("????-#saratalk")); - next; - cutin "sara_beholder.bmp", 255; + next(); + cutin("sara_beholder.bmp", 255); mes("^FF0000One of the cloaked strangers covers Sara with their cloak and all three figures disappear.^000000"); dispbottom(_("One of the cloaked strangers covers Sara with their cloak and all three figures disappear.")); - donpcevent instance_npcname("Sara Irene#sarains3")+"::OnDisable"; - next; + donpcevent(instance_npcname("Sara Irene#sarains3")+"::OnDisable"); + next(); mes("^FF0000At the same time as Sara disappearing this place begin to become unstable, just like what Leon said before.^000000"); dispbottom(_("At the same time as Sara disappearing this place begin to become unstable, just like what Leon said before.")); - next; + next(); mes("^FF0000We need to get out from this place quickly to the left. And when we at the outside let's talk to him.^000000"); dispbottom(_("We need to get out from this place quickly to the left. And when we at the outside let's talk to him.")); - close2; - donpcevent instance_npcname("????-#saratalk")+"::OnDisable"; - donpcevent instance_npcname("#sarawarp7")+"::OnEnable"; + close2(); + donpcevent(instance_npcname("????-#saratalk")+"::OnDisable"); + donpcevent(instance_npcname("#sarawarp7")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains3")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains3")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("Sara Irene#sarains3"); + hideoffnpc(instance_npcname("Sara Irene#sarains3")); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains3"); + hideonnpc(instance_npcname("Sara Irene#sarains3")); end; } 1@sara,152,233,0 script ????-#saratalk FAKE_NPC,{ end; OnInstanceInit: - donpcevent instance_npcname("????-#saratalk")+"::OnDisable"; + donpcevent(instance_npcname("????-#saratalk")+"::OnDisable"); end; OnEnable: - hideoffnpc instance_npcname("????-#saratalk"); + hideoffnpc(instance_npcname("????-#saratalk")); end; OnDisable: - hideonnpc instance_npcname("????-#saratalk"); + hideonnpc(instance_npcname("????-#saratalk")); end; } @@ -1306,23 +1305,23 @@ OnDisable: end; OnTouch: npctalk(_("Why daddy?")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains4")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains4")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains4")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains4")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains4")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains4")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains4"); - hideoffnpc instance_npcname("Sara Irene#sarains4"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains4")); + hideoffnpc(instance_npcname("Sara Irene#sarains4")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains4"); - disablenpc instance_npcname("Sara Irene#sarains4"); + hideonnpc(instance_npcname("Sara Irene#sarains4")); + disablenpc(instance_npcname("Sara Irene#sarains4")); end; } @@ -1330,23 +1329,23 @@ OnDisable: end; OnTouch: npctalk(_("Not mommy!")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains5")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains5")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains5")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains5")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains5")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains5")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains5"); - hideoffnpc instance_npcname("Sara Irene#sarains5"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains5")); + hideoffnpc(instance_npcname("Sara Irene#sarains5")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains5"); - disablenpc instance_npcname("Sara Irene#sarains5"); + hideonnpc(instance_npcname("Sara Irene#sarains5")); + disablenpc(instance_npcname("Sara Irene#sarains5")); end; } @@ -1354,23 +1353,23 @@ OnDisable: end; OnTouch: npctalk(_("Why did he do it?!")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains6")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains6")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains6")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains6")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains6")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains6")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains6"); - hideoffnpc instance_npcname("Sara Irene#sarains6"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains6")); + hideoffnpc(instance_npcname("Sara Irene#sarains6")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains6"); - disablenpc instance_npcname("Sara Irene#sarains6"); + hideonnpc(instance_npcname("Sara Irene#sarains6")); + disablenpc(instance_npcname("Sara Irene#sarains6")); end; } @@ -1378,23 +1377,23 @@ OnDisable: end; OnTouch: npctalk(_("Why.. why?!")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains7")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains7")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains7")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains7")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains7")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains7")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains7"); - hideoffnpc instance_npcname("Sara Irene#sarains7"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains7")); + hideoffnpc(instance_npcname("Sara Irene#sarains7")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains7"); - disablenpc instance_npcname("Sara Irene#sarains7"); + hideonnpc(instance_npcname("Sara Irene#sarains7")); + disablenpc(instance_npcname("Sara Irene#sarains7")); end; } @@ -1402,23 +1401,23 @@ OnDisable: end; OnTouch: npctalk(_("Noooo...")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains8")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains8")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains8")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains8")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains8")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains8")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains8"); - hideoffnpc instance_npcname("Sara Irene#sarains8"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains8")); + hideoffnpc(instance_npcname("Sara Irene#sarains8")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains8"); - disablenpc instance_npcname("Sara Irene#sarains8"); + hideonnpc(instance_npcname("Sara Irene#sarains8")); + disablenpc(instance_npcname("Sara Irene#sarains8")); end; } @@ -1426,23 +1425,23 @@ OnDisable: end; OnTouch: npctalk("..."); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains9")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains9")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains9")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains9")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains9")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains9")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains9"); - hideoffnpc instance_npcname("Sara Irene#sarains9"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains9")); + hideoffnpc(instance_npcname("Sara Irene#sarains9")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains9"); - disablenpc instance_npcname("Sara Irene#sarains9"); + hideonnpc(instance_npcname("Sara Irene#sarains9")); + disablenpc(instance_npcname("Sara Irene#sarains9")); end; } @@ -1450,23 +1449,23 @@ OnDisable: end; OnTouch: npctalk(_("Why does it hurt so much?")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains10")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains10")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains10")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains10")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains10")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains10")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains10"); - hideoffnpc instance_npcname("Sara Irene#sarains10"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains10")); + hideoffnpc(instance_npcname("Sara Irene#sarains10")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains10"); - disablenpc instance_npcname("Sara Irene#sarains10"); + hideonnpc(instance_npcname("Sara Irene#sarains10")); + disablenpc(instance_npcname("Sara Irene#sarains10")); end; } @@ -1474,23 +1473,23 @@ OnDisable: end; OnTouch: npctalk(_("........")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains11")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains11")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains11")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains11")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains11")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains11")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains11"); - hideoffnpc instance_npcname("Sara Irene#sarains11"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains11")); + hideoffnpc(instance_npcname("Sara Irene#sarains11")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains11"); - disablenpc instance_npcname("Sara Irene#sarains11"); + hideonnpc(instance_npcname("Sara Irene#sarains11")); + disablenpc(instance_npcname("Sara Irene#sarains11")); end; } @@ -1498,23 +1497,23 @@ OnDisable: end; OnTouch: npctalk(_("...Mommy")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains12")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains12")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains12")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains12")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains12")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains12")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains12"); - hideoffnpc instance_npcname("Sara Irene#sarains12"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains12")); + hideoffnpc(instance_npcname("Sara Irene#sarains12")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains12"); - disablenpc instance_npcname("Sara Irene#sarains12"); + hideonnpc(instance_npcname("Sara Irene#sarains12")); + disablenpc(instance_npcname("Sara Irene#sarains12")); end; } @@ -1522,23 +1521,23 @@ OnDisable: end; OnTouch: npctalk(_("What happened to you daddy?")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains13")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains13")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains13")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains13")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains13")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains13")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains13"); - hideoffnpc instance_npcname("Sara Irene#sarains13"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains13")); + hideoffnpc(instance_npcname("Sara Irene#sarains13")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains13"); - disablenpc instance_npcname("Sara Irene#sarains13"); + hideonnpc(instance_npcname("Sara Irene#sarains13")); + disablenpc(instance_npcname("Sara Irene#sarains13")); end; } @@ -1546,23 +1545,23 @@ OnDisable: end; OnTouch: npctalk(_("All that blood...")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains14")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains14")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains14")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains14")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains14")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains14")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains14"); - hideoffnpc instance_npcname("Sara Irene#sarains14"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains14")); + hideoffnpc(instance_npcname("Sara Irene#sarains14")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains14"); - disablenpc instance_npcname("Sara Irene#sarains14"); + hideonnpc(instance_npcname("Sara Irene#sarains14")); + disablenpc(instance_npcname("Sara Irene#sarains14")); end; } @@ -1570,23 +1569,23 @@ OnDisable: end; OnTouch: npctalk(_("Who are you?!")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains15")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains15")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains15")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains15")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains15")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains15")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains15"); - hideoffnpc instance_npcname("Sara Irene#sarains15"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains15")); + hideoffnpc(instance_npcname("Sara Irene#sarains15")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains15"); - disablenpc instance_npcname("Sara Irene#sarains15"); + hideonnpc(instance_npcname("Sara Irene#sarains15")); + disablenpc(instance_npcname("Sara Irene#sarains15")); end; } @@ -1594,23 +1593,23 @@ OnDisable: end; OnTouch: npctalk(_("I want my mommy!")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains16")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains16")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains16")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains16")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains16")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains16")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains16"); - hideoffnpc instance_npcname("Sara Irene#sarains16"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains16")); + hideoffnpc(instance_npcname("Sara Irene#sarains16")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains16"); - disablenpc instance_npcname("Sara Irene#sarains16"); + hideonnpc(instance_npcname("Sara Irene#sarains16")); + disablenpc(instance_npcname("Sara Irene#sarains16")); end; } @@ -1618,23 +1617,23 @@ OnDisable: end; OnTouch: npctalk(_("........")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains17")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains17")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains17")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains17")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains17")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains17")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains17"); - hideoffnpc instance_npcname("Sara Irene#sarains17"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains17")); + hideoffnpc(instance_npcname("Sara Irene#sarains17")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains17"); - disablenpc instance_npcname("Sara Irene#sarains17"); + hideonnpc(instance_npcname("Sara Irene#sarains17")); + disablenpc(instance_npcname("Sara Irene#sarains17")); end; } @@ -1642,23 +1641,23 @@ OnDisable: end; OnTouch: npctalk(_("Nooooo...")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains18")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains18")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains18")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains18")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains18")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains18")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains18"); - hideoffnpc instance_npcname("Sara Irene#sarains18"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains18")); + hideoffnpc(instance_npcname("Sara Irene#sarains18")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains18"); - disablenpc instance_npcname("Sara Irene#sarains18"); + hideonnpc(instance_npcname("Sara Irene#sarains18")); + disablenpc(instance_npcname("Sara Irene#sarains18")); end; } @@ -1666,23 +1665,23 @@ OnDisable: end; OnTouch: npctalk(_("Mommy!")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains19")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains19")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains19")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains19")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains19")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains19")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains19"); - hideoffnpc instance_npcname("Sara Irene#sarains19"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains19")); + hideoffnpc(instance_npcname("Sara Irene#sarains19")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains19"); - disablenpc instance_npcname("Sara Irene#sarains19"); + hideonnpc(instance_npcname("Sara Irene#sarains19")); + disablenpc(instance_npcname("Sara Irene#sarains19")); end; } @@ -1690,23 +1689,23 @@ OnDisable: end; OnTouch: npctalk("........"); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains20")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains20")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains20")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains20")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains20")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains20")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains20"); - hideoffnpc instance_npcname("Sara Irene#sarains20"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains20")); + hideoffnpc(instance_npcname("Sara Irene#sarains20")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains20"); - disablenpc instance_npcname("Sara Irene#sarains20"); + hideonnpc(instance_npcname("Sara Irene#sarains20")); + disablenpc(instance_npcname("Sara Irene#sarains20")); end; } @@ -1714,23 +1713,23 @@ OnDisable: end; OnTouch: npctalk(_("Daddy!")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains21")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains21")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains21")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains21")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains21")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains21")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains21"); - hideoffnpc instance_npcname("Sara Irene#sarains21"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains21")); + hideoffnpc(instance_npcname("Sara Irene#sarains21")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains21"); - disablenpc instance_npcname("Sara Irene#sarains21"); + hideonnpc(instance_npcname("Sara Irene#sarains21")); + disablenpc(instance_npcname("Sara Irene#sarains21")); end; } @@ -1738,23 +1737,23 @@ OnDisable: end; OnTouch: npctalk("........"); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains22")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains22")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains22")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains22")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains22")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains22")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains22"); - hideoffnpc instance_npcname("Sara Irene#sarains22"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains22")); + hideoffnpc(instance_npcname("Sara Irene#sarains22")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains22"); - disablenpc instance_npcname("Sara Irene#sarains22"); + hideonnpc(instance_npcname("Sara Irene#sarains22")); + disablenpc(instance_npcname("Sara Irene#sarains22")); end; } @@ -1762,22 +1761,22 @@ OnDisable: end; OnTouch: npctalk(_("Why?")); - initnpctimer; - donpcevent instance_npcname("Sara Irene#sarains23")+"::OnDisable"; + initnpctimer(); + donpcevent(instance_npcname("Sara Irene#sarains23")+"::OnDisable"); end; OnTimer60000: - donpcevent instance_npcname("Sara Irene#sarains23")+"::OnEnable"; + donpcevent(instance_npcname("Sara Irene#sarains23")+"::OnEnable"); end; OnInstanceInit: - donpcevent instance_npcname("Sara Irene#sarains23")+"::OnDisable"; + donpcevent(instance_npcname("Sara Irene#sarains23")+"::OnDisable"); end; OnEnable: - enablenpc instance_npcname("Sara Irene#sarains23"); - hideoffnpc instance_npcname("Sara Irene#sarains23"); - stopnpctimer; + enablenpc(instance_npcname("Sara Irene#sarains23")); + hideoffnpc(instance_npcname("Sara Irene#sarains23")); + stopnpctimer(); end; OnDisable: - hideonnpc instance_npcname("Sara Irene#sarains23"); - disablenpc instance_npcname("Sara Irene#sarains23"); + hideonnpc(instance_npcname("Sara Irene#sarains23")); + disablenpc(instance_npcname("Sara Irene#sarains23")); end; } diff --git a/src/login/lclif.c b/src/login/lclif.c index f32538610..47b2526c4 100644 --- a/src/login/lclif.c +++ b/src/login/lclif.c @@ -284,7 +284,7 @@ bool lclif_send_server_list(struct login_session_data *sd) packet->server_list[n].ip = htonl((subnet_char_ip) ? subnet_char_ip : server[i].ip); packet->server_list[n].port = sockt->ntows(htons(server[i].port)); // [!] LE byte order here [!] safestrncpy(packet->server_list[n].name, server[i].name, 20); - packet->server_list[n].usercount = server[i].users; + packet->server_list[n].usercount = login->convert_users_to_colors(server[i].users); if (server[i].type == CST_PAYING && sd->expiration_time > time(NULL)) packet->server_list[n].property = CST_NORMAL; diff --git a/src/login/login.c b/src/login/login.c index ae584206f..3db9558b8 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -1604,7 +1604,7 @@ bool login_config_read_account(const char *filename, struct config_t *config, bo /** * Frees login->config->client_hash_nodes **/ -void clear_client_hash_nodes(void) +void login_clear_client_hash_nodes(void) { struct client_hash_node *node = login->config->client_hash_nodes; @@ -1618,7 +1618,7 @@ void clear_client_hash_nodes(void) } /** - * Reads information from login_configuration.permission.hash.md5_hashes. + * Reads information from login_configuration.permission.hash.md5_hashes (unused function) * * @param setting The setting to read from. */ @@ -1627,7 +1627,7 @@ void login_config_set_md5hash(struct config_setting_t *setting) int i; int count = libconfig->setting_length(setting); - clear_client_hash_nodes(); + login->clear_client_hash_nodes(); // There's no need to parse if it's disabled or if there's no list if (count <= 0 || !login->config->client_hash_check) @@ -1702,7 +1702,7 @@ bool login_config_read_permission_hash(const char *filename, struct config_t *co libconfig->setting_lookup_bool_real(setting, "enabled", &login->config->client_hash_check); if ((setting = libconfig->lookup(config, "login_configuration/permission/hash/MD5_hashes")) != NULL) - login_config_set_md5hash(setting); + login->config_set_md5hash(setting); return true; } @@ -1710,7 +1710,7 @@ bool login_config_read_permission_hash(const char *filename, struct config_t *co /** * Clears login->config->dnsbl_servers, freeing any allocated memory. */ -void clear_dnsbl_servers(void) +void login_clear_dnsbl_servers(void) { while (VECTOR_LENGTH(login->config->dnsbl_servers) > 0) { aFree(&VECTOR_POP(login->config->dnsbl_servers)); @@ -1728,7 +1728,7 @@ void login_config_set_dnsbl_servers(struct config_setting_t *setting) int i; int count = libconfig->setting_length(setting); - clear_dnsbl_servers(); + login->clear_dnsbl_servers(); // There's no need to parse if it's disabled if (count <= 0 || !login->config->use_dnsbl) @@ -1772,7 +1772,7 @@ bool login_config_read_permission_blacklist(const char *filename, struct config_ libconfig->setting_lookup_bool_real(setting, "enabled", &login->config->use_dnsbl); if ((setting = libconfig->lookup(config, "login_configuration/permission/DNS_blacklist/dnsbl_servers")) != NULL) - login_config_set_dnsbl_servers(setting); + login->config_set_dnsbl_servers(setting); return true; } @@ -1806,15 +1806,47 @@ bool login_config_read_permission(const char *filename, struct config_t *config, libconfig->setting_lookup_bool_real(setting, "check_client_version", &login->config->check_client_version); libconfig->setting_lookup_uint32(setting, "client_version_to_connect", &login->config->client_version_to_connect); - if (!login_config_read_permission_hash(filename, config, imported)) + if (!login->config_read_permission_hash(filename, config, imported)) retval = false; - if (!login_config_read_permission_blacklist(filename, config, imported)) + if (!login->config_read_permission_blacklist(filename, config, imported)) retval = false; return retval; } /** + * Reads 'login_configuration.users_count' and initializes required variables. + * + * @param filename Path to configuration file (used in error and warning messages). + * @param config The current config being parsed. + * @param imported Whether the current config is imported from another file. + * + * @retval false in case of error. + */ +bool login_config_read_users(const char *filename, struct config_t *config, bool imported) +{ + struct config_setting_t *setting = NULL; + bool retval = true; + + nullpo_retr(false, filename); + nullpo_retr(false, config); + + if ((setting = libconfig->lookup(config, "login_configuration/users_count")) == NULL) { + if (imported) + return true; + ShowError("login_config_read: login_configuration/users_count was not found in %s!\n", filename); + return false; + } + + libconfig->setting_lookup_bool_real(setting, "send_user_count_description", &login->config->send_user_count_description); + libconfig->setting_lookup_uint32(setting, "low", &login->config->users_low); + libconfig->setting_lookup_uint32(setting, "medium", &login->config->users_medium); + libconfig->setting_lookup_uint32(setting, "high", &login->config->users_high); + + return retval; +} + +/** * Reads the 'login-config' configuration file and initializes required variables. * * @param filename Path to configuration file. @@ -1833,15 +1865,17 @@ bool login_config_read(const char *filename, bool imported) if (!libconfig->load_file(&config, filename)) return false; // Error message is already shown by libconfig->load_file - if (!login_config_read_inter(filename, &config, imported)) + if (!login->config_read_inter(filename, &config, imported)) retval = false; - if (!login_config_read_console(filename, &config, imported)) + if (!login->config_read_console(filename, &config, imported)) retval = false; - if (!login_config_read_log(filename, &config, imported)) + if (!login->config_read_log(filename, &config, imported)) retval = false; - if (!login_config_read_account(filename, &config, imported)) + if (!login->config_read_account(filename, &config, imported)) retval = false; - if (!login_config_read_permission(filename, &config, imported)) + if (!login->config_read_permission(filename, &config, imported)) + retval = false; + if (!login->config_read_users(filename, &config, imported)) retval = false; if (!loginlog_config_read("conf/common/inter-server.conf", imported)) // Only inter-server @@ -1866,6 +1900,30 @@ bool login_config_read(const char *filename, bool imported) return retval; } +/** + * Convert users count to colors. + * + * @param users Actual users count. + * + * @retval users count or color id. + **/ +uint16 login_convert_users_to_colors(uint16 users) +{ +#if PACKETVER >= 20170726 + if (!login->config->send_user_count_description) + return 4; + if (users <= login->config->users_low) + return 0; + else if (users <= login->config->users_medium) + return 1; + else if (users <= login->config->users_high) + return 2; + return 3; +#else + return users; +#endif +} + //-------------------------------------- // Function called at exit of the server //-------------------------------------- @@ -1877,8 +1935,8 @@ int do_final(void) HPM->event(HPET_FINAL); - clear_client_hash_nodes(); - clear_dnsbl_servers(); + login->clear_client_hash_nodes(); + login->clear_dnsbl_servers(); login_log(0, "login server", 100, "login server shutdown"); @@ -2168,6 +2226,20 @@ void login_defaults(void) { login->config_set_defaults = login_config_set_defaults; login->config_read = login_config_read; + login->config_read_inter = login_config_read_inter; + login->config_read_console = login_config_read_console; + login->config_read_log = login_config_read_log; + login->config_read_account = login_config_read_account; + login->config_read_permission = login_config_read_permission; + login->config_read_permission_hash = login_config_read_permission_hash; + login->config_read_permission_blacklist = login_config_read_permission_blacklist; + login->config_read_users = login_config_read_users; + login->config_set_dnsbl_servers = login_config_set_dnsbl_servers; + + login->clear_dnsbl_servers = login_clear_dnsbl_servers; + login->clear_client_hash_nodes = login_clear_client_hash_nodes; + login->config_set_md5hash = login_config_set_md5hash; + login->convert_users_to_colors = login_convert_users_to_colors; login->LOGIN_CONF_NAME = NULL; login->NET_CONF_NAME = NULL; } diff --git a/src/login/login.h b/src/login/login.h index 5632e6529..d5c9972c0 100644 --- a/src/login/login.h +++ b/src/login/login.h @@ -32,6 +32,8 @@ struct mmo_account; struct AccountDB; +struct config_t; +struct config_setting_t; enum E_LOGINSERVER_ST { @@ -119,6 +121,11 @@ struct Login_Config { bool use_dnsbl; ///< dns blacklist blocking ? VECTOR_DECL(char *) dnsbl_servers; ///< dnsbl servers + bool send_user_count_description; + uint32 users_low; + uint32 users_medium; + uint32 users_high; + bool client_hash_check; ///< flags for checking client md5 // TODO: VECTOR candidate struct client_hash_node *client_hash_nodes; ///< linked list containg md5 hash for each gm group @@ -209,6 +216,19 @@ struct login_interface { void (*parse_request_connection) (int fd, struct login_session_data* sd, const char *ip, uint32 ipl); void (*config_set_defaults) (void); bool (*config_read) (const char *filename, bool included); + bool (*config_read_inter) (const char *filename, struct config_t *config, bool imported); + bool (*config_read_console) (const char *filename, struct config_t *config, bool imported); + bool (*config_read_log) (const char *filename, struct config_t *config, bool imported); + bool (*config_read_account) (const char *filename, struct config_t *config, bool imported); + bool (*config_read_permission) (const char *filename, struct config_t *config, bool imported); + bool (*config_read_permission_hash) (const char *filename, struct config_t *config, bool imported); + bool (*config_read_permission_blacklist) (const char *filename, struct config_t *config, bool imported); + bool (*config_read_users) (const char *filename, struct config_t *config, bool imported); + void (*clear_dnsbl_servers) (void); + void (*config_set_dnsbl_servers) (struct config_setting_t *setting); + void (*clear_client_hash_nodes) (void); + void (*config_set_md5hash) (struct config_setting_t *setting); + uint16 (*convert_users_to_colors) (uint16 users); char *LOGIN_CONF_NAME; char *NET_CONF_NAME; ///< Network configuration filename }; diff --git a/src/map/clif.c b/src/map/clif.c index 088c92ea8..4dc36be6d 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -293,7 +293,11 @@ unsigned char clif_bl_type(struct block_list *bl) case BL_NPC: vd = status->get_viewdata(bl); nullpo_retr(CLUT_NPC, vd); +#if PACKETVER >= 20170726 + return CLUT_EVENT; +#else return pc->db_checkid(vd->class) ? CLUT_PC : CLUT_EVENT; +#endif case BL_PET: vd = status->get_viewdata(bl); nullpo_retr(CLUT_NPC, vd); @@ -1067,14 +1071,17 @@ void clif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd, enu #endif #if PACKETVER >= 20120221 if (battle_config.show_monster_hp_bar && bl->type == BL_MOB && status_get_hp(bl) < status_get_max_hp(bl)) { - const struct mob_data *md = BL_UCCAST(BL_MOB, bl); p.maxHP = status_get_max_hp(bl); p.HP = status_get_hp(bl); - p.isBoss = (md->spawn != NULL && md->spawn->state.boss) ? 1 : 0; } else { p.maxHP = -1; p.HP = -1; - p.isBoss = 0; + } + if (bl->type == BL_MOB) { + const struct mob_data *md = BL_UCCAST(BL_MOB, bl); + p.isBoss = (md->spawn != NULL) ? md->spawn->state.boss : BTYPE_NONE; + } else { + p.isBoss = BTYPE_NONE; } #endif #if PACKETVER >= 20150513 @@ -1216,14 +1223,17 @@ void clif_spawn_unit(struct block_list* bl, enum send_target target) { #endif #if PACKETVER >= 20120221 if (battle_config.show_monster_hp_bar && bl->type == BL_MOB && status_get_hp(bl) < status_get_max_hp(bl)) { - const struct mob_data *md = BL_UCCAST(BL_MOB, bl); p.maxHP = status_get_max_hp(bl); p.HP = status_get_hp(bl); - p.isBoss = (md->spawn != NULL && md->spawn->state.boss) ? 1 : 0; } else { p.maxHP = -1; p.HP = -1; - p.isBoss = 0; + } + if (bl->type == BL_MOB) { + const struct mob_data *md = BL_UCCAST(BL_MOB, bl); + p.isBoss = (md->spawn != NULL) ? md->spawn->state.boss : BTYPE_NONE; + } else { + p.isBoss = BTYPE_NONE; } #endif #if PACKETVER >= 20150513 @@ -1315,14 +1325,17 @@ void clif_set_unit_walking(struct block_list* bl, struct map_session_data *tsd, #endif #if PACKETVER >= 20120221 if (battle_config.show_monster_hp_bar && bl->type == BL_MOB && status_get_hp(bl) < status_get_max_hp(bl)) { - const struct mob_data *md = BL_UCCAST(BL_MOB, bl); p.maxHP = status_get_max_hp(bl); p.HP = status_get_hp(bl); - p.isBoss = (md->spawn != NULL && md->spawn->state.boss) ? 1 : 0; } else { p.maxHP = -1; p.HP = -1; - p.isBoss = 0; + } + if (bl->type == BL_MOB) { + const struct mob_data *md = BL_UCCAST(BL_MOB, bl); + p.isBoss = (md->spawn != NULL) ? md->spawn->state.boss : BTYPE_NONE; + } else { + p.isBoss = BTYPE_NONE; } #endif #if PACKETVER >= 20150513 @@ -3332,17 +3345,22 @@ void clif_changelook(struct block_list *bl,int type,int val) #if PACKETVER < 4 clif->sendlook(bl, bl->id, type, val, 0, target); #else - if(type == LOOK_WEAPON || type == LOOK_SHIELD) { - nullpo_retv(vd); - type = LOOK_WEAPON; - val = vd->weapon; - val2 = vd->shield; - } - if (clif->isdisguised(bl)) { - clif->sendlook(bl, bl->id, type, val, val2, AREA_WOS); - clif->sendlook(bl, -bl->id, type, val, val2, SELF); + if (bl->type != BL_NPC) { + if(type == LOOK_WEAPON || type == LOOK_SHIELD) { + nullpo_retv(vd); + type = LOOK_WEAPON; + val = vd->weapon; + val2 = vd->shield; + } + if (clif->isdisguised(bl)) { + clif->sendlook(bl, bl->id, type, val, val2, AREA_WOS); + clif->sendlook(bl, -bl->id, type, val, val2, SELF); + } else { + clif->sendlook(bl, bl->id, type, val, val2, target); + } } else { - clif->sendlook(bl, bl->id, type, val, val2, target); + struct npc_data *nd = BL_UCAST(BL_NPC, bl); + npc->refresh(nd); } #endif } diff --git a/src/map/map.c b/src/map/map.c index ff5c2aafd..5a647625f 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1840,7 +1840,7 @@ void map_addiddb(struct block_list *bl) struct mob_data *md = BL_UCAST(BL_MOB, bl); idb_put(map->mobid_db,bl->id,bl); - if( md->state.boss ) + if (md->state.boss == BTYPE_MVP) idb_put(map->bossid_db, bl->id, bl); } diff --git a/src/map/map.h b/src/map/map.h index 3221c73cd..5835b5abc 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -519,7 +519,7 @@ struct spawn_data { //0: Normal mob | 1: Standard summon, attacks mobs //2: Alchemist Marine Sphere | 3: Alchemist Summon Flora | 4: Summon Zanzou unsigned int dynamic : 1; ///< Whether this data is indexed by a map's dynamic mob list - unsigned int boss : 1; ///< 0: Non-boss monster | 1: Boss monster + uint8 boss; ///< 0: Non-boss monster | 1: Boss monster | 2: MVP } state; char name[NAME_LENGTH], eventname[EVENT_NAME_LENGTH]; //Name/event }; diff --git a/src/map/mob.c b/src/map/mob.c index 822b84bf4..208617b5d 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2686,7 +2686,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { return 5; // Note: Actually, it's 4. Oh well... // MvP tomb [GreenBox] - if (battle_config.mvp_tomb_enabled && md->spawn->state.boss && map->list[md->bl.m].flag.notomb != 1) + if (battle_config.mvp_tomb_enabled && md->spawn->state.boss == BTYPE_MVP && map->list[md->bl.m].flag.notomb != 1) mob->mvptomb_create(md, mvp_sd ? mvp_sd->status.name : NULL, time(NULL)); if( !rebirth ) { diff --git a/src/map/mob.h b/src/map/mob.h index 7f2accedf..83e022899 100644 --- a/src/map/mob.h +++ b/src/map/mob.h @@ -69,6 +69,12 @@ struct hplugin_data_store; // Disable this to make monsters not do any path search when looking for a target (old behavior). #define ACTIVEPATHSEARCH +enum e_bosstype { + BTYPE_NONE = 0, + BTYPE_BOSS = 1, + BTYPE_MVP = 2, +}; + //Mob skill states. enum MobSkillState { MSS_ANY = -1, @@ -181,10 +187,10 @@ struct mob_data { unsigned int spotted: 1; unsigned int npc_killmonster: 1; //for new killmonster behavior unsigned int rebirth: 1; // NPC_Rebirth used - unsigned int boss : 1; enum MobSkillState skillstate; unsigned char steal_flag; //number of steal tries (to prevent steal exploit on mobs with few items) [Lupus] unsigned char attacked_count; //For rude attacked. + uint8 boss; int provoke_flag; // Celest } state; struct guardian_data* guardian_data; diff --git a/src/map/npc.c b/src/map/npc.c index ecf7f878f..0702b2525 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -114,6 +114,8 @@ bool npc_db_checkid(int id) return true; if (id >= MAX_NPC_CLASS2_START && id < MAX_NPC_CLASS2_END) // Second range return true; + if (pc->db_checkid(id)) + return true; // Anything else is invalid return false; } @@ -2706,6 +2708,7 @@ struct npc_data *npc_create_npc(enum npc_subtype subtype, int m, int x, int y, u nd->area_size = AREA_SIZE + 1; nd->class_ = class_; nd->speed = 200; + nd->vd.class = 0; return nd; } @@ -3656,6 +3659,18 @@ void npc_setclass(struct npc_data* nd, short class_) { clif->spawn(&nd->bl);// fade in } +void npc_refresh(struct npc_data* nd) +{ + nullpo_retv(nd); + + if (map->list[nd->bl.m].users) { + // using here CLR_TRICKDEAD because other flags show effects. + // probably need use other flag or other way to refresh npc. + clif->clearunit_area(&nd->bl, CLR_TRICKDEAD); // fade out + clif->spawn(&nd->bl); // fade in + } +} + // @commands (script based) int npc_do_atcmd_event(struct map_session_data* sd, const char* command, const char* message, const char* eventname) { @@ -3843,7 +3858,12 @@ const char *npc_parse_mob(const char *w1, const char *w2, const char *w3, const memset(&mobspawn, 0, sizeof(struct spawn_data)); - mobspawn.state.boss = (strcmp(w2,"boss_monster") == 0 ? 1 : 0); + if (strcmp(w2, "boss_monster") == 0) + mobspawn.state.boss = BTYPE_MVP; + else if (strcmp(w2, "miniboss_monster") == 0) + mobspawn.state.boss = BTYPE_BOSS; + else + mobspawn.state.boss = BTYPE_NONE; // w1=<map name>,<x>,<y>,<xs>,<ys> // w3=<mob name>{,<mob level>} @@ -4662,7 +4682,7 @@ int npc_parsesrcfile(const char* filepath, bool runOnInit) { { p = npc->parse_duplicate(w1,w2,w3,w4, p, buffer, filepath, (runOnInit?NPO_ONINIT:NPO_NONE), &success); } - else if( (strcmp(w2,"monster") == 0 || strcmp(w2,"boss_monster") == 0) ) + else if (strcmp(w2,"monster") == 0 || strcmp(w2,"boss_monster") == 0 || strcmp(w2,"miniboss_monster") == 0) { p = npc->parse_mob(w1, w2, w3, w4, p, buffer, filepath, &success); } @@ -4994,7 +5014,6 @@ int do_init_npc(bool minimal) { npc_viewdb[i].class = i; for( i = MAX_NPC_CLASS2_START; i < MAX_NPC_CLASS2_END; i++ ) npc_viewdb2[i - MAX_NPC_CLASS2_START].class = i; - npc->ev_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, EVENT_NAME_LENGTH); npc->ev_label_db = strdb_alloc(DB_OPT_DUP_KEY|DB_OPT_RELEASE_DATA, NAME_LENGTH); npc->name_db = strdb_alloc(DB_OPT_BASE, NAME_LENGTH); @@ -5189,4 +5208,5 @@ void npc_defaults(void) { npc->market_delfromsql = npc_market_delfromsql; npc->market_delfromsql_sub = npc_market_delfromsql_sub; npc->db_checkid = npc_db_checkid; + npc->refresh = npc_refresh; } diff --git a/src/map/npc.h b/src/map/npc.h index 3bd11d536..8bb38f252 100644 --- a/src/map/npc.h +++ b/src/map/npc.h @@ -70,7 +70,7 @@ struct npc_parse; struct npc_data { struct block_list bl; struct unit_data *ud; - struct view_data *vd; + struct view_data vd; unsigned int option; struct npc_data *master_nd; short class_; @@ -309,6 +309,7 @@ struct npc_interface { void (*market_delfromsql) (struct npc_data *nd, unsigned short index); void (*market_delfromsql_sub) (const char *npcname, unsigned short index); bool (*db_checkid) (const int id); + void (*refresh) (struct npc_data* nd); /** * For the Secure NPC Timeout option (check config/Secure.h) [RR] **/ diff --git a/src/map/packets.h b/src/map/packets.h index e9d895440..3fcf1648a 100644 --- a/src/map/packets.h +++ b/src/map/packets.h @@ -10669,4 +10669,78 @@ packet(0x96e,-1,clif->ackmergeitems); packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME #endif +// 2017-10-25eRagexeRE +#if PACKETVER == 20171025 +// shuffle packets + packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND + packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x08a2,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME +#endif + +// 2017-11-01bRagexeRE +#if PACKETVER == 20171101 +// shuffle packets + packet(0x022d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD + packet(0x0368,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER + packet(0x0369,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO + packet(0x0438,6,clif->pTickSend,2); // CZ_REQUEST_TIME + packet(0x0835,6,clif->pDropItem,2,4); // CZ_ITEM_THROW + packet(0x085b,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER + packet(0x0860,6,clif->pGetCharNameRequest,2); // CZ_REQNAME + packet(0x086c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL + packet(0x0872,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS + packet(0x0876,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION + packet(0x0886,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD + packet(0x088e,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE + packet(0x0890,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE + packet(0x0895,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK + packet(0x0899,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ + packet(0x089b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE + packet(0x089c,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER + packet(0x08a0,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY + packet(0x08ab,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES + packet(0x08ad,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK + packet(0x091b,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE + packet(0x0939,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE + packet(0x094a,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE + packet(0x094d,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID + packet(0x0952,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX + packet(0x0957,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT + packet(0x095a,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE + packet(0x0962,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP + packet(0x0966,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND +#endif + +// 2017-11-01bRagexeRE +#if PACKETVER >= 20171101 +// new packets + packet(0x0ae1,28); +#endif + #endif /* MAP_PACKETS_H */ diff --git a/src/map/packets_keys.h b/src/map/packets_keys.h index 85796813a..005c3790b 100644 --- a/src/map/packets_keys.h +++ b/src/map/packets_keys.h @@ -2,7 +2,7 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2013-2015 Hercules Dev Team + * Copyright (C) 2013-2017 Hercules Dev Team * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -2057,7 +2057,7 @@ packetKeys(0x03FA5A97,0x20B802D5,0x339F1977); #endif -// 2017-06-07bRagexeRE +// 2017-06-07bRagexeRE, 2017-06-07cRagexeRE #if PACKETVER == 20170607 packetKeys(0x50564ACD,0x79CA4E15,0x405F4894); #endif @@ -2152,6 +2152,16 @@ packetKeys(0x2CAA109C,0x158C1EC2,0x7A5E58F3); #endif +// 2017-10-25bRagexeRE, 2017-10-25cRagexeRE, 2017-10-25dRagexeRE, 2017-10-25eRagexeRE +#if PACKETVER == 20171025 + packetKeys(0x165C565C,0x565C565C,0x565C565C); +#endif + +// 2017-11-01bRagexeRE +#if PACKETVER == 20171101 + packetKeys(0x7056317F,0x7EEE0589,0x02672373); +#endif + #if defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3) packetKeys(OBFUSCATIONKEY1,OBFUSCATIONKEY2,OBFUSCATIONKEY3); diff --git a/src/map/script.c b/src/map/script.c index d2101d21f..5773457a7 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -14270,31 +14270,36 @@ BUILDIN(setequipoption) if (equip_index > 0 && equip_index <= ARRAYLENGTH(script->equip)) { if ((i = pc->checkequip(sd, script->equip[equip_index - 1])) == -1) { - ShowError("buildin_setequipoptioninfo: No equipment is equipped in the given index %d.\n", equip_index); + ShowError("buildin_setequipoption: No equipment is equipped in the given index %d.\n", equip_index); script_pushint(st, 0); return false; } } else { - ShowError("buildin_setequipoptioninfo: Invalid equipment index %d provided.\n", equip_index); + ShowError("buildin_setequipoption: Invalid equipment index %d provided.\n", equip_index); script_pushint(st, 0); return false; } if (sd->status.inventory[i].nameid != 0) { - - if ((ito = itemdb->option_exists(opt_index)) == NULL) { - script_pushint(st, 0); - ShowError("buildin_setequipotion: Option index %d does not exist!\n", opt_index); - return false; - } else if (value < -INT16_MAX || value > INT16_MAX) { - script_pushint(st, 0); - ShowError("buildin_setequipotion: Option value %d exceeds maximum limit (%d to %d) for type!\n", value, -INT16_MAX, INT16_MAX); - return false; + if (opt_index == 0) { + // Remove the option + sd->status.inventory[i].option[slot-1].index = 0; + sd->status.inventory[i].option[slot-1].value = 0; + } else { + if ((ito = itemdb->option_exists(opt_index)) == NULL) { + script_pushint(st, 0); + ShowError("buildin_setequipotion: Option index %d does not exist!\n", opt_index); + return false; + } else if (value < -INT16_MAX || value > INT16_MAX) { + script_pushint(st, 0); + ShowError("buildin_setequipotion: Option value %d exceeds maximum limit (%d to %d) for type!\n", value, -INT16_MAX, INT16_MAX); + return false; + } + /* Add Option Index */ + sd->status.inventory[i].option[slot-1].index = ito->index; + /* Add Option Value */ + sd->status.inventory[i].option[slot-1].value = value; } - /* Add Option Index */ - sd->status.inventory[i].option[slot-1].index = ito->index; - /* Add Option Value */ - sd->status.inventory[i].option[slot-1].value = value; /* Unequip and simulate deletion of the item. */ pc->unequipitem(sd, i, PCUNEQUIPITEM_FORCE); // status calc will happen in pc->equipitem() below @@ -15866,11 +15871,12 @@ enum logmes_type { /*========================================== * Allows player to write logs (i.e. Bank NPC, etc) [Lupus] *------------------------------------------*/ -BUILDIN(logmes) { +BUILDIN(logmes) +{ const char *str = script_getstr(st, 2); struct map_session_data *sd = script->rid2sd(st); enum logmes_type type = LOGMES_NPC; - nullpo_retr(sd, false); + nullpo_retr(false, sd); if (script_hasdata(st, 3)) { type = script_getnum(st, 3); @@ -18211,6 +18217,8 @@ BUILDIN(setunitdata) case UDT_INTIMACY: case UDT_LIFETIME: case UDT_MERC_KILLCOUNT: + case UDT_ROBE: + case UDT_BODY2: setunitdata_check_min(4, 0); break; case UDT_MASTERAID: @@ -19149,6 +19157,40 @@ BUILDIN(setunitdata) case UDT_DMOTION: nd->status.dmotion = (unsigned short) val; break; + case UDT_SEX: + nd->vd.sex = (char)val; + npc->refresh(nd); + break; + case UDT_HAIRSTYLE: + clif->changelook(bl, LOOK_HAIR, val); + break; + case UDT_HAIRCOLOR: + clif->changelook(bl, LOOK_HAIR_COLOR, val); + break; + case UDT_HEADBOTTOM: + clif->changelook(bl, LOOK_HEAD_BOTTOM, val); + break; + case UDT_HEADMIDDLE: + clif->changelook(bl, LOOK_HEAD_MID, val); + break; + case UDT_HEADTOP: + clif->changelook(bl, LOOK_HEAD_TOP, val); + break; + case UDT_CLOTHCOLOR: + clif->changelook(bl, LOOK_CLOTHES_COLOR, val); + break; + case UDT_SHIELD: + clif->changelook(bl, LOOK_SHIELD, val); + break; + case UDT_WEAPON: + clif->changelook(bl, LOOK_WEAPON, val); + break; + case UDT_ROBE: + clif->changelook(bl, LOOK_ROBE, val); + break; + case UDT_BODY2: + clif->changelook(bl, LOOK_BODY2, val); + break; default: ShowWarning("buildin_setunitdata: Invalid data type '%s' for NPC unit.\n", udtype); script_pushint(st, 0); @@ -19559,6 +19601,18 @@ BUILDIN(getunitdata) case UDT_AMOTION: script_pushint(st, nd->status.amotion); break; case UDT_ADELAY: script_pushint(st, nd->status.adelay); break; case UDT_DMOTION: script_pushint(st, nd->status.dmotion); break; + case UDT_SEX: script_pushint(st, nd->vd.sex); break; + case UDT_CLASS: script_pushint(st, nd->vd.class); break; + case UDT_HAIRSTYLE: script_pushint(st, nd->vd.hair_style); break; + case UDT_HAIRCOLOR: script_pushint(st, nd->vd.hair_color); break; + case UDT_HEADBOTTOM: script_pushint(st, nd->vd.head_bottom); break; + case UDT_HEADMIDDLE: script_pushint(st, nd->vd.head_mid); break; + case UDT_HEADTOP: script_pushint(st, nd->vd.head_top); break; + case UDT_CLOTHCOLOR: script_pushint(st, nd->vd.cloth_color); break; + case UDT_SHIELD: script_pushint(st, nd->vd.shield); break; + case UDT_WEAPON: script_pushint(st, nd->vd.weapon); break; + case UDT_ROBE: script_pushint(st, nd->vd.robe); break; + case UDT_BODY2: script_pushint(st, nd->vd.body_style); break; default: ShowWarning("buildin_getunitdata: Invalid data type '%s' for NPC unit.\n", udtype); script_pushint(st, 0); @@ -20446,15 +20500,18 @@ BUILDIN(questinfo) quest_id = script_getnum(st, 2); icon = script_getnum(st, 3); - #if PACKETVER >= 20120410 - if(icon < 0 || (icon > 8 && icon != 9999) || icon == 7) - icon = 9999; // Default to nothing if icon id is invalid. - #else - if(icon < 0 || icon > 7) - icon = 0; - else - icon = icon + 1; - #endif +#if PACKETVER >= 20170315 + if (icon < 0 || (icon > 10 && icon != 9999)) + icon = 9999; +#elif PACKETVER >= 20120410 + if (icon < 0 || (icon > 8 && icon != 9999) || icon == 7) + icon = 9999; // Default to nothing if icon id is invalid. +#else + if (icon < 0 || icon > 7) + icon = 0; + else + icon = icon + 1; +#endif qi.quest_id = quest_id; qi.icon = (unsigned char)icon; @@ -20648,15 +20705,18 @@ BUILDIN(showevent) } } - #if PACKETVER >= 20120410 - if(icon < 0 || (icon > 8 && icon != 9999) || icon == 7) - icon = 9999; // Default to nothing if icon id is invalid. - #else - if(icon < 0 || icon > 7) - icon = 0; - else - icon = icon + 1; - #endif +#if PACKETVER >= 20170315 + if (icon < 0 || (icon > 10 && icon != 9999)) + icon = 9999; +#elif PACKETVER >= 20120410 + if (icon < 0 || (icon > 8 && icon != 9999) || icon == 7) + icon = 9999; // Default to nothing if icon id is invalid. +#else + if (icon < 0 || icon > 7) + icon = 0; + else + icon = icon + 1; +#endif clif->quest_show_event(sd, &nd->bl, icon, color); return true; @@ -23505,7 +23565,7 @@ BUILDIN(dressroom) clif->dressroom_open(sd, 0); break; default: - ShowWarning("script:dressroom: unknown mode (%i).\n", mode); + ShowWarning("script:dressroom: unknown mode (%u).\n", mode); script_pushint(st, 0); return false; } diff --git a/src/map/script.h b/src/map/script.h index 283afa496..b2ab7510c 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -423,6 +423,8 @@ enum script_unit_data_types { UDT_LIFETIME, UDT_MERC_KILLCOUNT, UDT_STATPOINT, + UDT_ROBE, + UDT_BODY2, UDT_MAX }; diff --git a/src/map/status.c b/src/map/status.c index e0893aa36..ccd1e6b11 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6809,7 +6809,7 @@ struct view_data *status_get_viewdata(struct block_list *bl) case BL_PC: return &BL_UCAST(BL_PC, bl)->vd; case BL_MOB: return BL_UCAST(BL_MOB, bl)->vd; case BL_PET: return &BL_UCAST(BL_PET, bl)->vd; - case BL_NPC: return BL_UCAST(BL_NPC, bl)->vd; + case BL_NPC: return &BL_UCAST(BL_NPC, bl)->vd; case BL_HOM: return BL_UCAST(BL_HOM, bl)->vd; case BL_MER: return BL_UCAST(BL_MER, bl)->vd; case BL_ELEM: return BL_UCAST(BL_ELEM, bl)->vd; @@ -6927,10 +6927,14 @@ void status_set_viewdata(struct block_list *bl, int class_) case BL_NPC: { struct npc_data *nd = BL_UCAST(BL_NPC, bl); - if (vd != NULL) - nd->vd = vd; - else + if (vd != NULL) { + memcpy(&nd->vd, vd, sizeof(struct view_data)); + } else if (pc->db_checkid(class_)) { + memset(&nd->vd, 0, sizeof(struct view_data)); + nd->vd.class = class_; + } else { ShowError("status_set_viewdata (NPC): No view data for class %d (name=%s)\n", class_, nd->name); + } } break; case BL_HOM: //[blackhole89] diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc index d6ce83912..9482e6c15 100644 --- a/src/plugins/HPMHooking/HPMHooking.Defs.inc +++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc @@ -3848,6 +3848,32 @@ typedef void (*HPMHOOK_pre_login_config_set_defaults) (void); typedef void (*HPMHOOK_post_login_config_set_defaults) (void); typedef bool (*HPMHOOK_pre_login_config_read) (const char **filename, bool *included); typedef bool (*HPMHOOK_post_login_config_read) (bool retVal___, const char *filename, bool included); +typedef bool (*HPMHOOK_pre_login_config_read_inter) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_inter) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef bool (*HPMHOOK_pre_login_config_read_console) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_console) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef bool (*HPMHOOK_pre_login_config_read_log) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_log) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef bool (*HPMHOOK_pre_login_config_read_account) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_account) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef bool (*HPMHOOK_pre_login_config_read_permission) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_permission) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef bool (*HPMHOOK_pre_login_config_read_permission_hash) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_permission_hash) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef bool (*HPMHOOK_pre_login_config_read_permission_blacklist) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_permission_blacklist) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef bool (*HPMHOOK_pre_login_config_read_users) (const char **filename, struct config_t **config, bool *imported); +typedef bool (*HPMHOOK_post_login_config_read_users) (bool retVal___, const char *filename, struct config_t *config, bool imported); +typedef void (*HPMHOOK_pre_login_clear_dnsbl_servers) (void); +typedef void (*HPMHOOK_post_login_clear_dnsbl_servers) (void); +typedef void (*HPMHOOK_pre_login_config_set_dnsbl_servers) (struct config_setting_t **setting); +typedef void (*HPMHOOK_post_login_config_set_dnsbl_servers) (struct config_setting_t *setting); +typedef void (*HPMHOOK_pre_login_clear_client_hash_nodes) (void); +typedef void (*HPMHOOK_post_login_clear_client_hash_nodes) (void); +typedef void (*HPMHOOK_pre_login_config_set_md5hash) (struct config_setting_t **setting); +typedef void (*HPMHOOK_post_login_config_set_md5hash) (struct config_setting_t *setting); +typedef uint16 (*HPMHOOK_pre_login_convert_users_to_colors) (uint16 *users); +typedef uint16 (*HPMHOOK_post_login_convert_users_to_colors) (uint16 retVal___, uint16 users); #endif // LOGIN_LOGIN_H #ifdef CHAR_LOGINIF_H /* loginif */ typedef void (*HPMHOOK_pre_loginif_init) (void); @@ -5124,6 +5150,8 @@ typedef void (*HPMHOOK_pre_npc_market_delfromsql_sub) (const char **npcname, uns typedef void (*HPMHOOK_post_npc_market_delfromsql_sub) (const char *npcname, unsigned short index); typedef bool (*HPMHOOK_pre_npc_db_checkid) (const int *id); typedef bool (*HPMHOOK_post_npc_db_checkid) (bool retVal___, const int id); +typedef void (*HPMHOOK_pre_npc_refresh) (struct npc_data **nd); +typedef void (*HPMHOOK_post_npc_refresh) (struct npc_data *nd); typedef int (*HPMHOOK_pre_npc_secure_timeout_timer) (int *tid, int64 *tick, int *id, intptr_t *data); typedef int (*HPMHOOK_post_npc_secure_timeout_timer) (int retVal___, int tid, int64 tick, int id, intptr_t data); #endif // MAP_NPC_H diff --git a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc index 57c1e0233..9c38c0c4c 100644 --- a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc @@ -376,6 +376,32 @@ struct { struct HPMHookPoint *HP_login_config_set_defaults_post; struct HPMHookPoint *HP_login_config_read_pre; struct HPMHookPoint *HP_login_config_read_post; + struct HPMHookPoint *HP_login_config_read_inter_pre; + struct HPMHookPoint *HP_login_config_read_inter_post; + struct HPMHookPoint *HP_login_config_read_console_pre; + struct HPMHookPoint *HP_login_config_read_console_post; + struct HPMHookPoint *HP_login_config_read_log_pre; + struct HPMHookPoint *HP_login_config_read_log_post; + struct HPMHookPoint *HP_login_config_read_account_pre; + struct HPMHookPoint *HP_login_config_read_account_post; + struct HPMHookPoint *HP_login_config_read_permission_pre; + struct HPMHookPoint *HP_login_config_read_permission_post; + struct HPMHookPoint *HP_login_config_read_permission_hash_pre; + struct HPMHookPoint *HP_login_config_read_permission_hash_post; + struct HPMHookPoint *HP_login_config_read_permission_blacklist_pre; + struct HPMHookPoint *HP_login_config_read_permission_blacklist_post; + struct HPMHookPoint *HP_login_config_read_users_pre; + struct HPMHookPoint *HP_login_config_read_users_post; + struct HPMHookPoint *HP_login_clear_dnsbl_servers_pre; + struct HPMHookPoint *HP_login_clear_dnsbl_servers_post; + struct HPMHookPoint *HP_login_config_set_dnsbl_servers_pre; + struct HPMHookPoint *HP_login_config_set_dnsbl_servers_post; + struct HPMHookPoint *HP_login_clear_client_hash_nodes_pre; + struct HPMHookPoint *HP_login_clear_client_hash_nodes_post; + struct HPMHookPoint *HP_login_config_set_md5hash_pre; + struct HPMHookPoint *HP_login_config_set_md5hash_post; + struct HPMHookPoint *HP_login_convert_users_to_colors_pre; + struct HPMHookPoint *HP_login_convert_users_to_colors_post; struct HPMHookPoint *HP_md5_string_pre; struct HPMHookPoint *HP_md5_string_post; struct HPMHookPoint *HP_md5_binary_pre; @@ -1049,6 +1075,32 @@ struct { int HP_login_config_set_defaults_post; int HP_login_config_read_pre; int HP_login_config_read_post; + int HP_login_config_read_inter_pre; + int HP_login_config_read_inter_post; + int HP_login_config_read_console_pre; + int HP_login_config_read_console_post; + int HP_login_config_read_log_pre; + int HP_login_config_read_log_post; + int HP_login_config_read_account_pre; + int HP_login_config_read_account_post; + int HP_login_config_read_permission_pre; + int HP_login_config_read_permission_post; + int HP_login_config_read_permission_hash_pre; + int HP_login_config_read_permission_hash_post; + int HP_login_config_read_permission_blacklist_pre; + int HP_login_config_read_permission_blacklist_post; + int HP_login_config_read_users_pre; + int HP_login_config_read_users_post; + int HP_login_clear_dnsbl_servers_pre; + int HP_login_clear_dnsbl_servers_post; + int HP_login_config_set_dnsbl_servers_pre; + int HP_login_config_set_dnsbl_servers_post; + int HP_login_clear_client_hash_nodes_pre; + int HP_login_clear_client_hash_nodes_post; + int HP_login_config_set_md5hash_pre; + int HP_login_config_set_md5hash_post; + int HP_login_convert_users_to_colors_pre; + int HP_login_convert_users_to_colors_post; int HP_md5_string_pre; int HP_md5_string_post; int HP_md5_binary_pre; diff --git a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc index 125c54a12..ba4b941a9 100644 --- a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc @@ -211,6 +211,19 @@ struct HookingPointData HookingPoints[] = { { HP_POP(login->parse_request_connection, HP_login_parse_request_connection) }, { HP_POP(login->config_set_defaults, HP_login_config_set_defaults) }, { HP_POP(login->config_read, HP_login_config_read) }, + { HP_POP(login->config_read_inter, HP_login_config_read_inter) }, + { HP_POP(login->config_read_console, HP_login_config_read_console) }, + { HP_POP(login->config_read_log, HP_login_config_read_log) }, + { HP_POP(login->config_read_account, HP_login_config_read_account) }, + { HP_POP(login->config_read_permission, HP_login_config_read_permission) }, + { HP_POP(login->config_read_permission_hash, HP_login_config_read_permission_hash) }, + { HP_POP(login->config_read_permission_blacklist, HP_login_config_read_permission_blacklist) }, + { HP_POP(login->config_read_users, HP_login_config_read_users) }, + { HP_POP(login->clear_dnsbl_servers, HP_login_clear_dnsbl_servers) }, + { HP_POP(login->config_set_dnsbl_servers, HP_login_config_set_dnsbl_servers) }, + { HP_POP(login->clear_client_hash_nodes, HP_login_clear_client_hash_nodes) }, + { HP_POP(login->config_set_md5hash, HP_login_config_set_md5hash) }, + { HP_POP(login->convert_users_to_colors, HP_login_convert_users_to_colors) }, /* md5_interface */ { HP_POP(md5->string, HP_md5_string) }, { HP_POP(md5->binary, HP_md5_binary) }, diff --git a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc index 964d46b0a..0dbf2e5ae 100644 --- a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc @@ -4716,6 +4716,353 @@ bool HP_login_config_read(const char *filename, bool included) { } return retVal___; } +bool HP_login_config_read_inter(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_inter_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_inter_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_inter_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_inter(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_inter_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_inter_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_inter_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +bool HP_login_config_read_console(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_console_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_console_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_console_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_console(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_console_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_console_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_console_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +bool HP_login_config_read_log(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_log_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_log_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_log_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_log(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_log_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_log_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_log_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +bool HP_login_config_read_account(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_account_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_account_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_account_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_account(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_account_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_account_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_account_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +bool HP_login_config_read_permission(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_permission_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_permission_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_permission_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_permission(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_permission_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_permission_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_permission_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +bool HP_login_config_read_permission_hash(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_permission_hash_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_permission_hash_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_permission_hash_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_permission_hash(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_permission_hash_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_permission_hash_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_permission_hash_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +bool HP_login_config_read_permission_blacklist(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_permission_blacklist_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_permission_blacklist_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_permission_blacklist_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_permission_blacklist(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_permission_blacklist_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_permission_blacklist_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_permission_blacklist_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +bool HP_login_config_read_users(const char *filename, struct config_t *config, bool imported) { + int hIndex = 0; + bool retVal___ = false; + if (HPMHooks.count.HP_login_config_read_users_pre > 0) { + bool (*preHookFunc) (const char **filename, struct config_t **config, bool *imported); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_users_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_read_users_pre[hIndex].func; + retVal___ = preHookFunc(&filename, &config, &imported); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.config_read_users(filename, config, imported); + } + if (HPMHooks.count.HP_login_config_read_users_post > 0) { + bool (*postHookFunc) (bool retVal___, const char *filename, struct config_t *config, bool imported); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_read_users_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_read_users_post[hIndex].func; + retVal___ = postHookFunc(retVal___, filename, config, imported); + } + } + return retVal___; +} +void HP_login_clear_dnsbl_servers(void) { + int hIndex = 0; + if (HPMHooks.count.HP_login_clear_dnsbl_servers_pre > 0) { + void (*preHookFunc) (void); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_clear_dnsbl_servers_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_clear_dnsbl_servers_pre[hIndex].func; + preHookFunc(); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.login.clear_dnsbl_servers(); + } + if (HPMHooks.count.HP_login_clear_dnsbl_servers_post > 0) { + void (*postHookFunc) (void); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_clear_dnsbl_servers_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_clear_dnsbl_servers_post[hIndex].func; + postHookFunc(); + } + } + return; +} +void HP_login_config_set_dnsbl_servers(struct config_setting_t *setting) { + int hIndex = 0; + if (HPMHooks.count.HP_login_config_set_dnsbl_servers_pre > 0) { + void (*preHookFunc) (struct config_setting_t **setting); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_set_dnsbl_servers_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_set_dnsbl_servers_pre[hIndex].func; + preHookFunc(&setting); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.login.config_set_dnsbl_servers(setting); + } + if (HPMHooks.count.HP_login_config_set_dnsbl_servers_post > 0) { + void (*postHookFunc) (struct config_setting_t *setting); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_set_dnsbl_servers_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_set_dnsbl_servers_post[hIndex].func; + postHookFunc(setting); + } + } + return; +} +void HP_login_clear_client_hash_nodes(void) { + int hIndex = 0; + if (HPMHooks.count.HP_login_clear_client_hash_nodes_pre > 0) { + void (*preHookFunc) (void); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_clear_client_hash_nodes_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_clear_client_hash_nodes_pre[hIndex].func; + preHookFunc(); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.login.clear_client_hash_nodes(); + } + if (HPMHooks.count.HP_login_clear_client_hash_nodes_post > 0) { + void (*postHookFunc) (void); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_clear_client_hash_nodes_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_clear_client_hash_nodes_post[hIndex].func; + postHookFunc(); + } + } + return; +} +void HP_login_config_set_md5hash(struct config_setting_t *setting) { + int hIndex = 0; + if (HPMHooks.count.HP_login_config_set_md5hash_pre > 0) { + void (*preHookFunc) (struct config_setting_t **setting); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_set_md5hash_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_config_set_md5hash_pre[hIndex].func; + preHookFunc(&setting); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.login.config_set_md5hash(setting); + } + if (HPMHooks.count.HP_login_config_set_md5hash_post > 0) { + void (*postHookFunc) (struct config_setting_t *setting); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_config_set_md5hash_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_config_set_md5hash_post[hIndex].func; + postHookFunc(setting); + } + } + return; +} +uint16 HP_login_convert_users_to_colors(uint16 users) { + int hIndex = 0; + uint16 retVal___ = 0; + if (HPMHooks.count.HP_login_convert_users_to_colors_pre > 0) { + uint16 (*preHookFunc) (uint16 *users); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_convert_users_to_colors_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_login_convert_users_to_colors_pre[hIndex].func; + retVal___ = preHookFunc(&users); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return retVal___; + } + } + { + retVal___ = HPMHooks.source.login.convert_users_to_colors(users); + } + if (HPMHooks.count.HP_login_convert_users_to_colors_post > 0) { + uint16 (*postHookFunc) (uint16 retVal___, uint16 users); + for (hIndex = 0; hIndex < HPMHooks.count.HP_login_convert_users_to_colors_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_login_convert_users_to_colors_post[hIndex].func; + retVal___ = postHookFunc(retVal___, users); + } + } + return retVal___; +} /* md5_interface */ void HP_md5_string(const char *string, char *output) { int hIndex = 0; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc index 4bdc167f2..c3e6d5529 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc @@ -3918,6 +3918,8 @@ struct { struct HPMHookPoint *HP_npc_market_delfromsql_sub_post; struct HPMHookPoint *HP_npc_db_checkid_pre; struct HPMHookPoint *HP_npc_db_checkid_post; + struct HPMHookPoint *HP_npc_refresh_pre; + struct HPMHookPoint *HP_npc_refresh_post; struct HPMHookPoint *HP_npc_secure_timeout_timer_pre; struct HPMHookPoint *HP_npc_secure_timeout_timer_post; struct HPMHookPoint *HP_nullpo_assert_report_pre; @@ -10117,6 +10119,8 @@ struct { int HP_npc_market_delfromsql_sub_post; int HP_npc_db_checkid_pre; int HP_npc_db_checkid_post; + int HP_npc_refresh_pre; + int HP_npc_refresh_post; int HP_npc_secure_timeout_timer_pre; int HP_npc_secure_timeout_timer_post; int HP_nullpo_assert_report_pre; diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc index 34b79bff8..15052b7f1 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc @@ -2009,6 +2009,7 @@ struct HookingPointData HookingPoints[] = { { HP_POP(npc->market_delfromsql, HP_npc_market_delfromsql) }, { HP_POP(npc->market_delfromsql_sub, HP_npc_market_delfromsql_sub) }, { HP_POP(npc->db_checkid, HP_npc_db_checkid) }, + { HP_POP(npc->refresh, HP_npc_refresh) }, { HP_POP(npc->secure_timeout_timer, HP_npc_secure_timeout_timer) }, /* nullpo_interface */ { HP_POP(nullpo->assert_report, HP_nullpo_assert_report) }, diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc index d0d062f4e..69658949c 100644 --- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc @@ -52089,6 +52089,32 @@ bool HP_npc_db_checkid(const int id) { } return retVal___; } +void HP_npc_refresh(struct npc_data *nd) { + int hIndex = 0; + if (HPMHooks.count.HP_npc_refresh_pre > 0) { + void (*preHookFunc) (struct npc_data **nd); + *HPMforce_return = false; + for (hIndex = 0; hIndex < HPMHooks.count.HP_npc_refresh_pre; hIndex++) { + preHookFunc = HPMHooks.list.HP_npc_refresh_pre[hIndex].func; + preHookFunc(&nd); + } + if (*HPMforce_return) { + *HPMforce_return = false; + return; + } + } + { + HPMHooks.source.npc.refresh(nd); + } + if (HPMHooks.count.HP_npc_refresh_post > 0) { + void (*postHookFunc) (struct npc_data *nd); + for (hIndex = 0; hIndex < HPMHooks.count.HP_npc_refresh_post; hIndex++) { + postHookFunc = HPMHooks.list.HP_npc_refresh_post[hIndex].func; + postHookFunc(nd); + } + } + return; +} int HP_npc_secure_timeout_timer(int tid, int64 tick, int id, intptr_t data) { int hIndex = 0; int retVal___ = 0; |