Brauche Experten Tipp



  • Folgendes script ist für ein Spiel gemacht. Es prüft ob jemand ein bestimmtes Areal betritt (berührt), wenn das geschieht wird er "gekillt".

    /////////////////////
    // TODES BOXEN //
    /////////////////////
    
    thread _trigSet "trig_touch" 0 "kill" -1157 -880 100 1326 1015 800
    
    //--------------------------------------------------------------------------------
    thread _trigSet "trig_touch" 0 "ciact" -1157 -880 100 1326 1015 800
    //---------------------------------------------
    
    _trigSet local.type local.wtime local.action \
    	local.x1 local.y1 local.z1 \
    	local.x2 local.y2 local.z2 \
    :
    	thread level.mam_f_utils::debug 0 "_trigSet |" local.type "|" \
    				local.wtime "|" local.action "|" \
    				local.x1 "," local.y1 "," local.z1 "|" \
    				local.x2 "," local.y2 "," local.z2 "| -------"
    
    	switch ( local.type )
    	{
    	  case "trig_touch":
    	  case "trig_use":
    	  case "trig_fire":
    	  case "trig_mg":
    		local.trigObj = spawn trigger_multiple
    		break
    	  default:
    		end
    	}
    
    	local.x1 = float( local.x1 ) ; local.x2 = float( local.x2 )
    	local.y1 = float( local.y1 ) ; local.y2 = float( local.y2 )
    	local.z1 = float( local.z1 ) ; local.z2 = float( local.z2 )
    
    	// Make sure coords are in right order
    	if ( local.x1 > local.x2 )
    	{
    		local.x = local.x1 ; local.x1 = local.x2 ; local.x2 = local.x
    	}
    	if ( local.y1 > local.y2 )
    	{
    		local.y = local.y1 ; local.y1 = local.y2 ; local.y2 = local.y
    	}
    	if ( local.z1 > local.z2 )
    	{
    		local.z = local.z1 ; local.z1 = local.z2 ; local.z2 = local.z
    	}
    
    	local.trigObj.origin = ( local.x1 local.y1 local.z1 )
    	local.trigObj setsize ( 0 0 0 ) ( ( local.x2 local.y2 local.z2 ) - \
    					  ( local.x1 local.y1 local.z1 ) )
    	local.trigObj delay ( float( local.wtime ) )
    	if ( level.mam_debug > 80 )
    		local.trigObj message \
    				( "I'm in brush #" + local.trigObj.entnum )
    	local.trigObj setthread "_trigAction"
    	local.trigObj.ham_type = local.type
    	local.trigObj.ham_action = local.action
    	for ( local.i = 1; local.i <= level.mam_sv_maxclients; local.i++ )
    	{
    		local.trigObj.ham_team[ local.i ] = ""
    		local.trigObj.ham_time[ local.i ] = 0
    	}
    end
    
    //----------------------------------------------------------------------------
    
    _trigAction:
    	local.player = parm.other
    
    	if ( ( self.ham_type == "trig_use" ) &&
    	     ( ! local.player.useheld ) )
    		end
    	if ( ( self.ham_type == "trig_fire" ) &&
    	     ( ! local.player.fireheld ) )
    		end
    
    	local.playerId = local.player.entnum + 1
    
    	thread level.mam_f_utils::debug 80 "Trig: Player #" local.playerId \
    						"  brush = " self.entnum \
    						"  action = " self.ham_action
    
    	local.team = self.ham_team[ local.playerId ]
    	local.time = self.ham_time[ local.playerId ]
    
    	if ( ( local.team != "" ) &&
    	     ( local.team != local.player.dmteam ) &&
    	     ( ( level.time - local.time ) < 30.0 ) )
    	{
    		local.tmChange = 1
    	}
    	else
    	{
    		local.tmChange = 0
    		self.ham_team[ local.playerId ] = local.player.dmteam
    		self.ham_time[ local.playerId ] = level.time
    	}
    
    	if ( self.ham_type == "trig_mg" )
    	{
    		if ( local.tmChange == 0 )
    			end
    	}
    
    	switch ( self.ham_action )
    	{
    	  case "hurt1":   local.player hurt 1 ; break
    	  case "hurt5":   local.player hurt 5 ; break
    	  case "hurt10":  local.player hurt 10 ; break
    	  case "hurt25":  local.player hurt 25 ; break
    	  case "hurt50":  local.player hurt 50 ; break
    	  case "die":	  local.player hurt 10000 ; break
    	  case "kill":    local.player kill ; break
    	  case "respawn": local.player respawn ; break
    	  case "weapnext":local.player weapnext ; break
    	  case "weapdrop":local.player weapdrop ; break
    	  case "holster": local.player safeholster 1 ; break
    	  case "stand":	  local.player modheight stand ; break
    	  case "duck":	  local.player modheight duck ; break
    	  case "ciact":	  thread outofbounds local.player ; break
    	  case "warn":	  thread sendwarning local.player ; break
    	  default:	  local.player stufftext self.ham_action ; break
    	}
    end
    
    //-----------------------------------------------------------------------------
    
    outofbounds local.player:
    
    local.string = (getcvar ciact)
    if(local.string == "X" || local.string == "x")
    	local.string = ""
    local.string = (local.string + "k" + local.player.entnum + ";")
    setcvar ciact local.string
    local.player stufftext "say Groundfight? Ich rall es einfach nicht - KICK MICH KICK MICH JUHUUU"
    
    iprintln "ATTENTION: Player not respecting NAG-RULES Detected"
    
    end
    
    //-----------------------------------------------------------------------------
    
    sendwarning local.player:
    
    local.player stufftext "say Groundfight? Ich rall es einfach nicht - KICK MICH KICK MICH JUHUUU"
    
    iprintln "ATTENTION: Player not respecting NAG-RULES Detected"
    
    end
    

    Ich habe nun folgende Frage, weil ich nicht weiss, wo und wie genau die Abfrage, ob das Areal betreten / beruehrt wurde, geschieht:
    Wie kann ich da einen Timer einbauen, sodass die Leute, die dieses Areal betreten, eine gewisse Zeit haben selbiges zu verlassen.

    Quasi:
    Solange du dich im Areal befindest - laeuft eine gewisse Zeit ab - wenn du dann noch im Areal bist - Kill

    Danke im Vorraus,
    Simsalabim



  • thread _trigSet "trig_touch" 0 "kill" -1157 -880 100 1326 1015 800

    //--------------------------------------------------------------------------------
    thread _trigSet "trig_touch" 0 "ciact" -1157 -880 100 1326 1015 800

    Also die Null in diesen Zeilen ist jeweils ein Timer. Das dumme ist, mit diesem Timer kann ich nur die Zeit verzoegern bis zum KILL, wenn derjenige das Areal bereits verlassen hat, wird er trotzdem gekillt.

    Niemand eine Idee?



  • Da ich absoluter Newbie in Sachen Programmierung bin, verzeiht bitte, wenn das eine dumme Frage war. Oder wenn es etwas unvollständig ist.

    Sagt mir, was ihr braucht um mir überhaupt helfen zu können ^^

    sim



  • also ich hab die abfrage mittlerweile in erfahrung brinegn können:

    if (local.timer=0;local.timer<30;local.timer++)

    soll wohl eine 30s Abfrage sein, die man verwenden könnte...

    nur wo???

    gruss,
    sim



  • simsalabim schrieb:

    Niemand eine Idee?

    Sorry, wenn mitten in der Nacht nicht so viele anwesen sind 😉

    Eine Idee wäre es, beim Timer-Abluaf zu überprüfen, ob der Spieler noch im Areal ist. Alternativ kannst du auch den Timer wieder deaktivieren, wenn der Spieler das tödliche Gebiet wieder verlässt.



  • Was für ne Programmiersprache ist denn das ??



  • C++ jedenfalls nicht.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Erst mal sorry fürs das Missgeschick mit dem falschen Forum.
    Ich habe es für c++ gehalten, aber was ist es denn sonst?

    Trotzdem...

    CStoll schrieb:

    simsalabim schrieb:

    Niemand eine Idee?

    Sorry, wenn mitten in der Nacht nicht so viele anwesen sind 😉

    Eine Idee wäre es, beim Timer-Abluaf zu überprüfen, ob der Spieler noch im Areal ist. Alternativ kannst du auch den Timer wieder deaktivieren, wenn der Spieler das tödliche Gebiet wieder verlässt.

    Genau das wär ideal! Nur wie? Und wo ansetzen?

    Gruss
    simsalabim



  • Das kommt ganz darauf an, wieviel Logik du hinter deine Timer setzen kannst:

    event "Spieler betritt Gebiet X"
      starte Timer 1 30s
    end event
    
    event "Spieler verlässt Gebiet X"
      beende Timer 1
    end event
    
    event "Timer 1 abgelaufen"
      töte Spieler
    end event
    
    event "Spieler betritt Gebiet X"
      starte Timer 1 30s
    end event
    
    event "Timer 1 abgelaufen"
      wenn "Spieler in Gebiet X" dann töte Spieler
    end event
    

    (für die konkrete Syntax kann ich dir leider nicht weiterhelfen)


Anmelden zum Antworten