/* * Equips the item specified by itemToEquip * returns true if the item was equiped */ bool Character::equipItem(Equipment itemToEquip) { int tempSlot = itemToEquip.getSlot(); if (equipedItems[tempSlot] == 0) { *equipedItems[tempSlot] = itemToEquip; return true; } return false; };
int script::upgrade(lua_State *L) { //charactersession, type(0=all), rate //returns true on success //TODO not sure how this one should work for final version const int n = lua_gettop(L); if (n != 3) return 0; Character *c = (Character *)lua_touserdata(L, 1); int type = (int)lua_tonumber(L, 2); int rate = (int)lua_tonumber(L, 3); std::uniform_int_distribution<int> dist(0, 99); if (rate < 100 && dist(generator()) >= rate) { return 0; } //here im assuming this is the upgrader's function, but what if it should work //for players too? Item *itm = c->getInventory()[0]; if (!itm || itm->getType() != BaseItem::EQUIP) return 0; Equipment *eq = (Equipment*) itm; if (!eq->canModify() || (eq->getSlot() != Equipment::WEAPON && eq->getSlot() != Equipment::ARMOR) || eq->getMod() > Equipment::GRAND) { return 0; } if (c->countItems(eq->getId(), eq->getMod()) < 3) { return 0; } //finally Equipment *neweq = (Equipment*) new Equipment(eq->getId(), eq->getQty(), eq->getMaxDur()); neweq->setMod(eq->getMod() + 1); Item *r = c->getInventory().take(eq->getId(), 3, eq->getMod(), c); if (r) { c->getItem(neweq); delete r; } lua_pushboolean(L, true); return 1; }