]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Port itemkeys to PlayerState
authorMario <mario@smbclan.net>
Sun, 16 Jul 2017 22:12:37 +0000 (08:12 +1000)
committerMario <mario@smbclan.net>
Sun, 16 Jul 2017 22:12:37 +0000 (08:12 +1000)
qcsrc/common/triggers/func/door.qc
qcsrc/common/triggers/trigger/keylock.qh
qcsrc/server/client.qc
qcsrc/server/client.qh
qcsrc/server/item_key.qc

index 01250e0aae6ab3baba60262094db79c95d43fff2..dc0be6ae24a9822b67865e2c4a2cb0c6b0b32c6b 100644 (file)
@@ -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)
index 756d3b25a5c861867fc8f0b525836d40c21f5671..904c3fa3d4a7404d5d4c0535fbc59858b2d6cc42 100644 (file)
@@ -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;
 }
index 5ad2e2dc909846074da2db7dc6f27dcadbfaa1f1..26cdbde2d3966cb68cc2208a45bb3c0f91d2e6a5 100644 (file)
@@ -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);
 
index 74c8bb174a53356b3db43ef821e9658a09cd2f7d..32fa2f0f30c06275fd25205be487e7cee4ae17b8 100644 (file)
@@ -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;
index d33fe87c2e1a477189000119b501b52c6f69c88e..c645c7facdce7515e3021c441bb586fdbfd1375a 100644 (file)
@@ -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);