summaryrefslogtreecommitdiff
path: root/src/map/pc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/pc.cpp')
-rw-r--r--src/map/pc.cpp285
1 files changed, 10 insertions, 275 deletions
diff --git a/src/map/pc.cpp b/src/map/pc.cpp
index bbd59aa..c5fa07c 100644
--- a/src/map/pc.cpp
+++ b/src/map/pc.cpp
@@ -5,7 +5,7 @@
#include <cstring>
#include "../common/cxxstdio.hpp"
-#include "../common/mt_rand.hpp"
+#include "../common/random.hpp"
#include "../common/nullpo.hpp"
#include "../common/socket.hpp"
#include "../common/timer.hpp"
@@ -611,84 +611,6 @@ int pc_isequip(struct map_session_data *sd, int n)
}
/*==========================================
- * Weapon Breaking [Valaris]
- *------------------------------------------
- */
-int pc_breakweapon(struct map_session_data *sd)
-{
- struct item_data *item;
- int i;
-
- if (sd == NULL)
- return -1;
- if (!MRAND(100))
- return 0;
-
- for (i = 0; i < MAX_INVENTORY; i++)
- {
- if (bool(sd->status.inventory[i].equip)
- && bool(sd->status.inventory[i].equip & EPOS::WEAPON)
- && !sd->status.inventory[i].broken)
- {
- item = sd->inventory_data[i];
- sd->status.inventory[i].broken = 1;
- //pc_unequipitem(sd,i,CalcStatus::NOW);
- if (bool(sd->status.inventory[i].equip)
- && bool(sd->status.inventory[i].equip & EPOS::WEAPON)
- && sd->status.inventory[i].broken == 1)
- {
- std::string output = STRPRINTF("%s has broken.", item->jname);
- clif_emotion(&sd->bl, 23);
- clif_displaymessage(sd->fd, output);
- clif_equiplist(sd);
- skill_status_change_start(&sd->bl, StatusChange::SC_BROKNWEAPON, 0, interval_t::zero());
- }
- }
- if (sd->status.inventory[i].broken == 1)
- return 0;
- }
-
- return 0;
-}
-
-/*==========================================
- * Armor Breaking [Valaris]
- *------------------------------------------
- */
-int pc_breakarmor(struct map_session_data *sd)
-{
- if (sd == NULL)
- return -1;
- if (!MRAND(100))
- return 0;
-
- for (int i = 0; i < MAX_INVENTORY; i++)
- {
- if (bool(sd->status.inventory[i].equip)
- && bool(sd->status.inventory[i].equip & EPOS::MISC1)
- && !sd->status.inventory[i].broken)
- {
- struct item_data *item = sd->inventory_data[i];
- sd->status.inventory[i].broken = 1;
- if (bool(sd->status.inventory[i].equip)
- && bool(sd->status.inventory[i].equip & EPOS::MISC1)
- && sd->status.inventory[i].broken == 1)
- {
- std::string output = STRPRINTF("%s has broken.",
- item->jname);
- clif_emotion(&sd->bl, 23);
- clif_displaymessage(sd->fd, output);
- clif_equiplist(sd);
- skill_status_change_start(&sd->bl, StatusChange::SC_BROKNARMOR, 0, interval_t::zero());
- }
- }
- if (sd->status.inventory[i].broken == 1)
- return 0;
- }
- return 0;
-}
-
-/*==========================================
* session idに問題無し
* char鯖から送られてきたステータスを設定
*------------------------------------------
@@ -2238,8 +2160,9 @@ int pc_dropitem(struct map_session_data *sd, int n, int amount)
sd->status.inventory[n].amount < amount ||
sd->trade_partner != 0 || sd->status.inventory[n].amount <= 0)
return 1;
- map_addflooritem(&sd->status.inventory[n], amount, sd->bl.m, sd->bl.x,
- sd->bl.y, NULL, NULL, NULL, 0);
+ map_addflooritem(&sd->status.inventory[n], amount,
+ sd->bl.m, sd->bl.x, sd->bl.y,
+ NULL, NULL, NULL);
pc_delitem(sd, n, amount, 0);
return 0;
@@ -2432,131 +2355,6 @@ int pc_cart_delitem(struct map_session_data *sd, int n, int amount, int)
return 0;
}
-/*==========================================
- * スティル品公開
- *------------------------------------------
- */
-static
-void pc_show_steal(struct block_list *bl,
- struct map_session_data *sd, int itemid, int type)
-{
- nullpo_retv(bl);
- nullpo_retv(sd);
-
- std::string output;
- if (!type)
- {
- struct item_data *item = itemdb_exists(itemid);
- if (item == NULL)
- output = STRPRINTF("%s stole an Unknown_Item.",
- sd->status.name);
- else
- output = STRPRINTF("%s stole %s.",
- sd->status.name, item->jname);
- clif_displaymessage(((struct map_session_data *) bl)->fd, output);
- }
- else
- {
- output = STRPRINTF(
- "%s has not stolen the item because of being overweight.",
- sd->status.name);
- clif_displaymessage(((struct map_session_data *) bl)->fd, output);
- }
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-//** pc.c: Small Steal Item fix by fritz
-int pc_steal_item(struct map_session_data *sd, struct block_list *bl)
-{
- if (sd != NULL && bl != NULL && bl->type == BL::MOB)
- {
- int i, skill, rate, itemid, count;
- struct mob_data *md;
- md = (struct mob_data *) bl;
- if (!md->state.steal_flag
- && mob_db[md->mob_class].mexp <= 0
- && !bool(mob_db[md->mob_class].mode & MobMode::BOSS))
- {
- skill = sd->paramc[ATTR::DEX] - mob_db[md->mob_class].attrs[ATTR::DEX] + 10;
-
- if (0 < skill)
- {
- for (count = 8; count <= 8 && count != 0; count--)
- {
- i = MRAND(8);
- itemid = mob_db[md->mob_class].dropitem[i].nameid;
-
- if (itemid > 0 && itemdb_type(itemid) != ItemType::_6)
- {
- rate =
- (mob_db[md->mob_class].dropitem[i].p /
- battle_config.item_rate_common * 100 * skill) /
- 100;
-
- if (MRAND(10000) < rate)
- {
- struct item tmp_item;
- memset(&tmp_item, 0, sizeof(tmp_item));
- tmp_item.nameid = itemid;
- tmp_item.amount = 1;
- tmp_item.identify = 1;
- PickupFail flag = pc_additem(sd, &tmp_item, 1);
- if (battle_config.show_steal_in_same_party)
- {
- party_foreachsamemap(
- std::bind(pc_show_steal, ph::_1, sd, tmp_item.nameid, 0), sd, 1);
- }
-
- if (flag != PickupFail::OKAY)
- {
- if (battle_config.show_steal_in_same_party)
- {
- party_foreachsamemap(
- std::bind(pc_show_steal, ph::_1, sd, tmp_item.nameid, 1), sd, 1);
- }
-
- clif_additem(sd, 0, 0, flag);
- }
- md->state.steal_flag = 1;
- return 1;
- }
- }
- }
- }
- }
- }
- return 0;
-}
-
-/*==========================================
- *
- *------------------------------------------
- */
-int pc_steal_coin(struct map_session_data *sd, struct block_list *bl)
-{
- if (sd != NULL && bl != NULL && bl->type == BL::MOB)
- {
- int rate;
- struct mob_data *md = (struct mob_data *) bl;
- if (md && !md->state.steal_coin_flag)
- {
- rate = (sd->status.base_level - mob_db[md->mob_class].lv) * 3
- + sd->paramc[ATTR::DEX] * 2 + sd->paramc[ATTR::LUK] * 2;
- if (MRAND(1000) < rate)
- {
- pc_getzeny(sd, mob_db[md->mob_class].lv * 10 + MRAND(100));
- md->state.steal_coin_flag = 1;
- return 1;
- }
- }
- }
-
- return 0;
-}
-
//
//
//
@@ -2645,8 +2443,8 @@ int pc_setpos(struct map_session_data *sd, const char *mapname_org, int x, int y
}
do
{
- x = MRAND(map[m].xs - 2) + 1;
- y = MRAND(map[m].ys - 2) + 1;
+ x = random_::in(1, map[m].xs - 2);
+ y = random_::in(1, map[m].ys - 2);
}
while ((c = read_gat(m, x, y)) == 1 || c == 5);
}
@@ -2693,8 +2491,8 @@ int pc_randomwarp(struct map_session_data *sd, BeingRemoveWhy type)
do
{
- x = MRAND(map[m].xs - 2) + 1;
- y = MRAND(map[m].ys - 2) + 1;
+ x = random_::in(1, map[m].xs - 2);
+ y = random_::in(1, map[m].ys - 2);
}
while (((c = read_gat(m, x, y)) == 1 || c == 5) && (i++) < 1000);
@@ -3738,7 +3536,7 @@ int pc_resetskill(struct map_session_data *sd)
int pc_damage(struct block_list *src, struct map_session_data *sd,
int damage)
{
- int i = 0, j = 0;
+ int i = 0;
nullpo_ret(sd);
@@ -3876,70 +3674,7 @@ int pc_damage(struct block_list *src, struct map_session_data *sd,
clif_updatestatus(sd, SP::JOBEXP);
}
}
- //ナイトメアモードアイテムドロップ
- if (map[sd->bl.m].flag.pvp_nightmaredrop)
- { // Moved this outside so it works when PVP isnt enabled and during pk mode [Ancyker]
- for (j = 0; j < MAX_DROP_PER_MAP; j++)
- {
- int id = map[sd->bl.m].drop_list[j].drop_id;
- int type = map[sd->bl.m].drop_list[j].drop_type;
- int per = map[sd->bl.m].drop_list[j].drop_per;
- if (id == 0)
- continue;
- if (id == -1)
- { //ランダムドロップ
- int eq_num = 0, eq_n[MAX_INVENTORY];
- memset(eq_n, 0, sizeof(eq_n));
- //先ず装備しているアイテム数をカウント
- for (i = 0; i < MAX_INVENTORY; i++)
- {
- int k;
- if ((type == 1 && !bool(sd->status.inventory[i].equip))
- || (type == 2 && bool(sd->status.inventory[i].equip))
- || type == 3)
- {
- //InventoryIndexを格納
- for (k = 0; k < MAX_INVENTORY; k++)
- {
- if (eq_n[k] <= 0)
- {
- eq_n[k] = i;
- break;
- }
- }
- eq_num++;
- }
- }
- if (eq_num > 0)
- {
- int n = eq_n[MRAND(eq_num)]; //該当アイテムの中からランダム
- if (MRAND(10000) < per)
- {
- if (bool(sd->status.inventory[n].equip))
- pc_unequipitem(sd, n, CalcStatus::NOW);
- pc_dropitem(sd, n, 1);
- }
- }
- }
- else if (id > 0)
- {
- for (i = 0; i < MAX_INVENTORY; i++)
- {
- if (sd->status.inventory[i].nameid == id //ItemIDが一致していて
- && MRAND(10000) < per //ドロップ率判定もOKで
- && ((type == 1 && !bool(sd->status.inventory[i].equip)) //タイプ判定もOKならドロップ
- || (type == 2 && bool(sd->status.inventory[i].equip))
- || type == 3))
- {
- if (bool(sd->status.inventory[i].equip))
- pc_unequipitem(sd, i, CalcStatus::NOW);
- pc_dropitem(sd, i, 1);
- break;
- }
- }
- }
- }
- }
+
// pvp
if (map[sd->bl.m].flag.pvp && !battle_config.pk_mode)
{ // disable certain pvp functions on pk_mode [Valaris]