Advertisement
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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement