Главная » Статьи » JimBot » Скрипты для JimBot

Скрипт робовойнов
Скрипт робовойнов:

/**
* Драться против бота.
*/
public void GamesWar(IcqProtocol proc, String uin, Vector v, String mmsg) {
class WarInfo {
boolean started = false;
int health; //Здоровье бота
int maxhealth;
int damage; //Урон бота
int prize; //Выигрыш
int hpplusleft;
String names;
boolean bot = false; //Если true, то бот атакует, иначе защищается
}
String[] names = {"Степлер", "Андроид", "Мегатрон", "Г. Букин", "Бэтмен", "Тюллер", "Дракон", "Снорк"}; //Имена
int[] health = {100, 500, 1200, 2700, 3300, 4000, 5150, 5700}; //Здоровье
int[] damage = {5, 30, 40, 55, 60, 70, 100 , 120}; //Урон
int[] prize = {500, 1500, 2500, 4000, 6000, 9000, 12000, 15000}; //Выигрыш
Users u = srv.us.getUser(uin);
if (u.room!=8) {
proc.mq.add(uin,"Система: Ринг в (8) комнате - " + srv.us.getRoom(8).getName());
return;
}
CommandExtend ucmd = games.get(uin);
if (ucmd==null) {
String list = "Рефери: Выберите противника РОБО-ВОИНА.";
for (int i=0; i<names.length; i++)
list = list + "\n" + (i+1) + ") " + names[i] + " - [H-" + health[i] + "] (L-"+prize[i]+")";
list += "\n0) Отменить бой";
Vector v2=new Vector(1);
v2.add(new WarInfo());
ucmd = new CommandExtend(uin,mmsg,null,v2,300000);
games.put(uin, ucmd);
proc.mq.add(uin, list);
return;
}
Vector v2=ucmd.getData();
WarInfo info = (WarInfo)v2.get(0);

String[] places = {"голова", "живот", "ноги"};
String[] placesv = {"голову", "живот", "ноги"};
String placesList = "";
for (int i = 0; i<places.length; i++) {
if (i!=0) placesList += ", ";
placesList += places[i];
}

if (!info.started) {
//Выбор противника
int botIndex = -1;
try {
botIndex = Integer.parseInt(mmsg);
} catch (NumberFormatException ex) {
}
if (botIndex<0 || botIndex>names.length) {
ucmd = new CommandExtend(uin,ucmd.getCmd(),null,v2,300000);
games.put(uin, ucmd);
proc.mq.add(uin, "Рефери: Нужно указать число от 0 до " + names.length + ".\n"
+ "Попробуйте ещё раз.");
return;
}
if (botIndex==0) {
games.remove(uin);
proc.mq.add(uin, "Рефери: Вы отменили битву.");
return;
}
info.started = true;
botIndex--;
info.health = health[botIndex];
info.maxhealth = info.health;
info.damage = damage[botIndex];
info.prize = prize[botIndex];
info.names = names[botIndex];
info.hpplusleft = r.nextInt(6) - 3;
if (info.hpplusleft < 0) info.hpplusleft = 0; //0 с вероятностью 2/3
ucmd = new CommandExtend(uin,ucmd.getCmd(),null,v2,300000);
games.put(uin, ucmd);
proc.mq.add(uin, "Рефери: Ваш противник: " + names[botIndex]+ ".\n"
+ "Бой начат, выбирайте, куда нанести удар ("+placesList+").");
srv.cq.addMsg("Рефери: Начинается бой между роботом " + names[botIndex] + " и человеком " + u.localnick, u.sn, u.room);
return;
}
//Бой
String strPlace = mmsg.trim().toLowerCase();
int userPlace = -1;
for (int i = 0; i<places.length; i++) {
if (strPlace.equals(places[i])) {
userPlace = i;
break;
}
}
if (userPlace<0) {
proc.mq.add(uin, "Рефери: Вы должны указать место из списка ("+placesList+")\n"
+ "Попробуйте ещё раз.");
games.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000));
return;
}
int botPlace = r.nextInt(places.length);
String msg;
if (info.bot) {
//Бот атакует
if (userPlace==botPlace) {
msg = "Рефери: " + info.names + " пытался ударить Вас в " + placesv[userPlace] + ", удар не удался.\n";
} else {
int damage2 = (int)(info.damage*(r.nextDouble()/2+0.75));//Плюс-минус 25%
u.hp -= damage2;
if (u.hp<=0) {
u.hp = 0;
if (u.zoloto>0) u.zoloto = 0;
}
msg = "Рефери: "+info.names+" ударил Вас в " + placesv[botPlace] + ". Вам нанесён урон - " + damage2 + " нр%. Ваше здоровье: " + u.hp + " нр%.\n";
srv.us.updateUser(u);
if (u.hp==0) {
msg += "Рефери: Бой завершён - Вы проиграли.\n"
+ "Вы потеряли все денежные средства.";
srv.cq.addMsg("Рефери: В бое между РОБОТОМ "+info.names+" && ЧЕЛОВЕКОМ " + u.localnick + " - ПОБЕДИЛ робот!!!", u.sn, u.room);
games.remove(uin);
proc.mq.add(uin, msg);
return;
}
}
}
else {
//Пользователь атакует
if (userPlace==botPlace) {
msg = "Рефери: " + info.names + " поставил блок на " + placesv[userPlace] + ", удар не удался.";
}
else {
int damage2 = u.strong/5 + 1;
msg = "Рефери: " + info.names + " поставил блок на " + placesv[botPlace] + ", удар удался!\n"
+ "У, " + info.names + " осталось [H-"+info.health+"]\n"
+ "Нанесён урон (" + damage2 + ")\n";
info.health -= damage2;
if (info.health<=0) {
int prize2;
String strPrize;
if (info.damage*10 > u.strong) {
prize2 = (int)(info.prize*(r.nextDouble()/2+0.75)); //Плюс-минус 25%
strPrize = "Рефери: Вы получаете ("+prize2+") золотых. Поздравляем! *YAHOO*";
} else {
prize2 = 0;
strPrize = "Рефери: Вы сражались со слишком слабым противником, поэтому не получаете золота.";
}
u.zoloto += prize2;
u.country+=50;
u.hp=u.country;
u.strong+=1;
srv.us.updateUser(u);
msg += "Рефери: Бой завершён - Вы победили!\n"
+ strPrize;
srv.cq.addMsg("Рефери: В бое между РОБОТОМ "+info.names+" && ЧЕЛОВЕКОМ "+u.localnick +" - ПОБЕДИЛ человек!!!", u.sn, u.room);
games.remove(uin);
proc.mq.add(uin, msg);
return;
}
if (info.hpplusleft > 0 && (info.health*100 / info.maxhealth) <= 5) {
info.health = info.maxhealth;
info.hpplusleft--;
msg += "Рефери: " + info.names + " воспользовался аптечкой, теперь его здоровье равно " + info.health + "\n";
}
}
}
if (info.bot) {
info.bot = false;
msg += "Рефери: Теперь Вы атакуете - выбирайте, куда нанести удар (" + placesList + ").";
}
else {
info.bot = true;
msg += "Рефери: Теперь Вы защищаетесь - выбирайте, куда поставить блок (" + placesList + ").";
}
proc.mq.add(uin, msg);
games.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000));
}

/**
* Бой друг против друга.
*/
public void GamesBattle(IcqProtocol proc, String uin, Vector v, String mmsg) {
class BattleInfo {
boolean started = false;
int[] id = new int[2]; //игроки
int currentAttacker = 0;
int[] place = new int[2];
BattleInfo(int id0, int id1) {
id[0] = id0;
id[1] = id1;
place[0] = -1;
place[1] = -1;
}
}
if (v.size()>0) {
//Предложение боя
Users target = srv.us.getUser((Integer)v.get(0));
Users sender = srv.us.getUser(uin);
if(sender.room!=8) {
proc.mq.add(uin,"Система: Ринг в (8) комнате - " + srv.us.getRoom(8).getName());
return;
}
if(target.room!=sender.room) {
proc.mq.add(uin,"Система: Ты должен находиться в одной комнате с кем будешь драться.");
return;
}
if (target.state==UserWork.STATE_NO_REG) {
proc.mq.add(uin,"Ошибочка: пользователя с таким ID не существует.");
return;
}
if (target.state!=UserWork.STATE_CHAT) {
proc.mq.add(uin,"Ошибочка: указанный пользователь сейчас не в чате.");
return;
}
if (sender.id==target.id) {
proc.mq.add(uin,"Ошибочка: нельзя вызывать на бой самого себя.");
return;
}
CommandExtend ucmd = games.get(target.sn);
if (ucmd!=null && !ucmd.isExpire()) {
proc.mq.add(uin,"Ошибочка: указанный пользователь сейчас выполняет интерактивную команду, попробуйте чуть позже.");
return;
}
Vector v2=new Vector(2);
v2.add(0);
v2.add(new BattleInfo(sender.id, target.id));
ucmd = new CommandExtend(target.sn,mmsg,null,v2,300000);
games.put(target.sn, ucmd);
srv.getIcqProcess(target.basesn).mq.add(target.sn, "Рефери: Пользователь "+sender.localnick+" ["+sender.id+"] вызвал(а) вас на бой! Напишите \"да\", чтобы принять вызов. Если Вы хотите отказаться от боя, напишите \"нет\".");
proc.mq.add(uin, "Рефери: Вызов на бой успешно отправлен пользователю "+target.localnick+" ["+target.id+"].");
return;
}
CommandExtend ucmd = games.get(uin);
if (ucmd==null) {
proc.mq.add(uin, "Ошибочка: Произошла неизвестная ошибка.");
return;
}
Vector v2=ucmd.getData();
BattleInfo info = (BattleInfo)v2.get(1);
String[] places = {"голова", "живот", "ноги"};
String[] placesv = {"голову", "живот", "ноги"};
String placesList = "";
for (int i = 0; i<places.length; i++) {
if (i!=0) placesList += ", ";
placesList += places[i];
}
if (!info.started) { //Ответ на предложение боя
String answer = mmsg.toLowerCase();
if (answer.equals("нет") || answer.equals("no")) {
games.remove(uin);
proc.mq.add(uin, "Рефери: Вы отказались от боя.");
Users sender=srv.us.getUser(info.id[0]); //Тот, кто предложил бой
Users target=srv.us.getUser(uin); //Тот, кому предложили бой
if (sender.state==UserWork.STATE_CHAT) {
srv.getIcqProcess(sender.basesn).mq.add(sender.sn, "Пользователь "+target.localnick+" ["+target.id+"] отказался от боя.");
}
return;
}
if (answer.equals("да") || answer.equals("yes")) {
Users sender=srv.us.getUser(info.id[0]); //Тот, кто предложил бой
if (sender.state!=UserWork.STATE_CHAT) {
games.remove(uin);
proc.mq.add(uin, "Ошибка: пока вы думали, пользователь "+sender.localnick+" ["+sender.id+"] вышел из чата.");
return;
}
if (games.containsKey(sender.sn)) {
games.remove(uin);
proc.mq.add(uin, "Ошибка: пользователь "+sender.localnick+" ["+sender.id+"] сейчас выполняет интерактивную команду. Вы не можете принять его(её) приглашение. Попробуйте вызвать его(её) на бой позже или дождитесь нового вызова.");
Users target=srv.us.getUser(uin); //Тот, кому предложили бой
srv.getIcqProcess(sender.basesn).mq.add(sender.sn, "Пользователь "+target.localnick+" ["+target.id+"] не смог принять Ваш вызов на бой, поскольку Вы сейчас выполняете интерактивную команду. Завершите её выполнение, а потом вызовите пользователя на бой ещё раз.");
return;
}
Users target=srv.us.getUser(uin); //Тот, кому предложили бой
proc.mq.add(uin, "Рефери: Вы приняли вызов на бой от "+sender.localnick+" ["+sender.id+"]! Выбирайте, куда поставить блок ("+placesList+").");
srv.getIcqProcess(sender.basesn).mq.add(sender.sn, "Рефери: Пользователь "+target.localnick+" ["+target.id+"] принял Ваш вызов на бой! Вы начинаете бой, выбирайте, куда нанести удар ("+placesList+").");
info.started = true;
games.put(sender.sn, new CommandExtend(sender.sn,ucmd.getCmd(),null,v2,300000));
Vector v3=(Vector)v2.clone();
v3.set(0, 1);
games.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v3,300000));
return;
}
proc.mq.add(uin, "Ошибка: нужно ответить \"да\" или \"нет\". Попробуйте ещё раз.");
games.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000));
return;
}
//Сам бой
int userIndex = (Integer)v2.get(0);
if (info.place[userIndex]>=0) {
proc.mq.add(uin, "Ошибка: дождитесь ответа противника.");
return;
}

String strPlace = mmsg.trim().toLowerCase();
int intPlace = -1;
for (int i = 0; i<places.length; i++) {
if (strPlace.equals(places[i])) {
intPlace = i;
break;
}
}
if (intPlace<0) {
proc.mq.add(uin, "Ошибка: Вы должны указать место из списка ("+placesList+"). Попробуйте ещё раз.");
games.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000));
return;
}
info.place[userIndex] = intPlace;
if (info.place[1-userIndex]==-1) {
proc.mq.add(uin, "Рефери: Ваш выбор принят, дождитесь ответа противника.");
games.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000));
return;
}
Users attacker=srv.us.getUser(info.id[info.currentAttacker]); //Тот, кто сейчас атакует
Users target=srv.us.getUser(info.id[1-info.currentAttacker]); //Тот, кто сейчас защищается
int attPlace = info.place[info.currentAttacker];
int defPlace = info.place[1-info.currentAttacker];
//Подготовим для следующего раунда
info.currentAttacker = 1 - info.currentAttacker;
info.place[0] = -1;
info.place[1] = -1;

String attmsg, defmsg;
if (attPlace == defPlace) {
attmsg = "Рефери: Противник поставил блок на " + placesv[attPlace] + ", удар не удался.\r\n";
defmsg = "Рефери: Противник пытался ударить Вас в " + placesv[attPlace] + ", удар не удался.\r\n";
}
else {
int damage = 50 + r.nextInt(30);
target.hp -= damage;
if (target.hp<0) target.hp = 0;
attmsg = "Рефери: Противник поставил блок на " + placesv[defPlace] + ", удар удался! Противнику нанесён урон " + damage + "%.\r\n";
defmsg = "Рефери: Противник ударил Вас в " + placesv[attPlace] + ". Вам нанесён урон " + damage + "%. Ваше здоровье: " + target.hp + "%.\r\n";
srv.us.updateUser(target);
if (target.hp==0) {
attacker.zoloto += 500;
attacker.country += 50;
attacker.strong+=1;
attacker.hp=attacker.country;
srv.us.updateUser(attacker);
srv.getIcqProcess(attacker.basesn).mq.add(attacker.sn, attmsg + "Бой завершён - вы победили! Вы получаете (100) золотых.");
srv.getIcqProcess(target.basesn).mq.add(target.sn, defmsg + "Бой завершён - вы проиграли.");
games.remove(attacker.sn);
games.remove(target.sn);
return;
} else srv.us.updateUser(attacker);
}
srv.getIcqProcess(attacker.basesn).mq.add(attacker.sn, attmsg + "Теперь вы защищаетесь - выбирайте, куда поставить блок (" + placesList + ").");
srv.getIcqProcess(target.basesn).mq.add(target.sn, defmsg + "Теперь вы атакуете - выбирайте, куда нанести удар (" + placesList + ").");
games.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000));
}

Категория: Скрипты для JimBot | Добавил: SuPeR_NiK (03.08.2011)
Просмотров: 889 | Комментарии: 2 | Теги: скрипт, Скрипт робовойнов, робовойны | Рейтинг: 0.0/0
Всего комментариев: 1

Добавил:андрей
0

какая команда что играть?
Дата публикации: 22.08.2011 в 14:34 [Материал]
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]