wie script in mod umwandeln?

serthy
hey ho
nachdem ich nun so die grundlagen beim normalen map-scripten drauf habe (hoffe ich zumindest grosses Grinsen )
wollte ich fragen wie man mods generell erstellt
eigentlich geht es ja darum, ich habe quasi einen script geschrieben (allerdings sehr billig) der killstreaks zählt und bei 5 dann man einen airstrike per fernglas rufen kann, er ist zwar nicht rundum perfekt, aber das grundgerüst funktioniert!
hier der code:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:

/* Serthy
================================================================================================================================================================================================
|	erster versuch eines killstreak scriptes -- ideen:																							|
|		- anzeigen der aktuellen abschussserie																								|
|		- airstrike bei 5 durch fernglas rufen (wahlweise napalm-angriff / gas-angriff / normal << nur normal derzeit)												|
|		- ac 130 bei 10er abschusserie (in arbeit)																							|
|		- entfernungsanzeige im fernglas (in arbeit)																							|
|		- abwurf von packet mit waffe / monition (in arbeit)																						|
|		- sentry-gun (in arbeit)																										|
|		- jet selber fliegen (in arbeit)																									|
|																																|
================================================================================================================================================================================================

*/

#include maps\mp\_utility;

main()
{
level.binoculars = 0;
level.airstrike_inuse = 0;
level.airstrike_aviable = 0;


//precache
level._effect["marker"] = loadfx ("fx/misc/flare_artillery_runner.efx");
level._effect["grenadeexplosion_cliffblast"] = loadfx ("fx/explosions/grenadeExp_cliffblast.efx");
level._effect["grenadeexplosion_dirt"] = loadfx ("fx/explosions/grenadeExp_dirt.efx");
level._effect["grenadeexplosion_mud"] = loadfx ("fx/explosions/grenadeExp_mud.efx");
level._effect["grenadeexplosion_wood"] = loadfx ("fx/explosions/grenadeExp_wood.efx");
level._effect["grenadeexplosion_water"] = loadfx ("fx/explosions/grenadeExp_water.efx");
level._effect["grenadeexplosion_windowlast"] = loadfx ("fx/explosions/grenadeExp_windowlast.efx");
level._effect["grenadeexplosion_snow"] = loadfx ("fx/explosions/grenadeExp_snow.efx");
level._effect["grenadeexplosion_concrete"] = loadfx ("fx/explosions/grenadeExp_concrete.efx");

thread playerz();

}

playerz()
{
	while(1)
	{
		player = getentarray("player","classname");
		for(i = 0; i < player.size; i++)
		{
		player[i] thread onoff();	
		player[i] thread artillery();
		player[i] thread counter();
		player[i] thread hud();
		player[i] thread add();

		if(!isdefined(player[i].airstrikes))		player[i].airstrikes = 0;
		if(!isdefined(player[i].streak))		player[i].streak = 0;		
		}
	wait 1;
	}
}

hud()
{
	if( isDefined( self.hud_streak ) )		self.hud_streak destroy();
	
	if(!isDefined(self.streak))		self.streak = 0;

	self.hud_streak = newClientHudElem(self);
	self.hud_streak.x = 320;
	self.hud_streak.y = 440;
	self.hud_streak.font = "default";
	self.hud_streak.fontscale = 1.75;
	self.hud_streak.alpha = 1;

	while(1)
	{
	self.hud_streak setvalue(self.streak);
	wait 0.1;
	}
	
}

counter() //zählt abschussserie, bei tot = 0
{

if(isAlive(self))
{
oldscore = self.score;
wait 1;
newscore = self.score;

if( (newscore - oldscore) > 0 && self.sessionstate == "playing")
	{
	self.streak = (self.streak + (newscore - oldscore));
		if( (self.streak >= 5) && (isAlive(self)) )
			{
			level.airstrike_aviable = 1;
			self.airstrikes++;	
			}
	}
if( self usebuttonpressed()) self iprintln( "^1[^7" + self.airstrikes + "^1]" + "^3Airstrikes ^7aviable \n");
}
else if(!isAlive(self))		self.streak = 0;
}


add() // da der bot-mod derzeit nicht geht muss das herhalten, nur für testzwecke!!!
{
adder = getent("platform_trigger","targetname");
while(1)
{
adder waittill("trigger",other);
wait 1;
other.score =  (other.score + 1);
wait 1;
}
}


onoff()
{
while(1)
{
self waittill( "binocular_enter" );
level.binoculars = 1;
wait 1;
self waittill( "binocular_exit" );
level.binoculars = 0;
wait 1;
}
}

artillery()
{

radiusdamage = 200;

if(isdefined(self.eyemarker)) // eigentlich nicht wichtig, habs ohne probiert, dann muckt es rum, ich lass es drine für die entfernungsanzeige
	{
	self.eyemarker unlink();
	self.eyemarker delete();
	}
	self.eyemarker = spawn("script_origin",(0,0,0));
	self.eyemarker linkto (self, "tag_eye",(0,0,0),(0,0,0));

	
	while( (level.binoculars == true) && (level.airstrike_inuse == false) && (level.airstrike_aviable == true) )
	{
		if(self usebuttonpressed() && (self.airstrikes > 0))
			{
			
			self iprintln("^1Airstrike called");
			
			self.airstrikes--;
			self iprintln( "^1[^7" + self.airstrikes + "^1]" + "^3Airstrikes ^7aviable \n");

			level.airstrike_inuse = 1;

			start = self.eyemarker.origin;
			angles = self getplayerangles();
			direction = anglesToForward(angles);
			direction = vectorScale(direction,5000);
			tracestart = start;
			traceend = start + direction;

			trace = bulletTrace( tracestart , traceend , false , undefined );
			
				if(trace["fraction"]<1)
					{ 
					wait 3;
					playfx(level._effect["marker"],trace["position"]);
					wait 3;
					self iprintln("^2Airstrike incoming");
					wait 3;
					num = 4; //anzahl der abgeworfenen bomben/explosionen
					for( i = 0 ; i < num ; i++ )
						{
						wait randomint(4);
						position = (trace["position"]+(randomint(radiusdamage),randomint(radiusdamage),0));
						

						//alle texturtypen
						type = trace["surfacetype"];
						
							switch (type)
							{
							case "beach" :
							case "sand" :
							fx = "cliffblast";
							break;

							case "dirt" :
							fx = "dirt";
							break;

							case "grass" :
							case "mud" :
							fx = "mud";
							break;

							case "bark" :
							case "wood" :
							fx = "wood";
							break;

							case "water" :
							fx = "water";
							break;

							case "glass" :
							fx = "windowblast";
							break;

							case "ice" :
							case "snow" :
							fx = "snow";
							break;

							case "asphalt" :
							case "brick" :
							case "cloth" :
							case "concrete" :
							case "default" :
							case "gravel" :
							case "metal" :
							case "paper" :
							case "plaster" :
							case "rock" :
							fx = "concrete";
							break;

							default :
							fx = "concrete";
							break;
							}


						//self playsound ("grenade_explode_default");
						playfx (level._effect["grenadeexplosion_" + fx], position);
						earthquake( 0.5 , 0.5 , position , 200 );
						radiusDamage( position , 200 , 100 , 80 );

						
						//soll die kills für einen selbst dazuzählen, klappt noch nicht 100 prozentig
							victims = getentarray("player", "classname");
								for(v=0; v<victims.size; v++)
									{
									victim = victims[v];
									away = distance( victim.origin, position );
									if(away<radiusdamage)
										{
										if(victim.health<=0)
											{
											self.score++;
											iprintln(self.name + "^7 killed "+ victim.name + "^7 with Airstrike\n");
											}
										}
									}
						}

					wait 3;
					
					level.airstrike_inuse = 0;
				}
			}
			else if(self.airstrikes <= 0)
				{
				self.airstrikes = 0;
				level.airstrike_aviable = 0;
				self iprintln("^1No ^3Airstrikes ^1aviable!!!");
				}
				
			else if(level.airstrike_inuse == true)		self iprintln("^1No ^3Airstrikes ^1aviable!!!");
			
			else if(level.airstrike_aviable == false)		self iprintln("^1No ^3Airstrikes ^1aviable!!!");








	wait 0.1;
	}
}






nunja das ist ein script den ich in einer map aufrufe
ich hoffe ihr könnt mir ein paar hinweise und tipps geben wie ich das als mod mache
ich hoffe das das in den grundzügen auch in ein mod zu packen ist :s
ich weiß das es andere mods gibt wo das alles schon drinne ist, aber ich würde gerne lernen wie das alles funktioniert smile
ich hab mir auch schon unzählige mods angesehen, bin aber mehr als überfordert gewesen die zu entziffern! ich glaube da ist es für mich sinnvoller mit kleineren dingen anzufangen, zb wie man so etwas (oder von mir aus auch andere kleinere dinge) in einen mod packt

bin für jeden möglichen ratschlag überaus dankbar!

hier noch ein kleines video
http://de.xfire.com/video/40e94e/




ps: hat jemand noch den anti-camper-mod von nightwing? standalone Anti Camper Mod
serthy
okay hab es geschafft
man muss halt nur wissen was man machen muss Augenzwinkern

also wenn man einen eigenen mod basteln will, zb. nehmen wir das einfachste was es gibt, man will einen text aller 5 sekunden erscheinen lassen
man erstellt sich eine neue .iwd datei (hier aufpassen mit winzip und winrar, es geht nur ein, glaube rar!!)
darin kommt dann folgendes verzeichnis (3 ordner anlegen):
maps/mp/gametypes
dann geht ihr in euren main ordner und sucht in der iw_7.iwd unter maps/mp/gametypes die dm.gsc datei raus
diese kopiert ihr euch auf euren desktop und schreibt in der main funktion das rein:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
thread maps/mp/gametypes/_text::main();


dann erstellt ihr euch ein neues textdokument und nennt es _text.gsc
darein kommt dann folgender kleiner code:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
main()
{
thread text();
}
text()
{
while(1)
{
wait 5;
iprintln("^1Das ist nur ein Test");
}
}



nun packt ihr eure modifizierte dm.gsc und eure _text.gsc in eure meinmod.iwd datei rein und zwar n den maps/mp/gametypes ordner
und die iwd in euer main verzeichnis
achso, wenn ihr nun eine map startet sollte im spieltyp deathmatch dann alle 5 sekunden ein text erscheinen, allerdings nur in dm, da ihr nur die dm datei bearbeitet habt, um es auch bei den anderen zu machen, einfach diese noch dazufügen

somit kann man auch den campermod von nightwing gaaaanz einfach nachmachen, und er funktioniert super Freu
serthy
okay leute^^
jetzt kommts knallhart! :p
also ich habe mir ein eigenes quickmessagesystemdingsda gebaut und das funktionippelt auch 1A
und das ist mein vorhaben:
ich möchte gerne dadrüber user kicken bannen etc.
nunja wie geht man sowas an?
ich habe ein menü das man anwählt und wo man alle buchstaben A-Z und alle zahlen 0-9 eingeben kann
es werden alle zahlen/buchstaben erfasst und mit [#] bestätigt oder mit [-] abgebrochen

so nun habe ich ja die einzelnen zahlen/buchstaben als variable im script
nun meine fragen an euch:

erst die einfacherere:
wie funktioniert das mit dem /rcon kick <name> und
/rcon clientkick <id> ??? also ich meine damit wie viele variablen brauch man bei den namen? reicht es wenn man bei angenommen diesen beispielnamen:
^2opfer^3lamm^3user einfach als variable nur opfer oder lamm nimmt? oder muss man den gesamten namen eingeben (inklusive ^3 farbcodes?)

ich bekomm leider im moment keine bots zum laufen, und selber kicken geht nicht ^^


joah und nun die schwere frage:

wie mache ich das das die variablen (zahlen/buchstaben) in den befehl vom rcon reinkommen?

ich sehe da 2 probleme
einmal weiß ich nicht wie lang bzw wie viel variable ich hab (kommt auf namen des spielers drauf an)
und 2. muss ich mir noch gedanken drüber machen wie ich die variable aneinanderreihe
hab mir das so gedacht:

/rcon kick var1,var2,var3,var4
oder so:
var1,var2,var3,var4 = name
/rcon kick name

das aneinanderreihen ist noch ein problem ^^

bitte bitte gebt mir eins zwei ratschläge als motivation xD
Jeremin
zum thema rcon:
mit kick <name> muss der gesamte name + farbcodes eingegeben werden, bei onlykick <name> können die farbcodes weggelassen werden.

ich weiss nicht, wie dynamisch du dein menu gestalten kannst, aber wärs nicht eine möglichkeit, die spieler beim öffnen des menus einzulesen?
mit dem befehl status kannst du die spielernamen + ID's abfragen und könntest direkt über die ID kicken. ich weiss allerdings nicht, ob die scriptsprache arrays unterstützt, und ohne wirds harzig Zunge raus
serthy
also
ich habe es soweit, das ich auf eine taste drücke und ich dann die zahl mir mit iprintln printen lassen kann solange bis ich # oder - drücke die das beenden
die tasten werden durch switch(response) ausgelesen

deine möglichkeit werde ich auch einmal überdenken
man müsste dann allerdings 6x11 neue menüs sich anlegen (maximal 64 spieler) um alle zu erfassen

ich werde mal ausprobieren ob die .menu-files auch variable die sich ändern können anzeigen

aber danke schonmal mit dem onlykick ^^
aber es ist eigentlich einfacher die nummer zu nehmen oder?
sind ja maximal 2 stellen, denk ich
nur dabei ist das problem das man erst mal nachschauen muss welche nummer zu welchen spieler gehört, und das ist ja wieder sinnlos, kann man gleich in die console eingeben :p
also würden mir hier variable gut weiterhelfen, die je nach slotnummer den namen im menü anzeigen
dann brauch ich nur den namen anklicken und schon ist er gekickt
smile wenns klappt mach ich nen mimimod damit hehehe


habs grad eben mal ausprobiert scheint nicht zu klappen unglücklich

hab aber auch schon eine andere idee, die ist aber mehr als aufwendig...

einfach für jeden (64 -.-) spieler ein hud erstellen, der nur erscheint wenn man im customquickmessageadmimmenü (lol) ist, das menü so legen das es von der größe passt (vollbild)
dann mit einer abfrage spielernamen und alles bekommen (kein problem) und dann kicken

soo ich muss mal überlegen einen moment

überprüft mal meine gedanken grosses Grinsen

also man macht ne simple arrayabfrage von den spielern und hat dann player[i]
dann bastelt man sich ne liste die nur angezeigt wird, wenn man im kick/ban menü ist
dann wird jeder spieler:
player[1].name = opferlamm
player[2].name = gast
player[3].name = unknown soldier
usw
erfasst und wird angezeigt
wenn ich nun 1 drücke mache ich es so, dass player[1] gekickt wird


und da ist schon der fehler, wie soll ich bitte 64 wieder eingeben? -.-

ich überleg mal schön weiter^^

hier mal das script wo ich die zahlen herbekomme:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
		switch(response)	
			{
			case "1":
				level.kicknumber = 1;
				self iprintln(level.kicknumber);
				break;

			case "2":
				level.kicknumber = 2;
				self iprintln(level.kicknumber);
				break;

			case "3":
				level.kicknumber = 3;
				self iprintln(level.kicknumber);
				break;

			case "4":
				level.kicknumber = 4;
				self iprintln(level.kicknumber);
				break;

			case "5":
				level.kicknumber = 5;
				self iprintln(level.kicknumber);
				break;

			case "6":
				level.kicknumber = 6;
				self iprintln(level.kicknumber);
				break;

			case "7":
				level.kicknumber = 7;
				self iprintln(level.kicknumber);
				break;

			case "8":
				level.kicknumber = 8;
				self iprintln(level.kicknumber);
				break;

			case "9":
				level.kicknumber = 9;
				self iprintln(level.kicknumber);
				break;

			case "0":
				level.kicknumber = 0;
				self iprintln(level.kicknumber);
				break;

			default:
				break;
			}



also das level.kicknumber kann nat. verändert werden!

und hier ein script das zeimlich schön ist
es liest die zahlen der reihe nach ab und wenn was falsch ist fängt es von vorne an, vll könnt ihr damit etwas anfangen ^^

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
init()
{ 

   /* Max number can be 25 (set in the for loop below)
      make sure that all sequential triggers are included 
      
      key: targetname
      value: b# 
      
      where # is the number of that button. Can use trigger uses or trigger damage (you shoot the buttons instead)
      
   */
      
   // List the code here - supports any length of code - always start at zero and increase by 1 each time
   // CODE IS 5349
   
   level.doorCode[0] = 5; 
   level.doorCode[1] = 3;
   level.doorCode[2] = 4;
   level.doorCode[3] = 9;
   
   thread keypad(); 
}

keypad()
{
   nextButton = level.doorCode[0];
   
   entryPosition = 0;
   
   level.lastButton = level.doorCode[(level.doorCode.size - 1)];
     
   for(i=1; i <= 25; i++)
   {
      button = getent(("b" + i), "targetname"); // get sequential buttons
      
      if(!isdefined(button)) break; // no more triggers - exit setup
      
      button thread watchTrigger(i);
   }
   
   level.buttonPressed = undefined;
   
   while(1)
   {
      if(isDefined(level.buttonPressed))
      {
         if(level.buttonPressed == nextButton)
         {
            entryPosition++;
            if(entryPosition >= level.doorCode.size) // Code finished so when it matches reset the code and open the door
            {  
               // Do your door stuff here - not threaded so can wait there for door to close again              
               door_open(); 
               nextButton = level.doorCode[0];
               entryPosition = 0;
            }
            else
            {
               nextButton = level.doorCode[entryPosition];
            }
            level.buttonPressed = undefined;
         }
         else
         {
            nextButton = level.doorCode[0]; // button selected did not match nextButton - reset code
            level.buttonPressed = undefined;
            entryPosition = 0;
            continue;
         }     
      }     
      wait 0.05;   
   }   
}

watchTrigger(number)
{
   while(1)
   {
      self waittill("trigger");
      level.buttonPressed = number;
      wait 0.05;
   }
}

door_open()
{
// the rest....
 iprintln("open the door");
 
 door = getent("sliding_door","targetname");
 
 if(isdefined(door))
 {
   door movex(-70,2,0.5,0.25);
   door waittill("movedone");
   
   wait 3;
   
   door movex(70,2,0.5,0.25);
   door waittill("movedone"); 
 
 }
 
}

serthy
soo leute
^^
ja ich bin ein freak xD
nee hab nur ferien
also:
ich hab es nun so hinbekommen das ich (erstmal) 2 variable habe
level.var1
level.var2
beide kann ich nacheinander und unabhängig voneinander abrufen
also ich drücke 16 und es zeigt 16 an ^^
nur wie bekommt man jetzt zB das komma dazwischen weg?
wenn ich schreibt :
num = self getEntityNumber();
kick(num);
dieses num ist ja EINE zahl und ich hab 1 einzelne zahlen die zusammen die zahl ergeben sollen... mhh wie nur?
num = (level.var1 , level.var2);
ich glaube das geht so nicht


hätte da noch was im angebot, was allerdings auch seehr viel schreibarbeit bedarf:
if(level.var1 == 0 && level.var2 == 1) num = 1;
.
.
.
if(level.var1 == 6 && level.var2 == 4) num = 64;

geht auch noch
ich hab so das gefühl ich mache es mir mehr als umständlich
^^

ja wisst ihr wie umständlich? lol
hier so gehts doch etwas einfacher ^^
num = ((level.var1*10)+level.var)


okay das gestaltet sich etwas schwieriger
ich nehme mal einen neuen ansatzim password.menu steht folgendes:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
#include "ui_mp/menudef.h"

#define GLOBAL_TEXTSCALE1	0.25

{
\\ PASSWORD POPUP MENU \\

menuDef {
	name				"password_popmenu"
	visible 			0
	fullscreen			0
	rect				204 190 235 235
	focusColor GLOBAL_FOCUSED_COLOR
	style				1
	border				1
	popup
	onESC				{ close password_popmenu }

	itemDef
	{
		name			window
		group			grpControlbutton
		rect			0 40 235 135
		style			WINDOW_STYLE_FILLED
		border			1
		bordercolor		.5 .5 .5 .5
		forecolor		1 1 1 1
		backcolor		.1 .1 .1 1
		visible			1
		decoration
	}

	itemDef 
	{
		name			window2
		group			grpControlbutton
		rect			2 42 231 20 
		style			WINDOW_STYLE_FILLED
		border			1
		bordercolor		.1 .1 .1 .2
		forecolor		1 1 1 1
		backcolor		.3 0.5 0.2 0.5
		visible			1
		decoration
	}

	// PASSWORD //
	itemDef {
		name			window_title
		text			"@MENU_PASSWORD"
		style			0
		decoration
		textscale		.3
		rect			1 44 110 20
		textalign		1
		textalignx		117
		textaligny		16
		forecolor		1 1 1 1
		visible			1
	}

	itemDef {
		name			passwordEntry
		group			grpControls
		TYPE			4
		text			" "
		dvar			"password"
		rect			30 75 179 12
		maxchars		12
		maxpaintchars		12
		textalign		ITEM_ALIGN_RIGHT
		textalignx		0
		textaligny		10
		textfont		UI_FONT_NORMAL
		textscale		.25 		 
		forecolor		OPTIONS_CONTROL_FORECOLOR
		style			WINDOW_STYLE_FILLED
		backcolor		1 1 1 .3
		visible			1
		mouseenter		{ show keyBindStatus; play "mouse_over"; }
		mouseexit		{ hide keyBindStatus }
	}


	itemDef {
		name			yes
		text			"@MENU_OK"
		type			ITEM_TYPE_BUTTON
		textfont		UI_FONT_NORMAL
		textscale		GLOBAL_TEXTSCALE1
		textstyle		UI_BUTTON_TEXT_STYLE
		style			UI_BUTTON_STYLE
		border			UI_BUTTON_BORDER
		bordercolor		UI_BUTTON_BORDER_COLOR
		rect			70 150 100 15
		textalign		1
		textalignx		51		// center
		textaligny		11
		backcolor		UI_BUTTON_BACK_COLOR
		forecolor		UI_BUTTON_TEXT_COLOR
		visible			1

		action {
			play "mouse_click"
			close	password_popmenu
		}

		mouseEnter		{ setitemcolor yes backcolor UI_BUTTON_BACK_COLOR_HOVER;play "mouse_over"; }
		mouseExit		{ setitemcolor yes backcolor UI_BUTTON_BACK_COLOR }
	}
}
}



so das kann ich ohne probleme im spiel öffnen, es kommt dann die maus und man kann auch alles eingeben und man kommt wieder raus
aber die zahlen die ich eingebe, wo werden die ausgelesen und mit dem passwort verglichen?
serthy
okay laute bin der lösung schon etwas näher gerückt
ich habe das passwort script im letzten post etwas verändert
mein problem dazu ist wie ich das auslesen lässt

dazu hab ich folgendes gefunden:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
onOpen
{
setDvar cl_bypassMouseInput "0"
exec "setfromdvar name1 name";
//exec "setfromdvar name2 name2";
}

onClose
{
setdvar cl_bypassMouseInput "0"
exec "setfromdvar name name1";
//exec "setfromdvar name2 name2";

itemDef {
name passwordEntry
group grpControls
TYPE 4
text "Name1"
dvar "name1"
rect 060 170 285 30
maxchars 31
maxpaintchars 31
textalign ITEM_ALIGN_RIGHT
textalignx 0
textaligny 10
textfont UI_FONT_NORMAL
textscale .25
forecolor OPTIONS_CONTROL_FORECOLOR
style WINDOW_STYLE_FILLED
backcolor 1 1 1 .3
visible 1
mouseenter { show keyBindStatus; play "mouse_over"; exec "setfromdvar name name1";}
mouseexit { hide keyBindStatus; exec "setfromdvar name name1";}
}



so ihr müsst mir nur mal die setfromdvar-funktion erklären grosses Grinsen grosses Grinsen



coool
habs so gemacht wie der typ von dem der code kommt
im passwortfenster steht nun mein name und wenn ich den ändere nenn ich mich um xD
also schon einen groooßen schritt weiter



soo habs ma so umgepfriemelt das ich n passwort eingeben kann und es wird mit diesem script abgefragt:

Code einblendenCode angehängt. Klicke hier zum Ein-/Ausblenden

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:


kick(response)
{
for(;;)
{
self waittill("menuresponse", menu, response);
if(response == "confirm_kick")
{
self thread username();
continue;
}
}
}



username()
{
password = getCvar("ui_password");
iprintln(password);
}



>>nur wie bekomme ich jetzt das pass wird in den rcon befehl???
>>kann ich auch selbsterstellte befehle nehmen?? (s_kickuser <userid> ?)
>>wie geht die lücke weg? der befehl lautet ja z.b. rcon map <mapname> zwischen rcon und map ist eine lücke die erkennt es ja nicht das das ein zusammenhängender befehl ist..



also hier mal das mit dem namen ändern:

exec "setfromdvar name name1";

und zwar ist name1 das was ich in das textfeld eingebe
folglich ist es der wert
name ist dann also die variable
die muss ich ändern zu /rcon login
was dann so aussehen sollte:

exec "setfromdvar (rcon login) password";

allerdings scheint es das rcon login kein gültiger befehl ist
aus den klammern kann ich es auch nicht nehmen, da ja sonst 3 dinge (rcon + login + password) dastehen
ich hab mal wie der typ (script siehe oben)
nach 'ui_password' gegoogelt.. kaum erfolge
also die wichtige frage
was kann hinter setfromdvar stehen??
und was ist der unterschied zwischen dvar und cvar
(dachte dvar = cod4 cvar = cod2)
setfromdvar kommt auch fast nirgends vor außer in mp_configs lol
serthy
okay mein problem besteht weiter
und zwar kann man auch custom-cvars verwenden
aber ich kenne mich noch nicht so aus mit cvars und dvars

aber da warte ich bis ihr mir alles noch beibringt :p

ich mache derweile bei der optik weiter
und zwar

gibt es ja die funktion <rect> im menü

kann mir eventuell mal jemand beibringen wie man die position bestimmt?

habe gelesen das man von der linken oberen ecke des kastens ausgeht und das als 640x480 definiert ist

hab auch schon probiert den kasten dahinzurücken wo er hin soll, aber ich werd da nicht schlau drauß

ich weiß das vollbild rect 0 0 640 480
ist
mehr aber auch nicht
könntet ihr mir die position mal ansatzweiße sagen wie sie hier auf dem bild ist?:

also das grün-gelbliche soll das recheck sein und das schwarze der bildschirm im spiel ^^
bangingbernie
Die Funktion <rect>:

rect x y Breite Höhe (B/H des Rechteckes)

Musst Du halt etwas probieren.... Freude
serthy
hey leute

bald ist es geschafft
wer interesse an einem kleinen ingame cod2 admintool hat kann gerne fragen
es beinhaltet:
-anzeige des profils eines spielers
> name
> guid
> entitynumber
> kills
> deaths
> team
> status
-mann kann jeden spieler im spiel somit ansehen
-kick, ban, tempban, kill, teamswitch des spielers

vielleicht kürze ich das tool noch und füge andere dinge hinzu
und am aussehen muss ich noch pfeilen, kann noch etwas dauern
serthy
so
noch einmal eine frage:

hab mir grad mal den admiralmod genauer angesehn
der hat ja so verdammt viel features grosses Grinsen

wisst ihr wie ich an den modder rankomme?

möchte gerne einige bilder/scripte von dem verwenden
bangingbernie
Der Modder war Matthias Lorenz. Wenn ich mich recht entsinne, hat der aufgehört, weil er keine "Killerspiele" mehr unterstützen wollte....
serthy
Oh, wie schade
obwohl ich auch eher fan von 'killerspielen' ala cod1-2 bin

die anderen sind einfach viel zu überladen und teilweise auch zu komplex für mich
auch fand ich die grafik, dieses comic-artige genial (cod2 und gta:sa)

naja soviel dazu ^.^

die scripte von admiralmod sind sehr schön anzusehen, übersichetlich und insgesamt sehr gut!

mal sehen, ich werd mir alles was ich brauch mal anschauen und dann meine eigene version davon zusammenschreiben