Example #1
0
void GameCharacter::removeSkill(const char *skillName) {
	LsbObject *skillManagerObject = this->getObject()->lookupByUniquePath("SkillManager");
	if (skillManagerObject != 0) {
		std::vector<LsbObject *> skillObjects = getSkillList();
		for (int i=0; i<skillObjects.size(); ++i) {
			LsbObject *skillObject = skillObjects[i];
			LsbObject *mapKeyObject = skillObject->lookupByUniquePath("MapKey");
			if (mapKeyObject != 0) {
				std::string name = skillName;
				if (mapKeyObject->getData() == name) {
					skillManagerObject->removeChild(skillObject);
					break;
				}
			}
		}
		std::vector<LsbObject *> timeAddedObjects = LsbObject::lookupAllEntitiesWithName(skillManagerObject, "TimeItemAddedToSkillManager");
		for (int i=0; i<timeAddedObjects.size(); ++i) {
			LsbObject *timeAddedObject = timeAddedObjects[i];
			LsbObject *mapKeyObject = timeAddedObject->lookupByUniquePath("MapKey");
			if (mapKeyObject != 0) {
				std::string name = skillName;
				if (mapKeyObject->getData() == name) {
					skillManagerObject->removeChild(timeAddedObject);
					break;
				}
			}
		}
	}
}
Example #2
0
bool player::showSkillList(){
	bool flag=false;
	for(int i=0;i<this->getSkillList()->size();i++){
		flag = true;
		cout << "\t["<<i<<"] "<<setw(15)<<getSkillList()->at(i).getName()<<endl;
	}
	return flag;
}
Example #3
0
//---------------------------------------------------------------------------
__fastcall TdmCurrentState::TdmCurrentState(TComponent* Owner)
    : TDataModule(Owner)
{
    skillList = new TList();  
    skillList = getSkillList();
    fightVersionList = new TList();
    fightVersionList = getFightVersionList();
    requestList = new TList(); requestList->Clear();
    femaleCategoryList = new TList();
    maleCategoryList = new TList();
    categoryList = new TList();
    allAvailCategoryList = new TList();
    femaleAvailCategoryList = new TList();
    maleAvailCategoryList = new TList(); 
    allAvailCategoryList = getAllAvailCategoryList();
    femaleUncategoryCompetitorList = new TList(); femaleUncategoryCompetitorList->Clear(); 
    maleUncategoryCompetitorList = new TList(); maleUncategoryCompetitorList->Clear(); 
}
Example #4
0
BTSpecialOperation *BTEditor::editSpecialOperation(BTDisplay &d, BTSpecialOperation *special)
{
 BTDisplay::selectItem cmds[BT_SPECIALCOMMANDS + BT_CONDITIONALCOMMANDS];
 for (int i = 0; i < BT_CONDITIONALCOMMANDS; ++i)
 {
  cmds[i].name = std::string("if ") + conditionalCommands[i];
  cmds[i].value = i;
 }
 for (int i = 0; i < BT_SPECIALCOMMANDS; ++i)
 {
  cmds[i + BT_CONDITIONALCOMMANDS].name = specialCommands[i];
  cmds[i + BT_CONDITIONALCOMMANDS].value = i + BT_CONDITIONALCOMMANDS;
 }
 std::sort(cmds, cmds + BT_SPECIALCOMMANDS + BT_CONDITIONALCOMMANDS);
 int start(0);
 int current(0);
 {
  BTSpecialConditional *specialCond = dynamic_cast<BTSpecialConditional*>(special);
  if (NULL != specialCond)
  {
   for (int i = 0; i < BT_SPECIALCOMMANDS + BT_CONDITIONALCOMMANDS; i++)
   {
    if (cmds[i].value == specialCond->getType())
    {
     current = i;
     break;
    }
   }
  }
  BTSpecialCommand *specialCom = dynamic_cast<BTSpecialCommand*>(special);
  if (NULL != specialCom)
  {
   for (int i = 0; i < BT_SPECIALCOMMANDS + BT_CONDITIONALCOMMANDS; i++)
   {
    if (cmds[i].value == specialCom->getType() + BT_CONDITIONALCOMMANDS)
    {
     current = i;
     break;
    }
   }
  }
 }
 int original = current;
 d.addSelection(cmds, BT_SPECIALCOMMANDS + BT_CONDITIONALCOMMANDS, start, current);
 int key = d.process();
 d.clearText();
 if (key == 27)
  return NULL;
 std::string text;
 int number[3] = {0, 0, 0};
 int count = 0;
 const char *cmd = NULL;
 if (cmds[current].value < BT_CONDITIONALCOMMANDS)
 {
  cmd = conditionalCommands[cmds[current].value];
  if (original == current)
  {
   BTSpecialConditional *specialCond = dynamic_cast<BTSpecialConditional*>(special);
   if (NULL != specialCond)
   {
    for (int i = 0; i < specialCond->getArgumentCount(); i++)
    {
     number[i] = specialCond->getNumber(i);
    }
    text = specialCond->getText();
   }
  }
 }
 else
 {
  cmd = specialCommands[cmds[current].value - BT_CONDITIONALCOMMANDS];
  if (original == current)
  {
   BTSpecialCommand *specialCom = dynamic_cast<BTSpecialCommand*>(special);
   if (NULL != specialCom)
   {
    for (int i = 0; i < 3; i++)
    {
     number[i] = specialCom->getNumber(i);
    }
    text = specialCom->getText();
   }
  }
 }
 const char *dollarSign;
 std::string newMap;
 int facingDir = -1;
 while (dollarSign = strchr(cmd, '$'))
 {
  switch (dollarSign[1])
  {
   case 'S':
   {
    int len = levelMap->getNumOfSpecials();
    BTDisplay::selectItem list[len];
    for (int i = 0; i < len; ++i)
    {
     list[i].name = levelMap->getSpecial(i)->getName();
    }
    int specialStart(0);
    d.addSelection(list, len, specialStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'I':
   {
    BTFactory<BTItem> &itemList = getItemList();
    BTDisplay::selectItem items[itemList.size()];
    for (size_t i = 0; i < itemList.size(); ++i)
     items[i].name = itemList[i].getName();
    int itemStart(0);
    d.addSelection(items, itemList.size(), itemStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'A':
   case 'M':
   {
    BTFactory<BTMonster> &monsterList = getMonsterList();
    BTDisplay::selectItem monsters[monsterList.size()];
    for (size_t i = 0; i < monsterList.size(); ++i)
     monsters[i].name = monsterList[i].getName();
    int monsterStart(0);
    d.addSelection(monsters, monsterList.size(), monsterStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'X':
   {
    BTFactory<BTSpell, BTSpell1> &spellList = getSpellList();
    BTDisplay::selectItem spells[spellList.size()];
    for (size_t i = 0; i < spellList.size(); ++i)
     spells[i].name = spellList[i].getName();
    int spellStart(0);
    d.addSelection(spells, spellList.size(), spellStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'L':
   {
    if ((newMap.empty()) || (0 != PHYSFS_exists(newMap.c_str())))
    {
     int origX = xPos;
     int origY = yPos;
     int origFacing = facing;
     bool toggle = false;
     if ((!newMap.empty()) && (newMap != levelMap->getFilename()))
     {
      toggleMap();
      loadMap(newMap.c_str());
      toggle = true;
     }
     BTDisplayConfig *oldConfig = d.getConfig();
     BTDisplayConfig config;
     XMLSerializer parser;
     config.serialize(&parser);
     parser.parse(BTDisplay::applyDisplayDir("data/mapedit.xml").c_str(), true);
     d.setConfig(&config);
     xPos = number[count] % levelMap->getXSize(); yPos = levelMap->getYSize() - 1 - (number[count + 1] % levelMap->getYSize()); facing = number[count + 2];
     p3dConfig = d.setWallGraphics(levelMap->getType());
     unsigned char key = ' ';
     while (key != '\r')
     {
      if (levelMap->getSquare(yPos, xPos).getSpecial() > -1)
       d.drawLabel("main", levelMap->getSpecial(levelMap->getSquare(yPos, xPos).getSpecial())->getName());
      else
       d.drawLabel("main", "");
      d.drawView();
      key = d.readChar();
      switch (key)
      {
       case BTKEY_UP:
        if (yPos > 0)
         yPos--;
        else
         yPos = getYSize() - 1;
        break;
       case BTKEY_LEFT:
        if (xPos > 0)
         xPos--;
        else
         xPos = getXSize() - 1;
        break;
       case BTKEY_DOWN:
        if (yPos < getYSize() - 1)
         yPos++;
        else
         yPos = 0;
        break;
       case BTKEY_RIGHT:
        if (xPos < getXSize() - 1)
         xPos++;
        else
         xPos = 0;
        break;
       case BTKEY_PGDN:
        if (facing < 3)
         facing++;
        else
         facing = 0;
        break;
       case BTKEY_END:
        if (facing > 0)
         facing--;
        else
         facing = 3;
        break;
       default:
        break;
      }
     }
     number[count++] = xPos;
     number[count++] = levelMap->getYSize() - 1 - yPos;
     facingDir = facing;
     d.clearText();
     d.setConfig(oldConfig);
     if (toggle)
     {
      toggleMap();
      p3dConfig = d.setWallGraphics(levelMap->getType());
     }
     xPos = origX;
     yPos = origY;
     facing = origFacing;
     break;
    }
    // Fall through to $O processing if map file does not exist.
   }
   case 'O':
   {
    std::string val;
    if (number[count] != 0)
    {
     char convert[30];
     sprintf(convert, "%d", number[count]);
     val = convert;
    }
    d.addReadString("X>", 100, val);
    key = d.process();
    d.clearText();
    if (27 == key)
     return NULL;
    number[count++] = atol(val.c_str());
    val = "";
    if (number[count] != 0)
    {
     char convert[30];
     sprintf(convert, "%d", number[count]);
     val = convert;
    }
    d.addReadString("Y>", 100, val);
    key = d.process();
    d.clearText();
    if (27 == key)
     return NULL;
    number[count++] = atol(val.c_str());
    break;
   }
   case 'T':
   {
    BTDisplay::selectItem damage[BT_MONSTEREXTRADAMAGE];
    for (int i = 0; i < BT_MONSTEREXTRADAMAGE; ++i)
     damage[i].name = extraDamage[i];
    int damageStart(0);
    d.addSelection(damage, BT_MONSTEREXTRADAMAGE, damageStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'C':
   {
    BTJobList &jobList = getJobList();
    BTDisplay::selectItem jobs[jobList.size()];
    for (size_t i = 0; i < jobList.size(); ++i)
     jobs[i].name = jobList[i]->name;
    int jobStart(0);
    d.addSelection(jobs, jobList.size(), jobStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'R':
   {
    BTRaceList &raceList = getRaceList();
    BTDisplay::selectItem races[raceList.size()];
    for (size_t i = 0; i < raceList.size(); ++i)
     races[i].name = raceList[i]->name;
    int raceStart(0);
    d.addSelection(races, raceList.size(), raceStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'D':
   {
    if (facingDir != -1)
    {
     number[count++] = facingDir;
    }
    else
    {
     BTDisplay::selectItem dir[BT_DIRECTIONS];
     for (int i = 0; i < BT_DIRECTIONS; ++i)
      dir[i].name = directions[i];
     int dirStart(0);
     d.addSelection(dir, BT_DIRECTIONS, dirStart, number[count]);
     int key = d.process();
     d.clearText();
     if (key == 27)
      return NULL;
     count++;
    }
    break;
   }
   case '#':
   case 'G':
   case 'F':
   case '!':
   case 'J':
   {
    std::string val;
    if (number[count] != 0)
    {
     char convert[30];
     sprintf(convert, "%d", number[count]);
     val = convert;
    }
    d.addReadString("Number>", 100, val);
    key = d.process();
    d.clearText();
    if (27 == key)
     return NULL;
    number[count++] = atol(val.c_str());
    break;
   }
   case 'P':
   {
    BTDisplayConfig *oldConfig = d.getConfig();
    BTDisplayConfig config;
    XMLSerializer parser;
    config.serialize(&parser);
    parser.parse(BTDisplay::applyDisplayDir("data/pictureselect.xml").c_str(), true);
    d.setConfig(&config);
    d.clearText();
    d.addText("Select Image");
    int val(number[count]);
    d.addSelectImage(val);
    key = d.process();
    d.clearText();
    d.clearImage();
    d.setConfig(oldConfig);
    if (27 == key)
     return NULL;
    number[count++] = val;
    break;
   }
   case 'E':
   {
    BTDisplay::selectItem effects[BT_SPELLTYPES_FULL];
    for (int i = 0; i < BT_SPELLTYPES_FULL; ++i)
     effects[i].name = spellTypes[i];
    int effectStart(0);
    d.addSelection(effects, BT_SPELLTYPES_FULL, effectStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case 'N':
   {
    char **files = PHYSFS_enumerateFiles("");
    char **i;
    int count(1);

    for (i = files; *i != NULL; i++)
    {
     if (checkSkipFiles(*i))
      continue;
     int len = strlen(*i);
     if ((len > 4) && (strcmp(".MAP", (*i) + (len - 4)) == 0))
     {
      char tmp[len + 1];
      strcpy(tmp, (*i));
      strcpy(tmp + len - 3, "xml");
      if (0 == PHYSFS_exists(tmp))
      {
       count++;
      }
     }
     else if ((len > 4) && (strcmp(".xml", (*i) + (len - 4)) == 0))
     {
      count++;
     }
    }
    BTDisplay::selectItem *list = new BTDisplay::selectItem[count];
    int current = 0;
    for (i = files; *i != NULL; i++)
    {
     if (checkSkipFiles(*i))
      continue;
     int len = strlen(*i);
     if ((len > 4) && (strcmp(".MAP", (*i) + (len - 4)) == 0))
     {
      char tmp[len + 1];
      strcpy(tmp, (*i));
      strcpy(tmp + len - 3, "xml");
      if (0 == PHYSFS_exists(tmp))
      {
       list[current].name = *i;
       current++;
      }
     }
     else if ((len > 4) && (strcmp(".xml", (*i) + (len - 4)) == 0))
     {
      list[current].name = *i;
      current++;
     }
    }
    list[current].name = "<New Map>";
    PHYSFS_freeList(files);
    int start(0);
    int select(0);
    d.clearElements();
    d.addSelection(list, count, start, select);
    unsigned int key = d.process();
    d.clearText();
    if (27 == key)
     return NULL;
    else if (count - 1 != select)
     text = list[select].name;
    else
    {
     d.addReadString(">", 100, text);
     key = d.process();
     d.clearText();
     if (27 == key)
      return NULL;
    }
    newMap = text;
    break;
   }
   case 'K':
   {
    BTSkillList &skillList = getSkillList();
    BTDisplay::selectItem items[skillList.size()];
    for (size_t i = 0; i < skillList.size(); ++i)
     items[i].name = skillList[i]->name;
    int itemStart(0);
    d.addSelection(items, skillList.size(), itemStart, number[count]);
    int key = d.process();
    d.clearText();
    if (key == 27)
     return NULL;
    count++;
    break;
   }
   case '$':
   default:
    d.addReadString(">", 100, text);
    key = d.process();
    d.clearText();
    if (27 == key)
     return NULL;
    break;
  }
  cmd = dollarSign + 2;
 }
 if (cmds[current].value < BT_CONDITIONALCOMMANDS)
 {
  BTSpecialConditional *opNew = new BTSpecialConditional(cmds[current].value, text.c_str());
  for (int i = 0; i < count; ++i)
   opNew->addNumber(number[i]);
  BTSpecialConditional *opOld = dynamic_cast<BTSpecialConditional*>(special);
  if (opOld)
  {
   opNew->getThenClause()->moveFrom(opOld->getThenClause());
   opNew->getElseClause()->moveFrom(opOld->getElseClause());
  }
  return opNew;
 }
 else
 {
  BTSpecialCommand *opNew = new BTSpecialCommand(cmds[current].value - BT_CONDITIONALCOMMANDS);
  opNew->setText(text);
  for (int i = 0; i < count; ++i)
   opNew->setNumber(i, number[i]);
  return opNew;
 }
}