diff options
author | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-08-15 17:13:04 +0000 |
---|---|---|
committer | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-08-15 17:13:04 +0000 |
commit | c25d6f5e6c3f092f70bf28cb0a3ac71e2ab89ead (patch) | |
tree | b55395038c48dc99235e7385fbd43df5645e464a /npc/sample/monster_controller.txt | |
parent | 86b35597e549392cf2db3974fc140a50e021b5a0 (diff) | |
download | hercules-c25d6f5e6c3f092f70bf28cb0a3ac71e2ab89ead.tar.gz hercules-c25d6f5e6c3f092f70bf28cb0a3ac71e2ab89ead.tar.bz2 hercules-c25d6f5e6c3f092f70bf28cb0a3ac71e2ab89ead.tar.xz hercules-c25d6f5e6c3f092f70bf28cb0a3ac71e2ab89ead.zip |
* Some serious code cleanups
- adjusted @reloadbattleconf to not depend on variable ordering
- changed all battle vars to 'int' (removes pointless duplicit coding)
- added min, max and default columns to battle config data structure
- added properly bounded values for these columns (or at least tried to)
- battle-conf loading will now complain if it finds unknown settings,
and will reject values that are outside of the allowed range
- added CHATROOM_TITLE_SIZE and CHATROOM_PASS_SIZE
- partially cleaned up chatroom manipulation code
* Fixed 'Job_Professer' typo in mage jobchange quest
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11017 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'npc/sample/monster_controller.txt')
-rw-r--r-- | npc/sample/monster_controller.txt | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/npc/sample/monster_controller.txt b/npc/sample/monster_controller.txt new file mode 100644 index 000000000..4d368467c --- /dev/null +++ b/npc/sample/monster_controller.txt @@ -0,0 +1,198 @@ +// Variables Logging: +// .mc_moblist[] - ID list of mobs +prontera,180,200,4 script Monster Controller 123,{ + function display_info { + getmobdata getarg(0), .@mob_data; + set .@array_size, getarraysize(.@mob_data); + for(set .@i, 0; .@i < .@array_size; set .@i, .@i + 1){ + mes .@i + " - " + .@mob_data[.@i]; + } + return; + } + + function remove_mob { + removemob getarg(0); + set .@mob_size, getarraysize(.mc_moblist); + for(set .@i, 0; .@i < .@mob_size; set .@i, .@i + 1){ + if(.mc_moblist[.@i] == getarg(0)) + deletearray .mc_moblist[.@i], 1; + } + } + + function make_menu { + set .@array_size, getarraysize(.mc_moblist); + set .@tmp_str$, ""; + for(set .@i, 0; .@i < .@array_size; set .@i, .@i + 1){ + set .@tmp_str$, .@tmp_str$ + .mc_moblist[.@i] + ":"; + } + select .@tmp_str$; + return .mc_moblist[@menu-1]; + } + + function summon_mob { + set .@mob_size, getarraysize(.mc_moblist); + set .mc_moblist[.@mob_size], spawnmob("Slave - " + .@mob_size, getarg(0), "prontera", 180, 200); + mobattach .mc_moblist[.@mob_size]; + setmobdata .mc_moblist[.@mob_size], 25, + AI_ACTION_TYPE_ATTACK| + AI_ACTION_TYPE_DETECT| + AI_ACTION_TYPE_DEAD| + AI_ACTION_TYPE_ASSIST| + AI_ACTION_TYPE_KILL| + AI_ACTION_TYPE_UNLOCK| + AI_ACTION_TYPE_WALKACK| + AI_ACTION_TYPE_WARPACK; + return; + } + + function list_mobs { + set .@mob_size, getarraysize(.mc_moblist); + for(set .@i, 0; .@i < .@mob_size; set .@i, .@i + 1){ + mes "- " + .mc_moblist[.@i]; + } + return; + } + + if(getarraysize(.ai_action) == 4){ + mapannounce "prontera", "[Mob Control] AI Action Received from " + .ai_action[AI_ACTION_SRC] + "!",16; + switch(.ai_action[AI_ACTION_TAR_TYPE]){ + case AI_ACTION_TAR_TYPE_PC: + set .@action_from$, "Player"; + set .@action_name$, rid2name(.ai_action[AI_ACTION_TAR]); + break; + case AI_ACTION_TAR_TYPE_MOB: + set .@action_from$, "Monster"; + set .@action_name$, rid2name(.ai_action[AI_ACTION_TAR]); + break; + case AI_ACTION_TAR_TYPE_PET: + set .@action_from$, "Pet"; + set .@action_name$, rid2name(.ai_action[AI_ACTION_TAR]); + break; + case AI_ACTION_TAR_TYPE_HOMUN: + set .@action_from$, "Homunculus"; + set .@action_name$, rid2name(.ai_action[AI_ACTION_TAR]); + break; + default: + set .@action_from$, "Unknown"; + set .@action_name$, ""+.ai_action[AI_ACTION_TAR]; + break; + } + + switch(.ai_action[AI_ACTION_TYPE]){ + case AI_ACTION_TYPE_ATTACK: + set .@action_type$, "Attacked by"; + break; + case AI_ACTION_TYPE_DETECT: + set .@action_type$, "Detected"; + break; + case AI_ACTION_TYPE_DEAD: + set .@action_type$, "Killed by"; + remove_mob .ai_action[AI_ACTION_SRC]; + break; + case AI_ACTION_TYPE_ASSIST: + set .@action_type$, "Assisting"; + break; + case AI_ACTION_TYPE_UNLOCK: + set .@action_type$, "Unlocked target"; + break; + case AI_ACTION_TYPE_KILL: + set .@action_type$, "Killed"; + break; + case AI_ACTION_TYPE_WALKACK: + set .@action_type$, "Completed Walking"; + break; + case AI_ACTION_TYPE_WARPACK: + set .@action_type$, "Warped"; + break; + } + + mapannounce "prontera", "Details - " + .@action_type$ + " [" + .@action_from$ + "] " + .@action_name$ + "!", 16; + deletearray .ai_action, 4; + end; + } + +L_MainMenu: + mes "[Monster Controller]"; + mes "Current active monsters:"; + list_mobs; + switch(select("Summon","Remove","Information","Actions")){ + case 1: // Summon + next; + mes "[Monster Controller]"; + mes "Monster ID -"; + input @mob_id; + next; + summon_mob @mob_id; + goto L_MainMenu; + break; + case 2: // Remove + remove_mob make_menu(); + next; + goto L_MainMenu; + break; + case 3: // Information + set .@tmp, make_menu(); + next; + mes "[Monster Info]"; + display_info .@tmp; + next; + goto L_MainMenu; + break; + case 4: // Actions + goto L_AttackMenu; + break; + } + +L_AttackMenu: + switch(select("Walk","Follow","Attack","Stop","Defend","Talk","Emote","Random Walk","Callback","Back")){ + case 1: // Walk + set .@src, make_menu(); + input .@x; + input .@y; + mobwalk .@src,.@x,.@y; // Mode 1: Walk to location. + break; + case 2: // Follow + set .@src, make_menu(); + input .@tar; + mobwalk .@src, .@tar; // Mode 2: Walk to target. + break; + case 3: // Attack + set .@src, make_menu(); + input .@tar; + mobattack .@src, .@tar; + break; + case 4: // Stop + set .@src, make_menu(); + mobstop .@src; + break; + case 5: // Defend/Assist + set .@src, make_menu(); + input .@tar; + mobassist .@src, .@tar; + break; + case 6: // Talk + set .@src, make_menu(); + input .@text$; + mobtalk .@src, .@text$; + break; + case 7: // Emote + set .@src, make_menu(); + input .@emote; + mobemote .@src, .@emote; + break; + case 8: + set .@src, make_menu(); + input .@flag; + mobrandomwalk .@src, .@flag; + break; + case 9: + set .@src, make_menu(); + input .@flag; + setmobdata .@src, 25, .@flag; + break; + case 9: + next; + goto L_MainMenu; + } + goto L_AttackMenu; +}
\ No newline at end of file |