diff options
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 |