Главная » Статьи » 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)); } | |
Просмотров: 889 | Комментарии: 2 | | |
Всего комментариев: 1 | |
| |