亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? battle.cpp

?? S.C.O.U.R.G.E.是一款類似Rogue的游戲
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
      scourge->getMap()->addDescription(message);    } else {      // scroll was removed from inventory before casting      sprintf(message, "Couldn't find scroll, cancelled spell.");      scourge->getMap()->addDescription(message);      creature->cancelTarget();      return;    }  }  sprintf(message, "%s casts %s!",           creature->getName(),           creature->getActionSpell()->getName());  scourge->getMap()->addDescription(message, 1, 0.15f, 1);  ((MD2Shape*)(creature->getShape()))->setAttackEffect(true);  // spell succeeds?  // FIXME: use stats like IQ here to modify spell success rate...  SpellCaster *sc = new SpellCaster(this, creature->getActionSpell(), false);  if(!projectileHit &&      (int)(100.0f * rand() / RAND_MAX) < creature->getActionSpell()->getFailureRate()) {    sc->spellFailed();  } else {    // get exp for casting the spell    if(!creature->isMonster()) {      bool b = creature->getStateMod(Constants::leveled);      if(!creature->getStateMod(Constants::dead)) {        int n = creature->addExperience(creature->getActionSpell()->getExp());        if(n > 0) {          sprintf(message, "%s gains %d experience points.", creature->getName(), n);          scourge->getMap()->addDescription(message);          if(!b && creature->getStateMod(Constants::leveled)) {            sprintf(message, "%s gains a level!", creature->getName());            scourge->getMap()->addDescription(message, 1.0f, 0.5f, 0.5f);          }        }      }    }    sc->spellSucceeded();  }  delete sc;  // cancel action  creature->cancelTarget();}void Battle::launchProjectile() {  sprintf(message, "...%s shoots a projectile", creature->getName());  scourge->getMap()->addDescription(message);   if(!Projectile::addProjectile(creature, creature->getTargetCreature(), item,                                 scourge->getShapePalette()->findShapeByName("ARROW"),                                creature->getMaxProjectileCount(item))) {    // max number of projectiles in the air    // FIXME: do something...     // (like print message: can't launch projectile due to use of fixed-sized array in code?)  }}void Battle::projectileHitTurn(Scourge *scourge, Projectile *proj, Creature *target) {  // configure a turn  Creature *oldTarget = proj->getCreature()->getTargetCreature();  proj->getCreature()->setTargetCreature(target);  Battle *battle = new Battle(scourge, proj->getCreature());  battle->projectileHit = true;  if(proj->getItem()) {    battle->initItem(proj->getItem());  } else if(proj->getSpell()) {    battle->spell = proj->getSpell();  }  // play it  battle->fightTurn();  delete battle;  proj->getCreature()->cancelTarget();  proj->getCreature()->setTargetCreature(oldTarget);}void Battle::projectileHitTurn(Scourge *scourge, Projectile *proj, int x, int y) {  // configure a turn  proj->getCreature()->setTargetLocation(x, y, 0);  Battle *battle = new Battle(scourge, proj->getCreature());  battle->projectileHit = true;  if(proj->getItem()) {    battle->initItem(proj->getItem());  } else if(proj->getSpell()) {    battle->spell = proj->getSpell();  }  // play it  battle->fightTurn();    delete battle;  proj->getCreature()->cancelTarget();}void Battle::hitWithItem() {  if(item) {    sprintf(message, "%s attacks %s with %s! (I:%d,S:%d)",             creature->getName(),             creature->getTargetCreature()->getName(),            item->getItemName(),            creatureInitiative, speed);    scourge->getMap()->addDescription(message);    ((MD2Shape*)(creature->getShape()))->setAttackEffect(true);  } else if(dist <= Constants::MIN_DISTANCE) {    sprintf(message, "%s attacks %s with bare hands! (I:%d,S:%d)",             creature->getName(),             creature->getTargetCreature()->getName(),            creatureInitiative, speed);    scourge->getMap()->addDescription(message);    ((MD2Shape*)(creature->getShape()))->setAttackEffect(true);  }  // take a swing  int tohit = creature->getToHit(item);  int ac = creature->getTargetCreature()->getSkillModifiedArmor();  sprintf(message, "...%s defends with armor=%d", creature->getTargetCreature()->getName(), ac);  scourge->getMap()->addDescription(message);  sprintf(message, "...toHit=%d vs. AC=%d", tohit, ac);  scourge->getMap()->addDescription(message);  if(tohit > ac) {    // deal out the damage    dealDamage(creature->getDamage(item));  } else {    // missed    sprintf(message, "...and misses! (toHit=%d vs. AC=%d)", tohit, ac);    scourge->getMap()->addDescription(message);  }}void Battle::dealDamage(int damage, int effect) {  if(damage) {      sprintf(message, "...and hits! for %d points of damage", damage);    scourge->getMap()->addDescription(message, 1.0f, 0.5f, 0.5f);    // target creature death    if(creature->getTargetCreature()->takeDamage(damage, effect)) {               creature->getShape()->setCurrentAnimation((int)MD2_TAUNT);        sprintf(message, "...%s is killed!", creature->getTargetCreature()->getName());      scourge->getMap()->addDescription(message, 1.0f, 0.5f, 0.5f);      if((creature->getTargetCreature()->isMonster() && !MONSTER_IMORTALITY) ||          !GOD_MODE)        scourge->creatureDeath(creature->getTargetCreature());      // add exp. points and money      if(!creature->isMonster()) {        // FIXME: try to move to party.cpp        for(int i = 0; i < scourge->getParty()->getPartySize(); i++) {          bool b = scourge->getParty()->getParty(i)->getStateMod(Constants::leveled);          if(!scourge->getParty()->getParty(i)->getStateMod(Constants::dead)) {            int n = scourge->getParty()->getParty(i)->addExperience(creature->getTargetCreature());            if(n > 0) {              sprintf(message, "%s gains %d experience points.", scourge->getParty()->getParty(i)->getName(), n);              scourge->getMap()->addDescription(message);              if(!b && scourge->getParty()->getParty(i)->getStateMod(Constants::leveled)) {                sprintf(message, "%s gains a level!", scourge->getParty()->getParty(i)->getName());                scourge->getMap()->addDescription(message, 1.0f, 0.5f, 0.5f);              }            }            n = scourge->getParty()->getParty(i)->addMoney(creature->getTargetCreature());            if(n > 0) {              sprintf(message, "%s finds %d coins!", scourge->getParty()->getParty(i)->getName(), n);              scourge->getMap()->addDescription(message);            }          }        }        // end of FIXME        // see if this is a mission objective        if(scourge->getCurrentMission() &&            creature->getTargetCreature()->getMonster() &&           scourge->getCurrentMission()->monsterSlain(creature->getTargetCreature()->getMonster())) {          scourge->missionCompleted();        }      }    }  } else {    sprintf(message, "...and hits! but causes no damage");    scourge->getMap()->addDescription(message);  }}void Battle::initTurn() {  float range = 0.0f;  // select a weapon  if(creature->getAction() == Constants::ACTION_NO_ACTION) {    // already selected weapon?    if(item) return;    Item *i = creature->getBestWeapon(dist);      if(i) range = i->getRpgItem()->getDistance();    // set up distance range for ranged weapons (do it here so it only happens when the action changes)    creature->setDistanceRange(0, Constants::MIN_DISTANCE);    if(range >= 8) {      creature->setDistanceRange(range * 0.5f, range);    }    initItem(i);  } else {    // or init action    switch(creature->getAction()) {    case Constants::ACTION_CAST_SPELL:      range = creature->getActionSpell()->getDistance();      speed = creature->getActionSpell()->getSpeed() *               (scourge->getUserConfiguration()->getGameSpeedTicks() + 80);      creatureInitiative = creature->getInitiative(NULL, creature->getActionSpell());      // set up distance range for ranged weapons (do it here so it only happens when the action changes)      creature->setDistanceRange(0, Constants::MIN_DISTANCE);      if(range >= 8) {        creature->setDistanceRange(range * 0.5f, range);      }      break;    case Constants::ACTION_EAT_DRINK:      range = creature->getActionItem()->getRpgItem()->getDistance();      speed = creature->getActionItem()->getRpgItem()->getSpeed() *              (scourge->getUserConfiguration()->getGameSpeedTicks() + 80);      creatureInitiative = creature->getInitiative(creature->getActionItem(), NULL);      // set up distance range for ranged weapons (do it here so it only happens when the action changes)      creature->setDistanceRange(0, Constants::MIN_DISTANCE);      if(range >= 8) {        creature->setDistanceRange(range * 0.5f, range);      }      break;    default:      cerr << "*** Error: unhandled action: " << creature->getAction() << endl;    }  }  }void Battle::initItem(Item *item) {  this->item = item;  // (!item) is a bare-hands attack		  speed = (item ? item->getRpgItem()->getSpeed() : Constants::HAND_WEAPON_SPEED) *           (scourge->getUserConfiguration()->getGameSpeedTicks() + 80);  //	(scourge->getUserConfiguration()->getGameSpeedTicks() + 80);  creatureInitiative = creature->getInitiative(item);}void Battle::executeEatDrinkAction() {  // is it still in the inventory?  int index = creature->findInInventory(creature->getActionItem());  if(index > -1) {    if(creature->eatDrink(creature->getActionItem())){      creature->removeInventory(index);    }  }  // cancel action  creature->cancelTarget();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级成人在线视频| 亚洲成人av免费| 欧美精品一区二区久久久| 欧美日韩电影一区| 91久久精品午夜一区二区| 色综合久久99| 欧美三级午夜理伦三级中视频| 在线免费观看一区| 欧美午夜宅男影院| 欧美一区二区三区在线观看| 日韩欧美久久久| 26uuu色噜噜精品一区二区| 久久午夜色播影院免费高清| 国产精品毛片大码女人| 国产精品激情偷乱一区二区∴| **网站欧美大片在线观看| 亚洲三级免费观看| 午夜久久久久久久久久一区二区| 日韩国产精品大片| 国产成人精品综合在线观看| 99久久综合国产精品| 欧美日韩二区三区| 国产亚洲女人久久久久毛片| 国产精品国产自产拍高清av| 亚洲一卡二卡三卡四卡无卡久久| 日韩精品亚洲一区二区三区免费| 久久99精品国产麻豆婷婷洗澡| 国产精品小仙女| 欧美在线播放高清精品| 日韩欧美专区在线| 中文字幕中文字幕中文字幕亚洲无线| 玉米视频成人免费看| 精品一区二区三区免费| 色综合天天性综合| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲欧美另类在线| 韩国一区二区在线观看| 色8久久精品久久久久久蜜 | 亚洲精品亚洲人成人网 | 国模少妇一区二区三区| 99国产精品国产精品久久| 日韩一区二区三区电影| 亚洲欧美国产高清| 国产精品一级二级三级| 欧美喷水一区二区| 中文字幕不卡在线播放| 老司机精品视频一区二区三区| 91亚洲资源网| 亚洲国产精品黑人久久久| 日本亚洲最大的色成网站www| 97se亚洲国产综合在线| 久久久精品影视| 日韩av一级电影| 欧美制服丝袜第一页| 国产精品久久久久毛片软件| 久久国内精品视频| 91精品久久久久久久91蜜桃| 亚洲一区二区三区在线| 99热在这里有精品免费| 久久久久国产精品免费免费搜索| 婷婷国产v国产偷v亚洲高清| 99久久精品免费看国产免费软件| 久久亚区不卡日本| 成人蜜臀av电影| 26uuu另类欧美亚洲曰本| 日本美女一区二区三区视频| 欧美日韩亚洲国产综合| 一区二区三区免费在线观看| 99久久精品国产导航| 国产精品美女久久福利网站| 国产高清久久久久| 国产亚洲欧洲997久久综合| 国内精品国产成人国产三级粉色| 欧美一级黄色大片| 九色|91porny| 26uuu国产日韩综合| 久久99最新地址| 久久久精品一品道一区| 国产精品一区二区久久精品爱涩| 欧美成人高清电影在线| 久久99精品国产麻豆婷婷洗澡| 日韩一区二区三区电影在线观看| 美女一区二区在线观看| 亚洲精品一区二区三区四区高清| 韩国午夜理伦三级不卡影院| 国产性色一区二区| 成人免费看黄yyy456| 亚洲精品中文在线| 欧美疯狂做受xxxx富婆| 激情欧美日韩一区二区| 国产精品久久一卡二卡| 欧美在线free| 麻豆高清免费国产一区| 久久久久久久久久电影| 成人国产精品视频| 亚洲一区二区三区中文字幕| 日韩精品中文字幕一区二区三区| 国产电影精品久久禁18| 自拍视频在线观看一区二区| 3d动漫精品啪啪| 不卡一区二区三区四区| 亚洲国产一区二区在线播放| 欧美不卡在线视频| 色狠狠桃花综合| 美女视频黄免费的久久 | 日本一区二区综合亚洲| 色欧美片视频在线观看在线视频| 亚洲成av人片在线| 久久亚洲免费视频| 在线视频欧美精品| 激情文学综合网| 亚洲制服欧美中文字幕中文字幕| 精品欧美一区二区久久| 91亚洲国产成人精品一区二三 | 国产在线精品一区二区三区不卡| 国产精品福利一区二区三区| 91精品福利在线一区二区三区| 成人自拍视频在线观看| 日精品一区二区| 亚洲女同女同女同女同女同69| 日韩女优av电影| 欧美主播一区二区三区| 国产大陆a不卡| 久热成人在线视频| 亚洲综合区在线| 国产精品国模大尺度视频| 国产免费成人在线视频| 精品理论电影在线观看| 欧美日韩午夜在线| 一本大道久久精品懂色aⅴ | 综合电影一区二区三区 | 顶级嫩模精品视频在线看| 亚洲大片精品永久免费| 综合欧美一区二区三区| 久久嫩草精品久久久久| 欧美高清dvd| 欧美美女一区二区在线观看| 91麻豆国产精品久久| 成人性生交大片免费| 国产成人精品影视| 韩国女主播一区| 精品亚洲免费视频| 男女男精品网站| 欧美aⅴ一区二区三区视频| 午夜精品久久一牛影视| 亚洲主播在线播放| 亚洲精品视频自拍| 亚洲精品成a人| 亚洲视频1区2区| 一区二区三区小说| 一区二区三区av电影 | 免费视频一区二区| 日本免费新一区视频| 免费欧美在线视频| 另类小说视频一区二区| 精品一区二区三区免费观看| 国产永久精品大片wwwapp| 国产福利一区二区三区视频| 极品少妇xxxx精品少妇| 国产成人午夜高潮毛片| 成人激情图片网| 欧美色网一区二区| 欧美一级免费大片| 精品va天堂亚洲国产| 国产精品丝袜91| 一二三区精品福利视频| 丝袜美腿高跟呻吟高潮一区| 免费一级欧美片在线观看| 黄页网站大全一区二区| 成人激情电影免费在线观看| 91电影在线观看| 日韩一区二区高清| 国产欧美视频在线观看| 综合亚洲深深色噜噜狠狠网站| 亚洲午夜在线观看视频在线| 免费久久精品视频| 成人精品视频.| 欧美狂野另类xxxxoooo| 精品欧美一区二区在线观看| 1024成人网| 蜜臀国产一区二区三区在线播放| 国产精品91xxx| 欧美色图12p| 综合在线观看色| 蜜臀av一区二区在线免费观看| 国产成人av影院| 欧美日韩1234| 国产精品麻豆欧美日韩ww| 亚洲一区在线视频观看| 精品一区二区三区在线播放| 色狠狠av一区二区三区| 久久综合色8888| 亚洲图片欧美综合| 国产成人av网站| 日韩三级视频在线看| 亚洲欧美国产77777| 久久国产精品72免费观看| 91国偷自产一区二区使用方法| 久久久久久久久蜜桃| 一区二区三区丝袜|