1. Post #1

    August 2017
    3 Posts
    Hello,

    the last few days a friend and I were trying to create a traitor item for ttt.
    The item is a gun and with its shot the target gets a random 'new role',
    either detecitve, traitor or innocent. Now we're experiencing some minor bugs.
    Sometimes the target changes its role, but can't see any change in the bottom left nor the scoreboard.
    He is only visible as the new role for the one who shot him, but still counts as its previous role. Also in some cases when the target gets shot,
    the shown role changes between the possible ones(T/D) for half a second or less until it settles down on the final role.

    Here's the part of the code where our mistakes were probably made.
    Thanks in advance for any help we'll receive.

    Code:
    function SWEP:PrimaryAttack()
                
        local tr = self.Owner:GetEyeTrace();
        local tracedata = {};
        self:TakePrimaryAmmo(1);
        self:EmitSound( self.Primary.Sound, self.Primary.SoundLevel );
        tracedata.pos = tr.HitPos + Vector(0,0,2);
      	ply = tr.Entity;
        math.randomseed(os.time());
        h = math.random( 1, 9 );
        --local message = "Es wurde " .. h .. " gerollt.";
        --ply:PrintMessage(HUD_PRINTTALK, message );
                
            if h > 6 then
       	
            ply:SetRole(ROLE_TRAITOR);
       	SendFullStateUpdate();
        	ply:AddCredits ( 1 );
            
            elseif h > 3 then
    
      	ply:SetRole(ROLE_DETECTIVE);
        	SendFullStateUpdate();
        	ply:AddCredits ( 1 );
          	else
            
            ply:SetRole(ROLE_INNOCENT);
       	ply:SetTeam(TEAM_TERROR);
       	SendFullStateUpdate();
            end
                
          	if self.Owner:GetAmmoCount(self.Primary.Ammo) < 1 then
                self.Owner:DropWeapon( self );
                self:Remove();
                return false
            end
    end
    Reply With Quote Edit / Delete Windows 10 Chrome Germany Show Events

  2. Post #2
    Pypsikan's Avatar
    December 2016
    57 Posts
    Code:
    function SWEP:PrimaryAttack() 
    	if self:Ammo1() < 1 then
    		self:Remove()
    		return
    	end
    
    	local tr = self.Owner:GetEyeTrace();
    	local tracedata = {};
    	self:EmitSound( self.Primary.Sound, self.Primary.SoundLevel );
    	tracedata.pos = tr.HitPos + Vector(0,0,2);
    	local target = tr.Entity;
    	if !IsValid(target) or !target:IsPlayer() then return end
    	--math.randomseed(os.time()); -- I do not know what is this
    	local h = math.random( 1, 9 );
    	--local message = "Es wurde " .. h .. " gerollt.";
    	--target:PrintMessage(HUD_PRINTTALK, message );
                
    	if h > 6 then
    		target:SetRole(tonumber(ROLE_TRAITOR))
    		target:SetCredits(1)
    		SendFullStateUpdate()
    	elseif h > 3 then
    		target:SetRole(tonumber(ROLE_DETECTIVE))
    		target:SetCredits(4)
    		SendFullStateUpdate()
    	else
    		target:SetRole(tonumber(ROLE_INNOCENT))
    		target:SetCredits(0)
    		SendFullStateUpdate()
    	end
    	
    	self:TakePrimaryAmmo(1);
    end
    Reply With Quote Edit / Delete Windows 7 Chrome Russian Federation Show Events

  3. Post #3

    August 2017
    3 Posts
    Tanks mate,

    i had not much time to test it but your code seems working except the remove part it looks like the weapon gets remove before the command can be executed. But i cant see any mistakes in your code.
    Reply With Quote Edit / Delete Windows 10 Chrome Germany Show Events