diff options
author | wushin <pasekei@gmail.com> | 2015-11-09 13:46:56 -0600 |
---|---|---|
committer | wushin <pasekei@gmail.com> | 2016-02-08 18:53:15 -0600 |
commit | f593049cd8286f48497782d8bc0afe787724ad5d (patch) | |
tree | 371402a86444ce9104227d638192fa4a305dd48f /src/map/pc.cpp | |
parent | f81bcc78fb1aa5475bbe54907ff82199fc031521 (diff) | |
download | tmwa-f593049cd8286f48497782d8bc0afe787724ad5d.tar.gz tmwa-f593049cd8286f48497782d8bc0afe787724ad5d.tar.bz2 tmwa-f593049cd8286f48497782d8bc0afe787724ad5d.tar.xz tmwa-f593049cd8286f48497782d8bc0afe787724ad5d.zip |
Add third gender to account
Add Gender to char
Make gear work proper with new gender
Enable legacy clients to use account gender
Diffstat (limited to 'src/map/pc.cpp')
-rw-r--r-- | src/map/pc.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 254ecb5..8a5127d 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -627,7 +627,7 @@ int pc_isequip(dumb_ptr<map_session_data> sd, IOff0 n) return 1; P<struct item_data> item = TRY_UNWRAP(sd->inventory_data[n], return 0); - if (item->sex != SEX::NEUTRAL && sd->status.sex != item->sex) + if (item->sex != SEX::UNSPECIFIED && sd->status.sex != item->sex) return 0; if (item->elv > 0 && sd->status.base_level < item->elv) return 0; @@ -2129,7 +2129,7 @@ int pc_isUseitem(dumb_ptr<map_session_data> sd, IOff0 n) if (itemdb_type(nameid) != ItemType::USE) return 0; - if (item->sex != SEX::NEUTRAL && sd->status.sex != item->sex) + if (item->sex != SEX::UNSPECIFIED && sd->status.sex != item->sex) return 0; if (item->elv > 0 && sd->status.base_level < item->elv) return 0; @@ -3493,7 +3493,33 @@ int pc_setparam(dumb_ptr<map_session_data> sd, SP type, int val) } break; case SP::SEX: - chrif_char_ask_name(AccountId(), sd->status_key.name, 5, HumanTimeDiff()); + int operation; + switch (val) + { + case 0: + sd->sex = sd->status.sex = SEX::FEMALE; + operation = 5; + break; + case 1: + sd->sex = sd->status.sex = SEX::MALE; + operation = 6; + break; + default: + sd->sex = sd->status.sex = SEX::NEUTRAL; + operation = 7; + break; + } + for (IOff0 j : IOff0::iter()) + { + if (sd->status.inventory[j].nameid + && bool(sd->status.inventory[j].equip)) + pc_unequipitem(sd, j, CalcStatus::LATER); + } + pc_calcstatus(sd, 0); + chrif_save(sd); + sd->login_id1++; + clif_fixpcpos(sd); + chrif_char_ask_name(AccountId(), sd->status_key.name, operation, HumanTimeDiff()); break; case SP::WEIGHT: sd->weight = val; |