// declaration int VIP_HP[2], VIP_ID[2]; // initialization VIP_HP[0] = VIP_HP[1] = 1000; VIP_ID[0] = VIP_ID[1] = -1; // AI update in rule vip type 0 void AI_OnUpdate_VIP_0(int id) { int chara_hp = GetCharaAttrib(id, CHARA_HP); int team = GetCharaAttrib(id, CHARA_TEAM) - 1; // team = 0, means team A, team = 1, means team B int s = GetNumCharas(); int deadfriend = 0; int friend = 0; int enemy = 0; int c; // get team statistic for(int i = 0 ; i < s ; ++i) { c = GetChara(i); if (GetCharaAttrib(c, CHARA_TEAM)-1 != team) { enemy++; continue; } friend++; if (IsCharaDead(c)) deadfriend++; } if(IsCharaVIP(id)) { // this is vip, when HP < 200, run dodge VIP_HP[team] = chara_hp; VIP_ID[team] = id; if(chara_hp < 200 && friend - deadfriend > 1 && GetAIPerformFunc(id) != AI_PERFORM_DODGE) { // dodge AIPerform(id, AI_PERFORM_NONE); AIPerform(id, AI_PERFORM_DODGE); } else { // revive teammates if(deadfriend > 0 && GetAIPerformFunc(id) != AI_PERFORM_REVIVE) { AIPerform(id, AI_PERFORM_NONE); AIPerform(id, AI_PERFORM_REVIVE); } } } else { if(VIP_ID[team] == -1) return; if(VIP_HP[team] <= 300) { if(VIP_HP[team] > VIP_HP[1-team] && rand() % 2 == 0) { // attack enemy VIP if(GetAIPerformFunc(id) != AI_PERFORM_MOVETOCHARA) AIPerform(id, AI_PERFORM_MOVETOCHARA, VIP_ID[1-team]); } else { // protect our VIP if(GetAIPerformFunc(id) != AI_PERFORM_MOVETOCHARA) AIPerform(id, AI_PERFORM_MOVETOCHARA, VIP_ID[team]); } } } } // AI update in rule vip type 1 void AI_OnUpdate_VIP_1(int id) { } // AI update in rule vip type 2 void AI_OnUpdate_VIP_2(int id) { }