Exemple #1
0
int maxexp(A_exp exp) {
  switch (exp -> kind) {
  case A_idExp:
  case A_numExp: return 1;
  case A_opExp: {
    int num1 = maxexp(exp -> u.op.left);
    int num2 = maxexp(exp -> u.op.right);
    if (num1 > num2) {
      return num1;
    } else {
      return num2;
    }
  } 
  case A_eseqExp: {
    int num1 = maxarg(exp -> u.eseq.stm);
    int num2 = maxexp(exp -> u.eseq.exp);
    if (num1 > num2) {
      return num1;
    } else {
      return num2;
    }
  }
  default:
    fprintf(stderr, "Expression error");
    exit(EXIT_FAILURE);
  }
}
void Handler_PINIT(int* myID, Character *myChar, std::string* str)
{
	SYNCHED_CHARACTER_MAP* chars = SYNCHED_CHARACTER_MAP::getInstance();
	SYNCHED_MONSTER_MAP* mons = SYNCHED_MONSTER_MAP::getInstance();

	INIT::CONTENTS contents;
	contents.ParseFromString(*str);

	Scoped_Wlock SW(&chars->srw);

	auto user = contents.data(0);
	int id = user.id(), x = user.x(), y = user.y();
	std::string name = user.name();
	int lv = user.lv(), maxHp = user.maxhp(), power = user.power(), maxExp = user.maxexp();
	int prtExp = user.prtexp();
	*myID = id;
	
	Character* myCharacter = myChar;
	myCharacter->setID(id);
	myCharacter->setName(name);
	myCharacter->setX(x);
	myCharacter->setY(y);
	myCharacter->setLv(lv, maxHp, power, maxExp);
	myCharacter->setPrtExp(prtExp);

	chars->insert(id, myChar);
	
	printf("- %s님께서 위치 (%d,%d) 에 생성되었습니다!\n", myChar->getName().c_str(), myChar->getX(), myChar->getY());
	
	contents.clear_data();
}
Exemple #3
0
int maxexp_list(A_expList exp_list) {
  switch (exp_list -> kind) {
  case A_pairExpList: {
    int num1 = maxexp(exp_list -> u.pair.head);
    int num2 = 1 + maxexp_list(exp_list -> u.pair.tail);
    if (num1 > num2) {
      return num1;
    } else {
      return num2;
    }
  }
  case A_lastExpList: {
    return maxexp(exp_list -> u.last);
  }
  default:
    fprintf(stderr, "Expression list error");
    exit(EXIT_FAILURE);
  }
}
void Handler_PUSER_SET_LV(int *myID, std::string* str)
{
	SYNCHED_CHARACTER_MAP* chars = SYNCHED_CHARACTER_MAP::getInstance();
	SYNCHED_MONSTER_MAP* mons = SYNCHED_MONSTER_MAP::getInstance();

	SET_USER_LV::CONTENTS setuserlvContents;
	setuserlvContents.ParseFromString(*str);

	Scoped_Rlock SW(&chars->srw);

	for (int i = 0; i < setuserlvContents.data_size(); ++i)
	{
		auto setuserlv = setuserlvContents.data(i);
		int id = setuserlv.id();
		int lv = setuserlv.lv();
		int maxHp = setuserlv.maxhp();
		int power = setuserlv.power();
		int expUp = setuserlv.expup();
		int maxexp = setuserlv.maxexp();

		Character* lvUpChar = chars->find(id);
		if (lvUpChar->getID() == *myID)
			printf("- 레벨 업을 하였습니다!!\n");

		if (lvUpChar == NULL)
		{
			printf("나 나오면 안돼는데 나옴?");
			exit(0);
		}
		else
		{
			lvUpChar->setExpUp(expUp);
			lvUpChar->setLv(lv, maxHp, power, maxexp);
			
			printf("★ 유저 %s 님께서 레벨이 %d로 올랐습니다!!\n", lvUpChar->getName().c_str(), id, lv);
		}
	}

}
Exemple #5
0
int maxarg(A_stm stm) {
  switch (stm -> kind) {
  case A_compoundStm: {
    int num1 = maxarg(stm -> u.compound.stm1);
    int num2 = maxarg(stm -> u.compound.stm2);
    if (num1 > num2) {
      return num1;
    } else {
      return num2;
    }
  }
    
  case A_assignStm: {
    return maxexp(stm -> u.assign.exp);
  }
  case A_printStm: { 
    return maxexp_list(stm -> u.print.exps);
  }
  default : {
    fprintf(stderr, "Expression error");
    exit(EXIT_FAILURE);
  }
  }
}