Results 1 to 2 of 2

Thread: turret

  1. #1
    Private First Class
    Join Date
    Feb 2013
    Posts
    201
    Thanks
    4
    Thanked 10 Times in 7 Posts

    turret

    hi , why turrent not planted ?
    what model I have precache ?

    PHP Code:
    #include maps\mp\_utility;

    main()
    {
        
    level thread waitforconnect();
    }

    waitforconnect()
    {
        for(;;)
        {
            
    level waittill("connecting",player);
            
    player thread waitforspawn();
        }
    }


    waitforspawn()
    {
        
    self endon("disconnect");
        for(;;)
        {
            
    self waittill("spawned_player");
            
    self thread plantmg();
        }
    }
        

    plantmg()
    {
        
    self endon("killed_player");
        
    self endon("disconnect");
        
    self endon("spawned_player");
        while(
    isalive(self))
        {
            while(
    self meleebuttonpressed())
                
    wait 0.05;
            while(!(
    self meleebuttonpressed()))
                
    wait 0.05;
            {
                if(
    getcvarint("scr_enablesentrys")==1)
                {
                    
    forward=maps\mp\_utility::vectorScale(anglestoforward(self getplayerangles()),2000);
                    
    plantloc=bullettrace(self geteye(),self geteye()+forward,false,undefined);
                    if(
    distance(vectornormalize(plantloc["normal"]),(0,0,1))<sin(level.maxplantangle)&&self.sentrycount<=level.maxplayersentries)
                    {
                        
    self.sentrycount++;
                        
    model=spawn("script_model",plantloc["position"]);
                        
    model.angles=vectortoangles(anglestoup(vectortoangles(plantloc["normal"])));
                        
    turrorg=model.origin+maps\mp\_utility::vectorScale(vectornormalize(plantloc["normal"]),level.turrsupportheight);
                        
    model2=spawn("script_model",turrorg);
                        
    model setmodel(level.turrsupportmodel);
                        
    model2 setmodel(level.turrmodel);
                        
    model2.angles=self getplayerangles();
                        
    model.setcandamage=true;
                        
    model2.setcandamage=true;
                        
    model solid();
                        
    model2 solid();
                        
    model setcontents (1);
                        
    model2 setcontents (1);
                        
    model.shareshealth=model2;
                        
    model2.damagefeedback=true;
                        
    model2.issentry=true;
                        
    model.damagefeedback=true;
                        
    model2.planter=self;
                        
    model2.health=200;
                        
    model2 thread cleanupafterdestroyed(self,model);
                        
    model2 thread monitorzombies(self,model);
                        
    model2 thread timer(self,model);
                        
    model2 thread cleanupdisconnect(self,model);

                    }
                    else if(
    self.sentrycount>level.maxplayersentries)
                        
    self iprintlnbold("Too much sentries");
                    else 
                        
    self iprintlnbold("Cant plant there");
                }
            }
        }
    }


    cleanupafterdestroyed(planter,othermodel)
    {
        
    self endon("end_mg_destroyed");
        
    planter endon("disconnect");
        
    self waittill("destroyed_by",attacker);
        
    self notify("end_mg");
        
    self notify("end_mg_timer");
        
    self notify("end_mg_disconnect");
        
    planter.sentrycount--;
        
    othermodel delete();
        
    self delete();
    }
        

    timer(planter,othermodel)
    {
        
    self endon("end_mg_timer");
        
    planter endon("disconnect");
        
    wait level.sentrytime;
        
    self notify("end_mg_destroyed");
        
    self notify("end_mg");
        
    self notify("end_mg_disconnect");
        
    planter.sentrycount--;
        
    self delete();
        
    othermodel delete();    
    }

    cleanupdisconnect(planter,othermodel)
    {
        
    self endon("end_mg_disconnect");
        
    planter waittill("disconnect");
        
    self notify("end_mg_destroyed");
        
    self notify("end_mg_timer");
        
    self notify("end_mg");
        
    othermodel delete();
        
    self delete();
    }
            
        

    monitorzombies(planter,othermodel)
    {
        
    self endon("end_mg");
        
    planter endon("disconnect");

        for(;;)
        {
            if(
    planter.pers["team"]=="allies")
                
    badteam="axis";
            else if(
    planter.pers["team"]=="axis")
                
    badteam="allies";
            else
            {
                
                
    othermodel delete();
                
    self delete();
                
    planter.sentrycount--;
                
    self notify("end_mg");
                return;
            }
            
    players=getentarray("player","classname");
            
    enemyplayers=[];
            for(
    i=0;i<players.size;i++)
            {
                if(
    level.dmstyle)
                {
                    if(
    isalive(players[i])&&players[i]!=planter)
                        
    enemyplayers[enemyplayers.size]=players[i];
                }
                else if(
    players[i].pers["team"]==badteam&&isalive(players[i]))
                    
    enemyplayers[enemyplayers.size]=players[i];
            }
            
    enemies=self sortplayerarray(enemyplayers);
            
    aimplayer=undefined;
            for(
    i=0;i<enemies.size;i++)
            {
                
    vec=enemies[i].origin-self.origin;
                
    barrel=maps\mp\_utility::vectorscale(vectornormalize(vec),level.turrbarrelheight);
                
    barrel=barrel+maps\mp\_utility::vectorscale(vectornormalize(vec),level.turrbarrellength);
                
    start=self.origin+barrel+maps\mp\_utility::vectorscale(vectornormalize(vec),level.turrbarrellength);

                
    trace1=bullettrace(start,enemies[igeteyepos(),true,self);
                
    trace2=bullettrace(start,maps\mp\_utility::vectorscale(enemies[igeteyepos()+enemies[i].origin,0.5),true,self);
                if(
    goodtrace(trace1,enemyplayers)||goodtrace(trace2,enemyplayers)&&!isdefined(aimplayer))
                {
                    
    aimplayer=enemies[i];
                    break;
                }
            }
            if(
    isdefined(aimplayer))
            {
                
    barrel=maps\mp\_utility::vectorscale(vectornormalize(anglestoup(self.angles)),level.turrbarrelheight);
                
    vector=aimplayer geteye()-(self.origin+barrel);
                
    angles=vectortoangles(vectornormalize(vector));
                
    currvector=anglestoforward(self.angles);
                
    turn=distancesquared(vectornormalize(vector),vectornormalize(currvector));

                
    time=turn/level.turrspeed;
                if(
    time<level.shotwait)
                    
    time=level.shotwait;
                
    self rotateto(angles,time);
                
    wait level.shotwait;
                if(
    time<2*level.shotwait)
                    
    self firebullet(planter);
            }
            else
                
    wait level.shotwait;

        }
    }

    goodtrace(trace,players)
    {
        if(
    trace["fraction"]==1)
            return 
    true;
        else if(!
    isdefined(trace["entity"]))
            return 
    false;
        else if(
    isinarray(trace["entity"],players))
            return 
    true;
        else
            return 
    false;
    }

    firebullet(attacker)
    {
        
    fw=maps\mp\_utility::vectorScale(anglestoforward(getsentryspreadangles(self.angles)),10000);
        
    barrel=maps\mp\_utility::vectorscale(vectornormalize(anglestoup(self.angles)),level.turrbarrelheight);
        
    barrel=barrel+maps\mp\_utility::vectorscale(vectornormalize(anglestoforward(self.angles)),level.turrbarrellength);
        
    trace=bullettrace(self.origin+barrel,self.origin+barrel+fw,true,self);
        
    self playsound(level.turrfiresound);
        
    fxpoint=self.origin+barrel+maps\mp\_utility::vectorscale(vectornormalize(anglestoforward(self.angles)),level.turrbarrellength);
        
    playfx(level.turrmuzzflash,fxpoint);
        if(
    isplayer(trace["entity"]))
        {
            
    vDir=vectornormalize(trace["position"]-self.origin);
            
    trace["entity"maps\mp\gametypes\_callbacksetup::CodeCallback_PlayerDamage(attackerattackerlevel.turrdamage0"MOD_RIFLE_BULLET"level.turrweapnametrace["position"], vDir"none"0);
        }
        else if(
    canbedamaged(trace["entity"]))
            
    finishobjectdamage(attacker,level.turrdamage);
        else if(!
    isdefined(trace["entity"])&&trace["fraction"]<1&&trace["normal"]!=(0,0,0))
            
    placebullethole(trace,false,self.origin);

    }

    getsentryspreadangles(oldangles)
    {
        
    spread=3;
        if(
    randomint(2))
            
    minx=-1;
        else
            
    minx=1;
        if(
    randomint(2))
            
    miny=-1;
        else
            
    miny=1;
        
    spready=randomfloat(spread);
        
    oldangles=(oldangles[0]+spready*minx,oldangles[1]+randomfloat(spread)*miny,oldangles[2]);
        if(
    oldangles[1]>180)
            
    oldangles=(oldangles[0],oldangles[1]-360,oldangles[2]);
        if(
    oldangles[1]<-180)
            
    oldangles=(oldangles[0],oldangles[1]+360,oldangles[2]);
        if(
    oldangles[0]>90)
            
    oldangles=(oldangles[0]-spready*2,oldangles[1],oldangles[2]);
        if(
    oldangles[0]<-90)
            
    oldangles=(oldangles[0]+spready*2,oldangles[1],oldangles[2]);
        return 
    oldangles;
    }



    sortplayerarray(ppl)
    {
        for(
    i=0;i<ppl.size;i++)
        {
            
    disttoself=distancesquared(self.origin,ppl[i].origin)+400;
            
    vectoplayer=(ppl[igeteye())-self.origin;
            
    timetoreach=distancesquared(vectornormalize(anglestoforward(self.angles)),vectornormalize(vectoplayer))+0.25;
            
    ppl[i].sortonthis=disttoself*timetoreach;
        }
        
    sorted=[];
        for(
    i=0;i<ppl.size;i++)
        {
            
    sortonthis[i]=33554432;
            for(
    j=0;j<ppl.size;j++)
            {
                if(
    ppl[j].sortonthis<sortonthis[i]&&!isinarray(ppl[j],sorted))
                {
                    
    sorthonthis[i]=ppl[j].sorthonthis;
                    
    sorted[i]=ppl[j];
                }
            }
        }
        return 
    sorted;
    }

        
    placebullethole(trace,startpoint)
        {
                
    fx=trace["surfacetype"];
                if(
    isdefined(level.effects[fx]))
                        
    effect=level.effects[fx];
                else
                        
    effect=level.effects["default"];
         
                
    normal=vectornormalize(trace["normal"]);
                
    playfx(effect,trace["position"],normal);
        }

    finishobjectdamage(attacker,damage)
    {
        if(
    isdefined(self.health))
        {
            
    self.health-=int(damage);
            if(
    self.health<0)
                
    self notify("destroyed_by",attacker);
        }
        else
            
    self notify("destroyed_by",attacker);
        if(
    isdefined(attacker))
            
    attacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback();
    }

    canbedamaged(entity)
    {
        if(
    isdefined(entity))
        {
            if(
    isdefined(entity.setcandamage))
            {
                if(
    entity.setcandamage)
                    return 
    true;
                else
                    return 
    false;
            }
            else
                return 
    false;
        }
        else
            return 
    false;
    }

    isInArray(array, element)
    {
        if(!
    isDefined(array) || !array.size) return false;

        
    0;
        while(
    < array.size)
        {
            if(array[
    i] == element) return true;
            
    i++;
        }
        return 
    false;
    }

    isOutside(origin)
    {
        if(!
    isDefined(origin)) return false;

        
    trace bulletTrace(originorigin+ (0,0,6000), falsefalse);

        if(
    distance(origintrace["position"]) >= 1000) return true;
        else return 
    false;
    }

    geteyepos()
    {
        if(
    isdefined(self.eyemarker))
        {
            if(
    distancesquared(self.eyemarker.origin,self.origin)>0)
                return 
    self.eyemarker.origin;
            else
                return 
    self geteye();
        }
        else
        {
            return 
    self geteye();
        }


  2. #2
    Assadministrator IzNoGoD's Avatar
    Join Date
    Aug 2012
    Posts
    1,718
    Thanks
    17
    Thanked 1,068 Times in 674 Posts
    That is due to you copying my code completely and not giving credit.
    Thread closed.

  3. The Following 2 Users Say Thank You to IzNoGoD For This Useful Post:

    kung foo man (31st March 2013),Whiskas (7th July 2016)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •