From: Mario Date: Sun, 16 Jul 2017 22:12:37 +0000 (+1000) Subject: Port itemkeys to PlayerState X-Git-Tag: xonotic-v0.8.5~2587 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=9a1b4ae1f7552a5b9e333b80847523d2fbf90a08;p=xonotic%2Fxonotic-data.pk3dir.git Port itemkeys to PlayerState --- diff --git a/qcsrc/common/triggers/func/door.qc b/qcsrc/common/triggers/func/door.qc index 01250e0aa..dc0be6ae2 100644 --- a/qcsrc/common/triggers/func/door.qc +++ b/qcsrc/common/triggers/func/door.qc @@ -169,7 +169,11 @@ bool door_check_keys(entity door, entity player) if(!IS_PLAYER(player)) return false; - int valid = (door.itemkeys & player.itemkeys); + entity store = player; +#ifdef SVQC + store = PS(player); +#endif + int valid = (door.itemkeys & store.itemkeys); door.itemkeys &= ~valid; // only some of the needed keys were given if(!door.itemkeys) diff --git a/qcsrc/common/triggers/trigger/keylock.qh b/qcsrc/common/triggers/trigger/keylock.qh index 756d3b25a..904c3fa3d 100644 --- a/qcsrc/common/triggers/trigger/keylock.qh +++ b/qcsrc/common/triggers/trigger/keylock.qh @@ -3,7 +3,7 @@ #ifdef CSQC bool item_keys_usekey(entity l, entity p) { - int valid = (l.itemkeys & p.itemkeys); + int valid = (l.itemkeys & p.itemkeys); // TODO: itemkeys isn't networked or anything! l.itemkeys &= ~valid; // only some of the needed keys were given return valid != 0; } diff --git a/qcsrc/server/client.qc b/qcsrc/server/client.qc index 5ad2e2dc9..26cdbde2d 100644 --- a/qcsrc/server/client.qc +++ b/qcsrc/server/client.qc @@ -726,7 +726,8 @@ void PutClientInServer(entity this) SetSpectatee(this, NULL); // reset player keys - this.itemkeys = 0; + if(PS(this)) + PS(this).itemkeys = 0; MUTATOR_CALLHOOK(PutClientInServer, this); diff --git a/qcsrc/server/client.qh b/qcsrc/server/client.qh index 74c8bb174..32fa2f0f3 100644 --- a/qcsrc/server/client.qh +++ b/qcsrc/server/client.qh @@ -139,6 +139,7 @@ CLASS(Player, Client) // custom ATTRIB(Player, dual_weapons, vector, this.dual_weapons); // TODO: actually WepSet! + ATTRIB(Player, itemkeys, int, this.itemkeys); INIT(Player) { this.classname = STR_PLAYER; diff --git a/qcsrc/server/item_key.qc b/qcsrc/server/item_key.qc index d33fe87c2..c645c7fac 100644 --- a/qcsrc/server/item_key.qc +++ b/qcsrc/server/item_key.qc @@ -17,10 +17,10 @@ TODO: bool item_keys_usekey(entity l, entity p) { - float valid = l.itemkeys & p.itemkeys; + int valid = l.itemkeys & PS(p).itemkeys; if (!valid) { - // other has none of the needed keys + // player has none of the needed keys return false; } else if (l.itemkeys == valid) { // ALL needed keys were given @@ -74,10 +74,10 @@ void item_key_touch(entity this, entity toucher) return; // player already picked up this key - if (toucher.itemkeys & this.itemkeys) + if (PS(toucher).itemkeys & this.itemkeys) return; - toucher.itemkeys |= this.itemkeys; + PS(toucher).itemkeys |= this.itemkeys; play2(toucher, this.noise); centerprint(toucher, this.message);