void Hero::checkAtkMonster(float ft) { /* 获取关卡地图Layer */ TollgateScene* scene = (TollgateScene*)GlobalClient::sharedGlobalClient()->getCurTollgateScene(); TollgateMapLayer* layer = (TollgateMapLayer*)scene->getChildByTag(TAG_MAP_LAYER); /* 获取关卡中已出场的怪物列表 */ CCArray* monsterList = layer->getMonsterList(); if(m_atkMonster != NULL) { /* 怪物已死亡 */ if(m_atkMonster->isDead()) { /* 从怪物列表中删除怪物 */ monsterList->removeObject(m_atkMonster); /* 清除锁定的怪物引用 */ CC_SAFE_RELEASE_NULL(m_atkMonster); return; } /* 攻击冷却结束,可以攻击 */ if(m_isAtkCoolDown == false) { atk(); } /* 判断怪物是否离开攻击范围 */ checkAimIsOutOfRange(monsterList); } else { /* 选择一个进入攻击范围的怪物 */ chooseAim(monsterList); } }
int ray(int r, int c, int dr, int dc, int clr) { for (;;) { r += dr; c += dc; if (!valid(r, c)) return 0; else if (piece[r][c] != 0) return atk(r, c, clr); } }
void CreatureTemplate::readObject(LuaObject* templateData) { conversationTemplate = String(templateData->getStringField("conversationTemplate").trim()).hashCode(); objectName = templateData->getStringField("objectName").trim(); randomNameType = templateData->getIntField("randomNameType"); customName = templateData->getStringField("customName").trim(); socialGroup = templateData->getStringField("socialGroup").trim(); faction = templateData->getStringField("faction").trim().toLowerCase(); level = templateData->getIntField("level"); chanceHit = templateData->getFloatField("chanceHit"); damageMin = templateData->getIntField("damageMin"); damageMax = templateData->getIntField("damageMax"); //range = templateData->getIntField("range"); baseXp = templateData->getIntField("baseXp"); baseHAM = templateData->getIntField("baseHAM"); baseHAMmax = templateData->getIntField("baseHAMmax"); armor = templateData->getIntField("armor"); meatType = templateData->getStringField("meatType").trim(); meatAmount = templateData->getIntField("meatAmount"); hideType = templateData->getStringField("hideType").trim(); hideAmount = templateData->getIntField("hideAmount"); boneType = templateData->getStringField("boneType").trim(); boneAmount = templateData->getIntField("boneAmount"); milk = templateData->getIntField("milk"); tamingChance = templateData->getFloatField("tamingChance"); ferocity = templateData->getIntField("ferocity"); aggroRadius = templateData->getIntField("aggroRadius"); pvpBitmask = templateData->getIntField("pvpBitmask"); creatureBitmask = templateData->getIntField("creatureBitmask"); diet = templateData->getIntField("diet"); optionsBitmask = templateData->getIntField("optionsBitmask"); patrolPathTemplate = templateData->getStringField("patrolPathTemplate"); defaultWeapon = templateData->getStringField("defaultWeapon"); if(!templateData->getStringField("defaultAttack").isEmpty()) defaultAttack = templateData->getStringField("defaultAttack"); scale = templateData->getFloatField("scale"); if (!templateData->getStringField("milkType").isEmpty()) { milkType = templateData->getStringField("milkType").trim(); } LuaObject res = templateData->getObjectField("resists"); if (res.getTableSize() == 9) { kinetic = res.getFloatAt(1); energy = res.getFloatAt(2); blast = res.getFloatAt(3); heat = res.getFloatAt(4); cold = res.getFloatAt(5); electricity = res.getFloatAt(6); acid = res.getFloatAt(7); stun = res.getFloatAt(8); lightSaber = res.getFloatAt(9); } res.pop(); LuaObject temps = templateData->getObjectField("templates"); if (temps.isValidTable()) { for (int i = 1; i <= temps.getTableSize(); ++i) { templates.add(temps.getStringAt(i).trim()); } } temps.pop(); LuaObject lootCollections = templateData->getObjectField("lootGroups"); lootgroups.readObject(&lootCollections); lootCollections.pop(); LuaObject weps = templateData->getObjectField("weapons"); if (weps.isValidTable()) { for (int i = 1; i <= weps.getTableSize(); ++i) { weapons.add(weps.getStringAt(i).trim()); } } weps.pop(); LuaObject attackList = templateData->getObjectField("attacks"); if (attackList.isValidTable()) { int size = attackList.getTableSize(); lua_State* L = attackList.getLuaState(); for (int i = 1; i <= size; ++i) { lua_rawgeti(L, -1, i); LuaObject atk(L); if (atk.isValidTable()) { int atkSize = atk.getTableSize(); if (atkSize == 2) { String com = atk.getStringAt(1).trim(); String arg = atk.getStringAt(2).trim(); attacks->addAttack(com, arg); } } atk.pop(); } } attackList.pop(); outfit = templateData->getStringField("outfit"); aiTemplate = templateData->getStringField("aiTemplate"); if(!templateData->getStringField("controlDeviceTemplate").isEmpty()) controlDeviceTemplate = templateData->getStringField("controlDeviceTemplate"); containerComponentTemplate = templateData->getStringField("containerComponentTemplate"); reactionStf = templateData->getStringField("reactionStf"); personalityStf = templateData->getStringField("personalityStf"); }