Not a member yet? Register for your free account!


Go Back   elitepvpers > Flyff (Fly For Fun) > Flyff PServer - Discussions / Questions
You last visited: Today at 13:52

  • Did you know? elitepvpers has its own image host, epvpimg.com.

 

Flyff-PServer - Diverse Befehlslisten (aid, ncd, wos und *server.ini)

This is a discussion on Flyff-PServer - Diverse Befehlslisten (aid, ncd, wos und *server.ini) within the Flyff PServer - Discussions / Questions forum part of the Flyff (Fly For Fun) category; Morsche Ich "suche" eine Liste sämtlicher oder der meisten (oder wenigstens überhaupt welche) Befehlen. Für die, die net genau wissen ...

Reply
 
Thread Tools
Old 10-25-2008, 20:22   #1
Dreamer
 
Yoshi 72's Avatar
 
Join Date: Oct 2008
Posts: 19
Received Thanks: 31
Diverse Befehlslisten (aid, ncd, nps, wos und *server.ini)


Morsche

Ich "suche" eine Liste sämtlicher oder der meisten (oder wenigstens überhaupt welche) Befehlen.

Für die, die net genau wissen welche ich meine:
AI (Im Ordner AIData): Die KI der Gegner...
NCD (Im Ordner NCDFiles): Die Dialoge der NPCs
wos (im Ordner worldobjectscripts): Das Script für die Interaktion mit bestimmten Objekten
*server.ini (im Root Verzeichnis): die 3 Konfigurationsdateien des Char, login und world servers



Da ich sehr bezweifle das irgendjemand solch eine Liste parat hat, versuch ich einfach in dem Thread eben alle bekannten Befehle aufzulisten...
Wäre also dankbar, wenn ihr mir helfen würdet und ergänzt.
Hier also das, welches ich bereits selber weiß:


AI - Künstliche Intelligenz
Beispiel (ein von mir gemoddetes Aibatt...):

Code:
AI{#Scan{scan}#battle{Attack cunning low     summon 50 5 164}#move{Loot d 5}}
Das Aibatt greift an und spawnt mit einer Wahrwscheinlichkeit von 50% 5 Clockworks. Außerdem bewegt sich das Aibatt zu einem bestimmten Loot (oder unbestimmt?)

Code:
AI{#data{m_dwattackmovedelay=2000	m_dwrunawaydelay=3000	m_nattackfirstrange=8}#Scan{scan}#battle{ }#move{ }}
Die mir bisher bekannten Standartstruktur...
Ich nehme an,dass #Data Diesen Befehl gibt es nur bei den Serverfiles von Caali, im Client gibt es den nicht (siehe unten). Ich bin mir nicht sicher, ob der Befehl überhaupt irgendwelche Aktionen ausführt, aber ich bezweifle es. Falls doch, dann nur einige, wenige, bestimmte.
Der Befehl #scan ist dazu da, das das Mop nach bestimmten Spieler "scant". Das heißt, er sucht seine Umgebung nach einen Spieler ab, der bestimmte kriterien erfüllt. Ist ein solcher Spieler vorhanden, wird er automatisch angegriffen, selbst wenn das Mop NICHT aggro ist.
#battle kann sich jeder wohl denken... In der Klammer dort wird aufgelistet, wie sich das Monster bei einem Kampf verhalten soll
#move ist auch leicht zu verstehen. Das mop bewegt sich dann ganz einfach zu dem jeweiligen objekt... vlt kann man coords angeben, oder irgendwie die Spieler ID... wahrscheinlich, kann ich aber nicht sagen



#scan
Scan jon (jobNum) range (num) quest (QuestID) item (ItemID) chao (100,101) s ist ein etwask omplitziert aufgebauter Befel... Ich bin mir nicht sicher, aber ich glaube man kann den auch aufteilen. Allerdings solltet ihr das erst einmal selber testen, denn bis ich dazu komme wirds noch etwas dauern. Nun zu den einzelnen Variablen in den Klammern: jobNum steht logischerweise für die Job ID, welcher ein Spieler haben muss, damit das Mop drauf reagiert. Weiß nicht ob man mehrere reinschreiben kann und vorallem wie. Testet es einfach mal aus. num steht logischerweise für die Reichweite, welche er abscant. Ich denke mal, die Reichweite beträgt eine Koordinate (ja, dieses Wort gibt es). QuestID steht ja dann wohl für die Quest ID welche der Spieler haben muss, um angegriffen zu werden. Wie ihr dieser herausbekommt? Schaut in den Server Files nach! Das gleiche wie bei QuestID und jobNum gilt auch für die ItemID. Hier scant das Mop nach einem bestimmten Item, welcher der Spieler mit sich trägt. Bei chao bin ich mir malwieder nicht ganz sicher... Ich vermute es bedeutet, ob er danach sucht, das der Spieler negatives Karma hat ("Chao Guardian").


#battle
Attack (X) cunning (Hi,sam,low): Logischerweise steht es dafür, das es Angreift. Ich bin mir zwar nicht sicher, aber einige Monster brauchen den "Attack"-Befehl nicht, um angreifen zu können. Z.B. ist beim Offi-Server für Small Boos kein Befehl unter #battle registriert. cunning muss man nicht zwangsweise reinschreiben. Wofür aber die Befehle (X), cunning und (Hi,sam,low) stehen kann ich leider nicht sagen. Ich weiß nur, dass (X) für eine Zahl steht (wahrscheinlich für einen prozentualen Effekt) und das man sich eines von den, in der Klammer stehenden Befehlen aussuchen soll, bei (Hi,sam,low)

Berserk XX Y: X steht für den prozentsatz der HP welches das monster maximal haben darf um in den berserk mode zu gehen... dabei wird der schaten um den faktor von Y erhöht (oder gegebenfalls gesenkt wenn man das will...)

summon XX Y ZZZ: Damit spawnt der Gegner ein anderes Mop. X steht für die wahrscheinlichkeit (100 ist dann sofort) (wahrschenlich in %), Y für die anzahl und Z für die Monster ID. Solange ein gespawnter gegner noch lebt, werden keine neuen gespawnt.

recovery XX YY ZZZ m: Selfheal. X steht für den Prozentsatz seiner HP welcher unterboten werden muss, damit sich das Mop healt. Y steht für den Prozentsatz auf welche die HP dann aufgestockt werden soll. Z bin ich mir nicht sicher, aber ich glaube es steht für die wahrscheinlichkeit. m kann man genauso gut durch u und a ersetzen. Der Unterschied ist mir nicht bekannt.

Keeprangeattack (Range) ist dafür da, dass das Mop versucht auf Distanz zu bleiben und mit Fernangriffen "zuschlägt". (Range) steht für die Entfernung

Rangeattack (X) ist wieder son gammliger Befehl, mit welchem ich nicht viel zu anfangen weiß. (X) steht logischerweise für eine Zahl.

Evade (X) steht für die Missrate der, auf das Aibatt gerichtete, Attacken mit einer Prozentualen Bedeutung.

Helper (freq) (sr) (num) (mtype): Ich bin gnadenlos überfragt...

Randomtarget Á¦ÀϸÕÀú ¾²ÀÌ´Â °æ¿ì »ç¿ë: Ich habe weder Ahnung ob Á¦ÀϸÕÀú ¾²ÀÌ´Â °æ¿ì »ç¿ë irgendeine Bedeutung hat, bzw wichtig für den Befehl ist (das steht jedenfalls in der Datei vom Client drin), noch was eigentlich der gesamte Befehl bewirken sollte.

#move
Loot (d) (X,Y) (code) (?): Das Mop bewegt sich zu einem bestimmten, auf dem Boden liegendem Item und hebt dieses auf. Allerdings versteh ich das nicht so recht...


teleport (freq) (X,Y or 1~5) (mana) (batt):
Noch so ein Befehl, welcher mir völlig schleierhaft ist.



Und um noch einmal zurück auf den Client zu sprechen: Die AIDatas des Servers beinhalten NICHT alle Befehle, welche im Client registriert worden sind. Ich zeige euch mal ein Beispiel:

Code:
MI_AIBATT1
{
	Maxitem = 2;
	DropGold(6, 9);

	DropItem(II_GEN_GEM_GEM_TWINKLESTONE, 300000000, 0, 1);

	m_dwAttackMoveDelay = 2000;
	m_dwRunawayDelay = 3000;
	m_nAttackFirstRange = 8;
   
        AI
	{
		#Scan
                    {
			scan
                    }
		#battle
		    {
			Attack cunning low
//			evade 5
                    }
		#move
		    {
			Loot d 5
		    }	
   	}               
}
Wie ihr seht, steht auch vor AI noch etwas anderes. Unter anderem die Drops, Anzahl der Drops und Penyas. Leider funktioniert das, aus irgendwelchen Gründen, nicht in der AIData des Servers. Ihr müsst also nach wie vor die Drops per DropData definieren. Was allerdings für uns interessant ist, sind die Befehle, die darunter stehen. Und zwar z.B. m_dwAttackMoveDelay = 2000;. Ihr habt diese Befehe vielleicht schon einmal in de AIDatas gesehen unter #Data. Allerdings, wie bereits schon gesagt, glaube ich nicht, das die dort eingetragenen Befehle eine Wirkung haben. Zumindestens wahrscheinlich nicht alle. Ich liste nun all diese Befehle auf, welche im Client eingetragen sind:

Maxitem = X: Steht für die Anzahl der Items, welches ein Monster MAXIMAL auf einmal droppt (Questis und Food inbegriffen, allerdings kein Money).

DropItem(II_GEN_GEM_GEM_TWINKLESTONE, 300000000, 0, 1) ist ganz klar für ein Item, welches dieses Monster droppen kann. Die erste Zahl steht für die Wahrscheinlichkeit, die letzte für die Anzahl der Drops. Ich habe keine Ahnung wofür das 2. steht. Glaube aber z.B. für das + Bei Ringen (z.B. hat CW 9, 15 und 18 bei den Ringen)

DropGold(Min, Max): ist wohl eindeutig, oder?

QuestItem: Ich habe überhaupt keine Ahnung. Kein Monster hat solch einen Befehl. Und auch keine wirklich lesbare Beschreibung ist vorhanden. Ihr könnt ja mal versuchen, ob ihr etwas herausfindet, allerdings müsste es schwer werden, da ihr auch die Variablen nicht kennt, welche ihr dort angeben könntet/müsstet.

m_dwAttackMoveDelay = 0: I have no plan. You should ask someone else. P.S.: Small Aibatt und Small Mushpang sind die einzigen Mops, die einen m_dwAttackMoveDelay = 2000 haben. Ansonsten haben die ein oder anderen Mops noch einen von 0.

m_dwRunawayDelay = 1000: Hab ich genauso wenig Ahnung von.

SetRunAway( 10, MI_DORIDOMA1, 2 ): Dies bewirkt, das der Gegner sich ab einer bestimmten HP Rate vom Spieler abwendet. 10 steht in diesem Fall für die % Rate der HP, welche unterboten werden muss. MI_DORIDOMA1 glaub ist, ist ein Mop, zu welches sich das fliehende Monster hinbewegen würde... Allerdings kann ich keien Garantie geen! Man kann es auch durch 0 ersetzen. wofür die 2 wieder steht hab ich malwieder (...) keinen blassen schimmer.

SetCallHelper( 100, MI_NUCTUVEHICLE2, 5, TRUE): Hier wirds wieder Komplitziert. Ich kann euch nicht sagen, was dieser Befehl eigentlich bewirken soll... Ich kann nur soviel sagen, das 100 für irgendwelche HP in % steht. MI_NUCTUVEHICLE2 wohl für die Gegner, welche er "um Hilfe ruft", 5 nehme ich ma an für die Anzahl und das TRUE (oder FALSE) steht, laut beschreibung, für "bParty"... Allerdings was das genau heißen soll/welche Bedeutung das nun letzendlich hat, kann ich nicht sagen... Sorry Guys, kann euch malwieder net helfen :P

m_nAttackFirstRange = 10: Ich bin zwar nicht sicher, aber vielleicht die Entfernung des Ersten Angriffs des Gegners, welches eine Fernattacke ist. Ihr kennt doch einige Gegner. Erst einmal Fernkampfangriff gemacht und dann zu euch hergerannt und nur noch Nahkampf. Allerdings geb ich wieder keine Garantie...

DropKind(IK3_SUIT, 6, 13): Ich hab den Befehl nicht wirklich verstanden, bzw ich kann ihn nicht nachvollziehen (is auch doof, wenn man all das ja net testen kann! Caali Files FTL. Kann euch nicht wirklich viel zu den Variablen erzählen, lediglich das IK3_SUIT wohl für eine Suit stehen würde... Aber darauf wärt ihr wohl selbst gekommen, oder? ^^

DropEvenitem: Fehlt wieder jegliche Beschreibung im Spiel. Ich müsste schon hellsehen um das zu verstehen.

DropQuestItem(): Is mir ebenso vorenthalten, wie schon bereits ein paar andere Befehle.

P.S.: Die // dienen dazu, das der Befehl keine Wirkung hat. mit anderen Worten: Das Evade des Aibatts funktioniert nicht, weil es von den GMs aus irgendeinem Grund rausgenommen wurde. Das Spiel würde also so fortfahren, als würde es den Befehl nicht geben. Ist praktisch, wenn man mal vorrübergehend einen Befehl deaktivieren will, aber ihn nicht gleich löschen will, um ihn später wieder einzutragen. Das Funktioniert auch beim Trade Code und den anderen!


Dropwahrscheinlichkeit
Code:
9375		0.0003125%	320000
18750		0.000625%	160000
37500		0.00125%	80000
75000		0.0025%		40000
150000		0.005%		20000
300000		0.01%		10000
1000000		0.0333%		3000
1875000		0.0625%		1600
3000000		0.1%		1000
3750000		0.125%		800
5000000		0.166%		600
7500000		0.25%		400
15000000	0.5%		200
30000000	1%		100
300000000	10%		10
3000000000	100%		1
Die 1. Zahl steht für die Zahl, welch du dann eintragen müsstest.
Die 2. für den Prozentsatz
Die 3. weiß ich nicht genau den nutzen von... 100% steht für 1. Und wenn du dann 10% davon nehmen wilslt, rechnest du es rückwärts. So ergebe 10% 10 und 1% 100. Mit anderen Worten: die Zahl, welche du die % oder Wahrscheinlichkeit mal nehmen musst, um wieder 100% Dropchance zu erreichen.

Wie berechne ich nun aus, welche Zahl ich für einen bestimmten Prozentsatz ich nehmen soll?
Leute, das ist einfaches Mathe... aber ich erklärs nomma:
Wenn man z.B. 5% haben will,
schnappt man sich die Zahl von einem gescheiten Prozentsatz. Z.B. nehmen wir nun einach mal das von 1%, weil es am einfachsten zu rechnen ist (OK, 10% wäre vlt einfacher.. egal). Dort haben wir die Zahl 30000000 (30.000.000 - 30Millionen - 3*10^8).Dann rechnest die 30000000 mal 5. Das würde dann 150000000 ergeben (150.000.000 - 150Millionen - 15*10^7).






NCD - Non-character dialoge? kA^^
Beispiel (Achaben aus Darkon):

Code:
"@@DATA@@"
{
	AddNPCChat( "Do you need very cheap, but powerful goods? If yes, come to Achaben's General Shop!" );
	AddNPCChat( "I'm selling Refreshers, Vital Drinks and various pills for cheap!" );
	AddNPCChat( "Very very high-quality goods for a low price at Achaben's General Shop!" );
};

"main"
{
	RemoveAllTextButtons( );
	AddText( "Hello %PLAYERNAME% !" );
	AddTextButton( "Bye!" );
	AddTextButton( "Introduction" );
};

"Bye!"
{
	CloseWindow( );
	NPCChat( "Have a nice day!" );
};

"Introduction"
{
	AddText( "I'm Achaben, I run the General Shop here! I sell almost all miscellaneous goods, and cheaply." );
};
Dieser NPC spricht ein paar unwichtige sätze un hat insgesammt 3 aktionen zur verfügung welche man auswählen kann. eine davon ist, das fenster wieder zu schließen

Aufbau:

Code:
"@@DATA@@"
{
	AddNPCChat( "Do you need very cheap, but powerful goods? If yes, come to Achaben's General Shop!" );
	AddNPCChat( "I'm selling Refreshers, Vital Drinks and various pills for cheap!" );
	AddNPCChat( "Very very high-quality goods for a low price at Achaben's General Shop!" );
};
bestimmte, festgelegte Eigenschaften oder Aktionen die der NPC hat oder machen soll.
Z.B. bei diesem hier werden in den sprechblasen, die ein NPC manchmal von sich gibt einer dieser 3 texte stehen. Aber es gibt auch andere befehle die man einfügen könnte.


Code:
"main"
{
	RemoveAllTextButtons( );
	AddText( "Hello %PLAYERNAME% !" );
	AddTextButton( "Bye!" );
	AddTextButton( "Introduction" );
};
Hier wird bestimmt was getan und gesagt werden soll wenn du den NPC ansprichst
in diesem fall werden alle buttons entfernt, der text "hello *name des spielers* eingeblendet
und die buttons "
Bye" und "Introduction" hinzugefügt.


Code:
"Introduction"
{
	AddText( "I'm Achaben, I run the General Shop here! I sell almost all miscellaneous goods, and cheaply." );
};
Hier wird also dann festgelegt was gemacht werden soll wenn man au den Butten "introduction" klickt.



Das sind im groben die 3 teile aus denen der NPC "besteht".
nun kommen wir aber zu der beschreibung der befehle:

AddNPCChat( "Text" );
der in den " stehende text wird ab und an in form von einer sprechblase, die der NPC manchmal von sich gibt angezeigt.

AddText( "Text" );
Mit diesem Befehl wird sofort und einmalig eine Sprechblase erzeugt mit dem darin enthaltenen text.

AddTextButton( "Morsche" );
Erstellt einen Button mit der aufschrit Morsche. Dies dient zur interaktion mit dem NPC.

RemoveAllTextButtons( );
Entfernt alle momentan vorhandenen TextButtons. ratsam dies in jeder neuen befehlszeile zu schreiben. und vorallem: bevor man neue buttons erstellt^^

AddText( "Hallo du kleiner Zwerg!" );
Zeigt dann im Dialogfenster des NPCs den Text mit der aufschrift Hallo du kleiner Zwerg an.

SetNPCEquipment( 6, 751 );
gibt dem NPC ein bestimmtes Equipment. in diesem Falle einen Bluemoon helmet. Die 6 steht in diesem Fall für die Parts. Z.B. hat das Red Dress Helmet das Part 26. Ihr könnt das ganz einfach in eurer DB eintragen. Wenn Part und Item ID nicht stimmen, dann funkst es auch net. Man kann auch ihnen eine Waffe geben.
VORSICHT: ich glaube es geht nur, wenn der NPC ein das model eines spielers hat. Wenn dies der fall ist. sollte man diesen Befehl möglichst bei der Data Befehlsleiste einfügen, ansonsten is der NPC nackt^^. und wenn möglich auch die klamotten passend zum gechlecht... sonst siehts etwas komisch aus :P
P.S.: Der Befehl funktioniert glaub ich nur unter der Data Befehlsleiste.. ansonsten kommt bei meiner Worldserver.exe eine Fehlermeldung:

CNCDParser: :ExecuteBlock -> Unrecognized command "SetNPCEquipment"!
Could not execute the NPC Speech file for MaDa_Laloa with arguments Red Dress Klamotten ! ErrorCode: 5

vlt kann jemand was mit dem Fehlercode anfangen :P

Codes für die texte:
%PLAYERNAME% - Zeigt den spielernamen an
/" - zeigt ein " an
Info: ich nehme an das man mit / auch andere sonderzeichen zeigen lassen kann... un ich weiß net ob umlaute aus dem deutschen funktionieren
ich nehms einfach ma an^^





Für die, die rev 2 nutzen gibt es aber andere Files als NCDs. Sie sind zwar komplitzierter, aber weitaus besser, weil man da mehr Möglichkeiten besitzt. Diese werden mal hier beschrieben:

Code:
function OnLoadData( )
	math.randomseed( os.time() )
	nps_SetNPCChatInterval(math.random(10000,20000))
	nps_AddNPCChat( "There are so many flowers today! And they look so beautiful!" );

	nps_SetNPCEquipment("PARTS_CAP","II_ARM_F_MAG_HELMET08")
	nps_SetNPCEquipment("PARTS_UPPER_BODY","II_ARM_F_MAG_SUIT08")
	nps_SetNPCEquipment("PARTS_HAND","II_ARM_F_MAG_GAUNTLET08")
	nps_SetNPCEquipment("PARTS_FOOT","II_ARM_F_MAG_BOOTS08")
	nps_SetNPCEyeStyle(2)
	nps_SetNPCHairStyle(0)
	nps_SetNPCHairColor(0xFF080808)
	return 1
end

function OnOpenWindow( )
	nps_RemoveAllTextButtons( )
	nps_AddText( nps_GetString("IDS_MADA_LALOA_OPEN_WINDOW_TEXT") )
	nps_AddTextButton( nps_GetString("IDS_MADA_LALOA_TB_BYE"), "BUTTON_BYE" )
	nps_AddTextButton( nps_GetString("IDS_MADA_LALOA_TB_INTRODUCTION"), "BUTTON_INTRODUCTION" )
	return 1
end

function OnButton(szButtonName)
	if( szButtonName == "BUTTON_BYE" ) then return OnButtonBye( )
	elseif( szButtonName == "BUTTON_INTRODUCTION" ) then return OnButtonIntroduction( )
	else return 0
	end
end

function OnButtonBye( )
	nps_CloseWindow( )
	nps_NPCChat( "Have a nice day!" )
	return 1
end

function OnButtonIntroduction( )
	nps_AddText( nps_GetString("IDS_MADA_LALOA_INTRODUCTION") )
	return 1
end
Aufbau: gleich, mit nur einem zusätzlichen Eintrag:

Code:
function OnButton(szButtonName)
	if( szButtonName == "BUTTON_BYE" ) then return OnButtonBye( )
	elseif( szButtonName == "BUTTON_INTRODUCTION" ) then return OnButtonIntroduction( )
	else return 0
	end
end
In dieser Zeile wird festgelegt was passieren soll wenn auf einen Button geklickt wird.



Nun zur Erläuterung:

math.randomseed( os.time() )
Is mir Ungewiss... steht aber bei jedem dabei, also iwas wichtiges. Ich nehme mal an, irgendwas für für den zufälligen Interval des untenstehenden Befehls.

nps_SetNPCChatInterval(math.random(10000,20000))
Die Zeit zwichen den Sprechblasen des NPCs. In diesem Fall ist es eine zufällige Zahl zwichen 10000ms und 20000ms.

nps_AddNPCChat( "There are so many flowers today! And they look so beautiful!" );
Der Text, welcher in den Sprechblasen angezeigt werden soll.

nps_SetNPCEquipment("PARTS_FOOT","II_ARM_F_MAG_BOO TS08")
Gibt deinem NPC Klamotten und anderen Müll^^ "PARTS_FOOT" steht für das Teil, welches er tragen soll und "II_ARM_F_MAG_BOOTS08" für das Item, welcher er tragen soll. Leider geht es nun net mehr über item ID und Partnummer... schade eigentlich, aber solange es irgendwie noch geht isses in Ordnung.

nps_SetNPCEyeStyle(2)
Legt fest, welches Face der NPC haben soll.

nps_SetNPCHairStyle(0)
Das gleiche wie beim Face, nur für die Frisi

nps_SetNPCHairColor(0xFF080808)
Und das gleiche nomma für die Haarfarbe

return 1
Wofür das return steht hab ich leider auch keine wirkliche Ahnung...

nps_RemoveAllTextButtons( )
Das gleiche wie schon bei den NCDFiles... terminiert alle Buttons.

nps_AddText( nps_GetString("IDS_MADA_LALOA_OPEN_WINDOW_TEXT") )
Fügt den Thread, welcher für die Variable "[COLOR]IDS_Mada_LALOA_OPEN_WINDOW_TEXT" gespeichert worden ist. Die Datei in welcher diese Variable gespeichert worden ist findet man unter dem Ordner "Language\en_en\NPSFiles"

nps_AddTextButton( nps_GetString("IDS_MADA_LALOA_TB_INTRODUCTION"), "BUTTON_INTRODUCTION" )
Er erstellt einen Button und legt die Variable "BUTTON_INTRODUCTION" für ihn fest. Die Beschriftung des Buttons lädt er von der Variable "IDS_MADA_LALOA_TB_INTRODUCTION"

nps_CloseWindow( )
Schließt das Fenster^^



nps_NPCChat( "Have a nice day!" )
Erstellt eine Sprechblase mit dem Text "Have a nice day!"

nps_AddNPCChat( "There are so many flowers today! And they look so beautiful!" );
Legt fest, dass einer der Sprechblasen, welche der NPC von sich gibt, folgenden Text beinhaltet.






wos - world object scripts
des hier ist glaub ich das komplitzierteste von allen...
zumindestens wenn man etwas größeres damit basteln will


die wos werden aktiviert, sobald man ein objekt benutzt, welches man in der datenbank unter der tabelle spawns_worldobjects eingetragen hat. welches script bei welchem objekt verwendet werden soll, kann man ebenfalls in der DB einstellen
Das beste beispiel ist wohl der masdungeon (serus uriel box):


Code:
dwMobChance = math.random(0,100)
szMobName = ""
dwMobCount = 0
bSpecial = 0

if (dwMobChance < 30) then
	szMobName = "MI_VICEVEDUQUE"
	dwMobCount = 5
elseif (dwMobChance < 70) then
	szMobName = "MI_DUBANG1"
	dwMobCount = 5
elseif (dwMobChance < 99) then
	szMobName = "MI_WORMVEDUQUE"
	dwMobCount = 1
else
	szMobName = "MI_SERUSURIEL"
	dwMobCount = 1
	bSpecial = 1
end

if (bSpecial ~= 1) then
	if (wos_SpawnMonstersInCircle(szMobName,dwMobCount,100,2,1) ~= 0) then
		wos_ShowWorldObjectAnimation()
		wos_SetInvisibleWithTimeout(60000) --1min
	end
else
	MobClientID = wos_SpawnMonstersInCircle(szMobName,dwMobCount,100,2,1)
	if (MobClientID ~= 0) then
		wos_ShowWorldObjectAnimation()
		wos_SetInvisibleWithTimeout(60000) --1min
		wos_MonsterCastSkill(MobClientID,"SI_GEN_STUNGROUP",5)
		wos_MonsterCastSkill(MobClientID,"SI_GEN_FLASH",5)
	end
end



daaaaaaaaaaann fangen wir mal an.. stückchenweise:
dwMobChance = math.random(0,100)
szMobName = ""
dwMobCount = 0
bSpecial = 0


das sind variablen die festgelegt werden...
wobei man bei ersteren sagen muss, das die "festgelegte" variable eine zufällige mathematische zahl (integer - also nur ganze zahlen) zwichen 0 un 100 ist. beim 2. existiert keine und bei den anderen 2 sind die variablen eben 0^^


Code:
if (dwMobChance < 30) then
	szMobName = "MI_VICEVEDUQUE"
	dwMobCount = 5
elseif (dwMobChance < 70) then
	szMobName = "MI_DUBANG1"
	dwMobCount = 5
elseif (dwMobChance < 99) then
	szMobName = "MI_WORMVEDUQUE"
	dwMobCount = 1
else
	szMobName = "MI_SERUSURIEL"
	dwMobCount = 1
	bSpecial = 1
end

das ist eine ganz einfache if abfrage..
im grunde sagt sie aus:
wenn die variable von
dwMobChance (welche ja oben per zufall festgelegt worden ist) kleiner als 30 ist, dann ist die variable für szMobname gleich "MI_VICEVEDUQUE" und die variable für dwMobCount wäre dann 5. falls dies aber nicht der fall ist, wird überprüt ob die variable kleiner ist als 70. das geht also immer so weiter bis die if abfrage fertig ist. wenn dann entweder die variable der dwMobChance zutreffend für eines der abfragen ist, oder wenn alle abfragen "ungültig" sind und demnach dann das letzte (also serus uriel) ausgeführt wird, endet die abfrage. das heißt also, wenn z.B. die zahl kleiner als 30 ist, führt er die anderen i abfragen nicht durch.


Code:
if (bSpecial ~= 1) then
	if (wos_SpawnMonstersInCircle(szMobName,dwMobCount,100,2,1) ~= 0) then
		wos_ShowWorldObjectAnimation()
		wos_SetInvisibleWithTimeout(60000) --1min
	end
else
das überprüft ob die variable bSpecial 1 ist. dies ist nur dann der fall, wenn die 3 ersteren if abfragen ungültig waren und somit serus uriel gespawnt worden ist. wenn also dies der fall ist, dann spawnt er ein monster mit dem namen, welche für die variable szMobName festeegt worden ist, in der umgebung des objektes. wofür genau die 3 variablen (100, 2 und 1) stehen weiß ich net genau.. ich kann nur sagen, das 1 wohl für dei mopanzahl steht.
Danach führt das jeweilige objekt eine animation aus (in der klammer könnte man vlt etwas festlegen, aber ich hab keine ahnung was). und das objekt wird dann ür 1 minute lang "unsichtbar"... bzw mehr oder weniger nicht existent und spawnt nach einer min wieder neu.



Code:
MobClientID = wos_SpawnMonstersInCircle(szMobName,dwMobCount,100,2,1)
	if (MobClientID ~= 0) then
		wos_ShowWorldObjectAnimation()
		wos_SetInvisibleWithTimeout(60000) --1min
		wos_MonsterCastSkill(MobClientID,"SI_GEN_STUNGROUP",5)
		wos_MonsterCastSkill(MobClientID,"SI_GEN_FLASH",5)
	end
end
THX an Darkdevil1 für die Erläuterung des Befehls:
Spawnt ein Monster, welches in der Variable szMobName vorher gespeichert worden ist, mit der Anzahl, die in dwMobCount gespeichert worden ist. Aggro Chance beträgt 100%, Radius des Kreises, in welchem es gespawnt wird beträgt 2 und die 1 steht für die Größe des Monsters.
Ebenso wird die ID des gespawnten Monsters über eine If-Schleife überprüft. Sollte die ID ungleich 0 sein, so führt das wos folgende Befehle aus:
Das WO führt eine Animation aus (in diesem Fall öffnet sich die Truhe)
Die Truhe wird für eine Minute lang "unsichtbar" (für den Spieler praktisch nicht existent)
Das/die Monster setzen einen Skill ein, welcher den Namen "SI_GEN_STUNGROUP" trägt und lvl 5 beträgt.



befehlserleuterung:
wos_GetClientLevel(X)
X = das Level, auf welches der Spieler gesetzt werden soll
Oder die Anzahl der lvl ups?

wos_GetClientEXP(X)
X = die EXP, welche der Spieler bekommt

wos_GetClientAccessLevel(X)
X = das Acces Level, auf welches der Spieler gesetzt wird (1000 = GM, 100 = normaler Spieler)

wos_GetClientGender(X)
X = Das geschlecht auf welches er gesetzt wird.
1 = weiblich
2 = männlich? (oder war male 0? weiß nemmer)

wos_GetClientPenya(X)
X = Anzahl der Penya die der Spieler bekommt, oder auf welches seine Penyas gesetzt werden?

wos_HasClientItemInInventory("II_SYS_SYS_KEY_DKDUI DCARD",1)
Überprüft ob der Spieler das Item DKDUIDCARD besitzt. Wird soweit ich weiß nur in if-Schleifen verwendet oder?
Z.B.
if wos_HasClientItemInInventory("II_SYS_SYS_KEY_DKDUI DCARD",1) ~= 0 then
überprüft die anzahl des Items. Die if-schleife wird erst aktiv, wenn die Anzahl NICHT 0 beträgt (also größer als 0... oder weniger als null.. aber man kann net weniger items haben als 0 :P )

wos_ClientSendDefinedText("ZZZ")
ZZZ steht für den Text, welcher der Client in form von einer noramlen Chatnachricht von sich gibt, kann das sein? Müssen dann auch " gesetzt werden?

wos_TeleportClientWorld(X,Y,Z)
Teleportiert den Spieler an folgende Koordinaten.

wos_TeleportClientWorld("WI_DUNGEON_DA_DK",745,85, 780)
Teleportiert den Spieler in die World, mitsamt den Koordinaten.

wos_RemoveItemFromClientInventory("II_SYS_SYS_KEY_ DKDUIDCARD",1)
Terminiert ein bestimmtes Item, welches sich im Inventar des Spielers befindet. In diesem Falle 1 mal das Item DKDUIDCARD

wos_SpawnMonstersInCircle(M,N,A,E,G)
M = Name des Monsters
N = Anzahl der zu spawnenden Monster
A = Aggro Chance in %
E = Entfernung, bzw Radius des Kreises in welchem er gespawnt wird
G = Größe des Monsters
Spawnt also ein Monster in einem Bestimmten Kreis mit den Oben stehenden Variablen

wos_SetInvisibleWithTimeout(X)
Macht das WorldObject für eine bestimmte anzahl von millisekunden "unsichtbar" und demnach im grunde nicht existenz für den Spieler

wos_ShowWorldObjectAnimation()
Spielt die Animation
des WO ab.. was allerdings kommt in die Klammer rein? bzw könnte

wos_ShowOtherWorldObjectAnimation(X)
Spielt die Animation
des WOs ab, welches die ID in der Klammer besitzt (wird in der DB festgelegt)

wos_ShowSfxOnClient()
Spielt einen bestimmten Effekt an der position deines Charas ab. Allerdings kenn ich die Variablen nicht

wos_ShowSfxOnWorldObject()
Das gleiche wie Oben, allerdings gültig für das WO

wos_MonsterCastSkill(M,S,L)
Lässt ein bestimmtes Monster einen Skill casten
M = Monster ID
S = Name des Skills
L = Skilllevel
Allerdings, wird der Skill dann nur während der Aktivierung des wos einmalig eingesetzt, oder?


das wos ist mit abstand das komplitzierteste aller teile die ich hier aufgelistet habe.. dafür kann man aber auch vieeeeel lustigere sachen damit basteln... Lasst eurer Fantasie freien Lauf!





*server.ini Dateien
login_server.ini
Code:
[server]
ip=localhost
port=28000
minAccessLevel=0
id=2
owner=1
name=Sarara
data_path=..\Data
log_path=Log
use_gameguard=0
gameguard_auth_query_interval=10000

[isc]
ip=127.0.0.1
port=29300

[mysql]
server=localhost
database=flyff
username=***
password=***
Aufbau:
[server]
Allgemeine einstellungen
[isc]
Erreichungseinstellungen wie port und IP
[mysql]
Einstellungen für die Database

Erklärung:
[server]

ip=localhost
hier wird dann deine Ip eingetragen du du benutzten willst, damit man auf den server connecten kann.. dies kann z.B: deine LAN IP sein (entweder per Lanparty oder wenn du eine statische IP hast), eine umgeleitete IP/domain oder z.B: andere feste IPs wie deine hamachi IP z.B.
Die IP muss dann in der neuz.ini im client eingetragen werden


port=23000
welchen port du benutzen willst.. es empfiehlt sich dies zu belassen, da ich z.B. dies dann auch beim client bearbeiten müsste... und ich weiß net wie

minAccessLevel=0
hier legt man fest, welche rechte ein account haben muss um connecten zu können. die rechte kann man in der DB einstellen

id=1
keine ahnung^^

name=LoginServer
der name? oO also ich hab den bisher ingame nie gesehen :P

use_flyff_a=1
hab ich auch keine ahnung von

Rev_2 Befehle:
data_path=..\Data
Gib an, in welcher der Ordner "data" ist.

log_path=Log
Das gleiche wie oben, nur diesmal für den Log

flyff_a_md5=
Nicht bekannt

owner=1
Ist mit ebenfalls nicht genau bekannt.

[isc]
ip=localhost
Irgendeine IP - kA für was

port=29300
das gleiche gilt hier genauso wie bei der IP

[mysql]
server=localhost
die IP wo die DB gespeichert ist, worauf der server zugreifen soll

database=flyff
name der DB auf welche der server zugreifen soll

username=***
Username für die DB

password=***
Passwort für die DB



char_server.ini
Code:
[server]
ip=localhost
port=28000
minAccessLevel=0
id=2
owner=1
name=Sarara
data_path=..\Data
log_path=Log
use_gameguard=0
gameguard_auth_query_interval=10000

[isc]
ip=127.0.0.1
port=29300

[mysql]
server=localhost
database=flyff
username=***
password=***
Erklräungen:

ip=localhost
Siehe oben

port=28000
Siehe oben

minAccessLevel=0
Siehe oben

id=2
Siehe oben

owner=1
Siehe oben

name=Sarara
Der name des Servers, in der linken spalte des Serverauswahlmenus. (z.B. Clockwork, Glaphan, Aibatt, Burudeng, etc)

data_path=..\Data
Siehe oben

log_path=Log
Siehe oben

use_gameguard=0
Weiß ich auch nicht so genau, aber ich glaube hier kannst du einstellen ob GG aktiviert sein muss, um drauf zu connecten zu können

gameguard_auth_query_interval=10000
Ist mir nicht bekannt

[isc]
ip=localhost
Siehe oben

port=29300
Siehe oben

[mysql]
server=localhost
Siehe oben

database=flyff
Siehe oben

username=***
Siehe oben

password=***
Siehe oben



world_server.ini
Code:
[server]
ip=localhost
port=15400
minAccessLevel=0
id=3
owner=2
channel_number=1
name=Reinforce
data_path=..\Data
log_path=Log
exprate=1.0
fxprate=1.0
droprate=1.0
penyadroprate=1.0
questdroprate=1.0
motd=
welcomemsg=Chibbie
weather=2
random_weather=0
random_weather_interval=300000
can_trade_quest_items=1
can_drop_quest_items=1
can_player_shop_quest_items=1
can_mail_quest_items=1
can_guild_bank_quest_items=1
use_item_cooldown=0
use_item_casting_timers=0
use_action_slot_cooldown=0
guild_rejoin_waiting_time=0
#guild_rejoin_waiting_time=172800
allowPK=0
allowKS=1
everywherePVP=1
allowGuildBank=1
precompile_nps_files=0
dice_minigame_min_bet=100
dice_minigame_max_bet=100000000
dice_minigame_win_factor=5

[isc]
ip=localhost
port=29300

[mysql]
server=localhost
database=flyff
username=***
password=***


[server]
ip=localhost
siehe oben

port=15400
siehe oben

minAccessLevel=0
siehe oben

id=3
siehe oben

owner=2
siehe oben

channel_number=1
Lege fest, welche Nummer der Channel bekommen soll

name=Reinforce
siehe oben

data_path=..\Data
Siehe oben

log_path=Log
Siehe oben

exprate=1
das spricht doch wohl für sich selbst?^^ halt die normale EXP rate die man bekommt standart ist 1

fxprate=1
das gleiche wie bei der exp rate, nur das dies für die exp fürs fliegen gilt

droprate=1
droprate von den items, welches ein monster nach seinem tod hinterlässt...

penyadroprate=1
Droprate der Penyas oO

questdroprate=1
das gleiche wie bei der droprate, nur halt für questis

motd=Möp se
message of the day - nachricht die angezeigt werden soll, wenn du dich einloggst

welcomemsg=Chibbie
Etwas ähnliches wie motd

weather=2
welches wetter auf dem server beim start sein soll
0 = nichts
1 = regen
2 = schnee

random_weather=0
stellt ein ob das wetter sich ändert
0 = nein
1 = ja

random_weather_interval=0
interval in sekunden, wann sich das wetter wieder ändern soll

can_trade_quest_items=1
zum einstellen ob man questis traden kann

can_drop_quest_items=1
zum einstellen ob man questis traden kann, die man nur bekomtm während ein bestimmter quest aktiv ist

can_player_shop_quest_items=1
ob man questis innem aufgemachten shop anbieten/verkaufen kann

can_mail_quest_items=1
ob man questitems per mail versenden kann

can_guild_bank_quest_items=1
ob man in die gildenbank quest items stopfen kann (maaan das sind zu viele questis einstellungen >.>)

use_item_cooldown=0
ob ein item sich wieder aufladen muss, wenn ma nes eingesetzt hat (z.B. food)


use_item_casting_timers=0
ob man zum einsetzen eines items warten muss (z.B. board oder blinkwing)

use_action_slot_cooldown=0
ob der Action slot "überladen" werden kann und somit nicht voll funktionstüchtig ist oder ob er frei verwendbar ist

guild_rejoin_waiting_time=0
ob man nach dem leaven einer gilde wieder warten muss

#guild_rejoin_waiting_time=172800
die dauer wielange man warten muss um in eien neue guilde zu joinen in sekunden


allowPK=0
Player Kill ein oder aus

allowKS=1
Kill stealing ein oder aus

allowGuildBank=1
Willste ne Gildenbank?

precompile_nps_files=0
Ich glaube das dient dazu da, das von den NPSFiles ne sicherheitskopie gemacht wird, mit der endung .pre hintendran. Allerdings versteh ich nicht genau den Sinn und Zweck, dieser Option.

everywherePVP=1
PvP überall oder nur Duellarena

dice_minigame_min_bet=100
Minimum Gebot, für das Dice Minispiel

dice_minigame_max_bet=100000000
Maximum Gebot, für das Dice Minispiel

dice_minigame_win_factor=5
Der Faktor um wieviel dein gewettetes Geld multiplitziert wird, welches du bei Gewinn erhältst

Information:
Die Serverconfigbefehle basieren auf Caali's Rev_2 Files. Es kann also sein, das einige Befehle für Rev_1 ungültig oder unbrauchbar sind.






Ich hoffe, ich konnte einigen von euch wengistens etwas helfen, und genauso sehr hoffe ich, das andere mir und den Bedürftigen auch helfen, indem sie die Liste erweitern! Wenn die Liste irgendwann doch zu groß werden sollte, werd ich ma überlegen ob ich den Thread vlt dann in mehrere spalte... Aber momentan sind wir ja noch weit davon entfernt (atm gleicht es mehr so einem Tutorial...)

Außerdem, bitte nicht klauen! Wenn jemand das kopieren will und wo anders verbreiten will bitte vorher fragen, oder einfach hier her verlinken! Danke.

P.S.: Auf Wunsch kann ich die Listen auch durch weitere Erweitern. Wenn ihr mir eine Vorlage oder einen Wunsch liefert, kann ich dies auch hinzufügen.



Changelog:
1.11.2008
-Ein, mir unbekannter Befehl beim wos wurde (dank Darkdevil1) erklärt
-Die wos Befehle wurden (dank Darkdevil1) erweitert
-Habe einen weiteren Komentar zum Code des Aibatts bei AIData hinzugefügt
-"Code-Funktion" in meinem Thread verwendet, damit die Befehlszeilen besser zu erkennen sind

31.10.2008
-Extreme Erweiterung aller, vom Client bekannten Befehle für die AI
-Einige Erweiterungen für die Server Configs.


Ein Danke für all jene, die mir geholfen haben die Liste zu erweitern:
Darkdevil1
-Erläuterung eines, mir unverständlichen Befehls beim wos.
-Auflistung sehr vieler wos Befehle
__________________


Last edited by Yoshi 72; 11-01-2008 at 20:48.
Yoshi 72 is offline  
Thanks
9 Users
Bluepanther (10-31-2008), DARK.. (10-26-2008), Darkslayii (10-25-2008), flavers (01-25-2009), Lucyy (10-31-2008), M0wm0w (10-25-2008), Papierlager (10-31-2008), Tom94 (10-31-2008), Yunalina (10-25-2008)
Old 10-25-2008, 20:30   #2
Harder, Better, Faster
 
M0wm0w's Avatar
 
Join Date: Jul 2008
Posts: 63
Received Thanks: 6
Sehr schöne Zusammenfassung, ich hab was draus gelernt
M0wm0w is offline  
Old 10-25-2008, 22:19   #3
xFlyFF - Adm!n
 
Join Date: Oct 2008
Posts: 213
Received Thanks: 21
Also hammer mega Ich hab mir noch nicht alles durch gelesen aber das mit den NCD reicht mir schon, da bei den PPFW Files keine Dialoge sind x)

mfg,
Darkslayi
Darkslayii is offline  
Old 10-31-2008, 00:45   #4
The Fire Fist
 
Puma D. Ace's Avatar
 
Join Date: Nov 2007
Posts: 901
Received Thanks: 254
Sehr schön gemacht.
Werde mich demnächst mal an einem ganz simplen WOS probieren.
Frage.
Ist es möglich einem NPC Teleport Fähigkeiten zu geben (z.B. der NPC für die PVP tele portiert dich ja auch wie funktioniert der ?)
Puma D. Ace is offline  
Old 10-31-2008, 01:29   #5
CM NCGames
 
.Envy's Avatar
 
Join Date: Dec 2007
Posts: 6,479
Received Thanks: 1,463
Blog Entries: 3
Quote:
Originally Posted by KevinsComputer View Post
Sehr schön gemacht.
Werde mich demnächst mal an einem ganz simplen WOS probieren.
Frage.
Ist es möglich einem NPC Teleport Fähigkeiten zu geben (z.B. der NPC für die PVP tele portiert dich ja auch wie funktioniert der ?)
jau,frage caali morgen ma nach
.Envy is offline  
Old 10-31-2008, 12:42   #6
Dreamer
 
Yoshi 72's Avatar
 
Join Date: Oct 2008
Posts: 19
Received Thanks: 31
Glabe nicht, das des per server files geproggt worden ist
das ist ja kein NPC Dialog Event, sondern eine auswählbare option, ähnlich wie trade
und die tradefunktion selbst ist im server auch nicht festgelegt worden
aber ich schau auch irgendwann mal, ob sich das iwie bearbeiten lässt (allerdings dann wohl nur per Client)

Was mich mehr interessiert ist, ob man ein Dialog Event machen kann, welches dich teleportiert und viele andere sachen auch... aber ich denke, die müsste man zeurst in die Server.exe einprogrammieren.
Yoshi 72 is offline  
Old 11-01-2008, 08:05   #7
Service

 
Flyff_Service's Avatar
 
Join Date: Oct 2008
Posts: 659
Received Thanks: 320
Quote:
DropKind(IK3_SUIT, 6, 13): Ich hab den Befehl nicht wirklich verstanden, bzw ich kann ihn nicht nachvollziehen (is auch doof, wenn man all das ja net testen kann! Caali Files FTL. Kann euch nicht wirklich viel zu den Variablen erzählen, lediglich das IK3_SUIT wohl für eine Suit stehen würde... Aber darauf wärt ihr wohl selbst gekommen, oder? ^^
DropKind bedeutet, dass alle Items eines Types gedropt werden können.
Nur weiß ich in dem Fall wieder nicht, für was 6 oder 13 steht.
Flyff_Service is offline  
Old 11-01-2008, 14:25   #8
Dreamer
 
Yoshi 72's Avatar
 
Join Date: Oct 2008
Posts: 19
Received Thanks: 31
Sorry aber, so weit bin ich auch^^
ihr könnt ja mal die Datei "probMoverEx.inc" aus data.res entpacken und euch selbst mal dort rumwühlen, vlt findet ihr da was. Ich allerdings werde daraus nicht schlau
Yoshi 72 is offline  
Old 11-01-2008, 16:38   #9
Niveau is ne fußcreme
 
Join Date: Aug 2008
Posts: 476
Received Thanks: 113
MobClientID = wos_SpawnMonstersInCircle(szMobName,dwMobCount,100 ,2,1)

Bei dieser Zeile wird ein bzw mehrere Monster gespawnt. Das MobClientID vor dem Code bedeutet, dass die ID, die durch den Befehl (Monster ID ist das) in diese Variable gepackt wird
Syntax:
wos_SpawnMonstersInCircle(Name des Monsters,Anzahl der Mobs,Aggro Chance ,entfernung,Größe float)

wos_MonsterCastSkill(MobClientID,"SI_GEN_STUNGROUP ",5)

ein Monster castet einen bestimmten Monster skill. Buffs kann man leider nicht casten, aber halt Stun und Flash. Ich glaube, bleeding würde auch gehen.
Syntax:
wos_MonsterCastSkill(Monster ID (MobClientID),Skillname,Skilllevel)

hans immerhin schonmal geschafft, aus ner box n kleines Aibatt zu spawnen, welches mich stunt

EDIT: alle World Object Codes:

Code:
wos_GetClientLevel, wos_GetClientEXP, wos_GetClientAccessLevel, wos_GetClientGender, wos_GetClientPenya, wos_HasClientItemInInventory, wos_ClientSendDefinedText, wos_TeleportClientWorld, wos_TeleportClient, wos_RemoveItemFromClientInventory, wos_SpawnMonstersInCircle, wos_SetInvisibleWithTimeout, wos_ShowWorldObjectAnimation, wos_ShowOtherWorldObjectAnimation, wos_ShowSfxOnClient, wos_ShowSfxOnWorldObject, wos_MonsterCastSkill

Last edited by Darkdevil1; 11-01-2008 at 16:53.
Darkdevil1 is offline  
Thanks
1 User
Yoshi 72 (11-01-2008)
Old 11-01-2008, 17:48   #10
Dreamer
 
Yoshi 72's Avatar
 
Join Date: Oct 2008
Posts: 19
Received Thanks: 31
kk, erstmal haste auchn THX von mir bekommen, da du hilfst, die Liste zu erweitern^^ (bekommt übrigends jeder, der die Liste hilfreich erweitern kann)

aber nun zu meinen Fragen:

Code:
	MobClientID = wos_SpawnMonstersInCircle(szMobName,dwMobCount,100,2,1)
	if (MobClientID ~= 0) then
		wos_ShowWorldObjectAnimation()
		wos_SetInvisibleWithTimeout(60000) --1min
		wos_MonsterCastSkill(MobClientID,"SI_GEN_STUNGROUP",5)
		wos_MonsterCastSkill(MobClientID,"SI_GEN_FLASH",5)
	end
MobClientID = wos_SpawnMonstersInCircle(szMobName,dwMobCount,100 ,2,1)
heißt also, das die ID des Monsters, welches gespawnt wird unter dem Namen, welcher in der Variable "szMobName" gespeichert ist. unter MobClientID nun gesaved wird.
der nächste Befehl
Code:
if (MobClientID ~= 0) then
Überprüft nun, ob die ID 0 ist, oder nicht
damit die if-schleife aktiv wird, dar die ID also NICHT 0 betragen, oder? (also ist "~=" im grunde ein "ungleich-zeichen")

Und die letzte Frage:
kennst du auch den Aufbau der wos Befehle, welche du mir nun genannt hast?
Also bei manchen kann mans sich ja denken... Aber net bei allen.
Ich Liste mal meine Theorien dazu auf... Berichtige mich, falls ich falsch bin und du weißt wies geht:
Code:
wos_GetClientLevel(X)
X = das Level, auf welches der Spieler gesetzt werden soll
Oder die Anzahl der lvl ups?

Code:
wos_GetClientEXP(X)
X = die EXP, welche der Spieler bekommt

Code:
wos_GetClientAccessLevel(X)
X = das Acces Level, auf welches der Spieler gesetzt wird (1000 = GM, 100 = normaler Spieler)

Code:
wos_GetClientGender(X)
X = Das geschlecht auf welches er gesetzt wird.
1 = weiblich
2 = männlich? (oder war male 0? weiß nemmer)

Code:
wos_GetClientPenya(X)
X= Anzahl der Penya die der Spieler bekommt, oder auf welches seine Penyas gesetzt werden?
Code:
wos_HasClientItemInInventory("II_SYS_SYS_KEY_DKDUIDCARD",1)
Überprüft ob der Spieler das Item DKDUIDCARD besitzt. wird soweit ich weiß nur in if-schleifen verwendet oder?
z.B.
Code:
--if wos_HasClientItemInInventory("II_SYS_SYS_KEY_DKDUIDCARD",1) ~= 0 then
überprüft die anzahl des Items. Die if-schleife wird erst aktiv, wenn die Anzahl NICHT 0 beträgt (also größer als 0... oder weniger als null.. aber man kann net weniger items haben als 0 :P )

Code:
wos_ClientSendDefinedText("ZZZ")
ZZZ steht für den Text, welcher der Client in form von einer noramlen Chatnachricht von sich gibt, kann das sein? Müssen dann auch " gesetzt werden?

Code:
wos_TeleportClientWorld(X,Y,Z)
Teleportiert den Spieler an folgende Koordinaten.

Code:
wos_TeleportClientWorld("WI_DUNGEON_DA_DK",745,85,780)
Teleportiert den Spieler in die World, mitsamt den Coordinaten

Code:
wos_RemoveItemFromClientInventory("II_SYS_SYS_KEY_DKDUIDCARD",1)
Terminiert ein bestimmtes Item, welches sich im invent des Spielers befindet. In diesem Falle 1 mal das Item DKDUIDCARD

Code:
wos_SpawnMonstersInCircle(M,N,A,E,G)
M = Name des Monsters
N = Anzahl der zu spawnenden Monster
A = Aggro Chance in %
E = Entfernung, bzw Radius des Kreises in welchem er gespawnt wird
G = Größe des Monsters
Spawnt also ein Monster in einem Bestimmten Kreis mit den Oben stehenden Variablen

Code:
wos_SetInvisibleWithTimeout(X)
Macht das WorldObject für eine bestimmte anzahl von millisekunden "unsichtbar" und demnach im grunde nicht existenz für den Spieler

Code:
wos_ShowWorldObjectAnimation()
Spielt die Animation des WO ab.. was allerdings kommt in die Klammer rein? bzw könnte

Code:
wos_ShowOtherWorldObjectAnimation(X)
Spielt die Animation des WOs ab, welches die ID in der Klammer besitzt (wird in der DB festgelegt)

Code:
wos_ShowSfxOnClient()
Spielt einen bestimmten Effekt an der position deines Charas ab. Allerdings kenn ich die Variablen nicht

Code:
wos_ShowSfxOnWorldObject()
Das gleiche wie Oben, allerdings gültig für das WO

Code:
wos_MonsterCastSkill(M,S,L)
Lässt ein bestimmtes Monster einen Skill casten
M = Monster ID
S = Name des Skills
L = Skilllevel
Allerdings, wird der Skill dann nur während der aktivierung des wos einmalig eingesetzt, oder?
Yoshi 72 is offline  
Reply

Thread Tools




All times are GMT +2. The time now is 13:52.


Powered by vBulletin®
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.