SHARE
TWEET


TrueClip v1.01




Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
- """TRUECLIP by Influx v1.01 for AoS 0.76
- Adds realistic clips to the game. The server remembers how much ammo is in
- each clip, so if you have 1 bullet in your clip when you reload, at some
- point, you will reload to have only 1 bullet in your clip.
- It will always reload the clip with the most bullets in.
- Applies to Rifles and SMG's
- """
- from twisted.internet.task import LoopingCall
- from twisted.internet.reactor import callLater
- from pyspades.server import weapon_reload
- import math
- def apply_script(protocol, connection, config):
- class TrueClipConnection(connection):
- def on_spawn(self, pos):
- self.protocol.trueclip_dict[self] = {}
- if (self.weapon_object.stock+self.weapon_object.ammo) % self.weapon_object.ammo:
- clipno = int((self.weapon_object.stock+self.weapon_object.ammo)/self.weapon_object.ammo)
- round_no = True
- spare_ammo = 0
- else:
- clipno = int(math.ceil((self.weapon_object.stock+self.weapon_object.ammo)/self.weapon_object.ammo))
- round_no = False
- spare_ammo = ((self.weapon_object.stock+self.weapon_object.ammo)-(self.weapon_object.ammo*(clipno - 1)))
- self.protocol.trueclip_dict[self]['clipno'] = clipno
- for x in xrange(0, clipno, 1):
- if round_no:
- key = "clip{0}".format(x)
- self.protocol.trueclip_dict[self][key] = self.weapon_object.ammo
- elif not round_no:
- if x == clipno:
- key = "clip{0}".format(x)
- self.protocol.trueclip_dict[self][key] = spare_ammo
- else:
- key = "clip{0}".format(x)
- self.protocol.trueclip_dict[self][key] = self.weapon_object.ammo
- self.protocol.trueclip_dict[self]['current_clip'] = "clip0"
- self.protocol.trueclip_dict[self]['current_stock'] = self.weapon_object.stock
- return connection.on_spawn(self, pos)
- def _on_reload(self):
- if self.weapon == 0 or self.weapon == 1:
- callLater(0.01, self.ammo_adjust)
- weapon_reload.player_id = self.player_id
- weapon_reload.clip_ammo = self.weapon_object.current_ammo
- weapon_reload.reserve_ammo = self.weapon_object.current_stock
- self.send_contained(weapon_reload)
- return connection._on_reload(self)
- def ammo_adjust(self):
- curr_clip = self.protocol.trueclip_dict[self]['current_clip']
- next_clip = None
- cur_ammo = 0
- for x in xrange(0, self.protocol.trueclip_dict[self]['clipno']):
- if self.protocol.trueclip_dict[self]["clip{0}".format(x)]>cur_ammo:
- cur_ammo = self.protocol.trueclip_dict[self]["clip{0}".format(x)]
- next_clip = "clip{0}".format(x)
- self.protocol.trueclip_dict[self]['current_stock'] += self.protocol.trueclip_dict[self][curr_clip]
- self.protocol.trueclip_dict[self]['current_clip'] = next_clip
- self.protocol.trueclip_dict[self]['current_stock'] -= self.protocol.trueclip_dict[self][next_clip]
- self.weapon_object.current_stock = self.protocol.trueclip_dict[self]['current_stock']
- self.weapon_object.current_ammo = self.protocol.trueclip_dict[self][next_clip]
- weapon_reload.player_id = self.player_id
- weapon_reload.clip_ammo = self.protocol.trueclip_dict[self][next_clip]
- weapon_reload.reserve_ammo = self.protocol.trueclip_dict[self]['current_stock']
- self.send_contained(weapon_reload)
- def on_shoot_set(self, fire):
- if self.weapon == 1:
- fire_delay_offset = 0.01
- elif self.weapon == 0:
- fire_delay_offset = 0
- if (self.weapon == 0 or self.weapon == 1) and self.tool == 2 and fire:
- self.shot_timer = LoopingCall(self.shot_fired)
- self.shot_timer.start(self.weapon_object.delay-fire_delay_offset)
- if not fire:
- self.shot_timer.stop()
- return connection.on_shoot_set(self, fire)
- def shot_fired(self):
- current_clip = self.protocol.trueclip_dict[self]['current_clip']
- if self.protocol.trueclip_dict[self][current_clip] >=1:
- self.protocol.trueclip_dict[self][current_clip] -= 1
- def on_refill(self):
- if (self.weapon_object.stock+self.weapon_object.ammo) % self.weapon_object.ammo:
- clipno = int((self.weapon_object.stock+self.weapon_object.ammo)/self.weapon_object.ammo)
- round_no = True
- spare_ammo = 0
- else:
- clipno = int(math.ceil((self.weapon_object.stock+self.weapon_object.ammo)/self.weapon_object.ammo))
- round_no = False
- spare_ammo = ((self.weapon_object.stock+self.weapon_object.ammo)-(self.weapon_object.ammo*(clipno - 1)))
- self.protocol.trueclip_dict[self]['clipno'] = clipno
- for x in xrange(0, clipno, 1):
- if round_no:
- key = "clip{0}".format(x)
- self.protocol.trueclip_dict[self][key] = self.weapon_object.ammo
- elif not round_no:
- if x == clipno:
- key = "clip{0}".format(x)
- self.protocol.trueclip_dict[self][key] = spare_ammo
- else:
- key = "clip{0}".format(x)
- self.protocol.trueclip_dict[self][key] = self.weapon_object.ammo
- self.protocol.trueclip_dict[self]['current_clip'] = "clip0"
- self.protocol.trueclip_dict[self]['current_stock'] = self.weapon_object.stock
- weapon_reload.player_id = self.player_id
- weapon_reload.clip_ammo = self.protocol.trueclip_dict[self]["clip0"]
- weapon_reload.reserve_ammo = self.protocol.trueclip_dict[self]['current_stock']
- self.send_contained(weapon_reload)
- return connection.on_refill(self)
- def on_disconnect(self):
- if self in self.protocol.trueclip_dict:
- del self.protocol.trueclip_dict[self]
- return connection.on_disconnect(self)
- class TrueClipProtocol(protocol):
- trueclip_dict = {}
- return TrueClipProtocol, TrueClipConnection
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.