Npc Sectionen
Übersicht

![]() |
FobsiBetreff: Npc Sectionen |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi @ll
Wieder mal hab ich ein Problem und hoffe ihr könnt mir helfen. Zuerstmal ganz klar, mein Code ist schnellschnell/auf meine Art gemacht und ihr werdet ihn auch wahrscheindlich nicht verstehen ich probeire es euch aber trozdem zu zeigen/erklären: Jeder Npc besteht aus: Code: [AUSKLAPPEN] npc(1,43,17,979,689,"Orc von Zerias" ,20,20,2,2,0,5,0)
-> npc(npcid,npcx,npcy,rnpcx,rnpcy,npc_name$,npc_lifen,npc_maxlifen,npc_lvl,npc_dmgn,min_drop,max_drop,attacke_id) 1-5: Die ersten 5 zahlen sind zur positions Anzeige der Npc auf der Map mit dem Jeweiligen Bild npcid = bild ID. 5: Namen des NPCs 6-7: Npc Life + Max life .. solte Verständlich sein. 8-10: (minimum Geld drop - Maximum Geld drop)->ist nochnicht wirklich implementiert. attacke_id = wind,wasser,feuer etc... auch noch net drin. Die Funktion ist im Moment so aufgebaut und funktiuniert auch hervorragend, jedoch nur bei 1nem NPC: (Ich weiss Formatierung ist fürn Arsch! Aber wenn ich programmiere schaue ich nur selten drauf) Code: [AUSKLAPPEN] Function npc(npcid,npcx,npcy,rnpcx,rnpcy,npc_name$,npc_lifen,npc_maxlifen,npc_lvl,npc_dmgn,min_drop,max_drop,attacke_id)
If attm = 0 Then npc_id = npcid EndIf If attm = 0 And npc_id <> 0 Then DrawImage monster,rnpcx-movenpcx,rnpcy-movenpcy,npcid EndIf If playerx = npcx And playery=npcy Then If attm = 0 Then Color 255,255,255 Rect 230, 275, StringWidth(npc_name$+" lvl:"+npc_lvl+" HP:"+npc_lifen) + 2, StringHeight(npc_name$+" lvl:"+npc_lvl+" HP:"+npc_lifen)+2, 1 Color 0,0,0 Text 230, 275, npc_name$+" lvl:"+npc_lvl+" HP:"+npc_lifen Color 255,255,255 EndIf EndIf If PB_ButtonHit(Btn_atta) And playerx = npcx And playery=npcy Then attm = 1 c_an = 1 ctxt0$ = "beginne kampf mit:"+npc_name$+" " PB_DisableAll() ; ---- im kampf ----- If attm = 1 And npc_id = npcid Then kampfm =1 DrawImage monster,299,288,npcid DrawImage player,267,288,playerid DrawImage attacken,109,224,0 DrawImage attacken,345,224,attacke_id PB_EnableButton(Btn_att1) If PB_ButtonHit(Btn_att1) Then hp = hp - npc_dmgn test_npc_hp = test_npc_hp - sterke balkenbreite = (178*hp)/max_hp balkenbreitenpc =(178*test_npc_hp)/npc_maxlifen If cheker = 0 Then test_npc_hp = test_npc_hp + npc_lifen cheker = 1 EndIf Color 0,128,0 If hp > max_hp/4*3 Then Color 0,128,0 EndIf If hp < max_hp/4*3 Then Color 255,128,0 EndIf If hp < max_hp/4*2 Then Color 200,0,0 EndIf Rect 108, 353, balkenbreite, 25, 1 If test_npc_hp > npc_maxlifen/4*3 Then Color 0,128,0 EndIf If test_npc_hp < npc_maxlifen/4*3 Then Color 255,128,0 EndIf If test_npc_hp < npc_maxlifen/4*2 Then Color 200,0,0 EndIf Rect 311, 353, balkenbreitenpc,25,1 Color 0,0,0 Text 173,358,"HP: "+hp Text 381,358,"HP: "+test_npc_hp If test_npc_hp =< 0 And tcheker = 0 Then attm = 0 kampfm =0 cheker = 0 gold = gold + 5 tcheker = 1 EndIf If hp =< 0 And tcheker1 = 0 Then attm = 0 kampfm =0 cheker = 0 hp = 1 gold = gold/2 tcheker1 = 1 EndIf EndIf ;EndIf End Function Gut der Code ist denke ich mal net sooooo Schwer ^^ und genau da liegt der Fehler: Warum funzt das ganze nur bei einem NPC bzw der Kampf-Modus? Kann mir das net Erklären. Wie unterteile ich den Code so das er für beide funzt bzw für 100derte? Hier noch das Ganze Game kopiliert zum veranschaulichen: ->Link<- lg Fobsi EDIT: Hier noch Bild vom Problem: ![]() |
||
n-Halbleiter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde dir raten, dass du deine NPCs in einem Type![]() |
||
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit Ploing! Blog "Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935) |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
auch ich stimme n-Halbleiter zu. Die NPCs solltest du mit types lösen. Viel übersichtlicher und auch schöner anzusprechen!!!
(unter der Tutorial sammlung findest du viele Tuts dazu) https://www.blitzforum.de/foru...hp?t=25321 https://www.blitzforum.de/foru...hp?t=25694 noch kurz eine Frage an alle: Normalerweise sind arrys schneller als types. Verhält sich das liniar ?? Also ein arry mit 100 dimensionen kann schneller druchgegangen werden als ein type mit 100 feldern ? P.S. Noch ein kleiner Tipp, "Schnel Schnell code" geht zwar am anfang locker von der Hand, später steht dann aber der Crash bevor. Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Antworten
Gut werd es mal mit types probieren. Jedoch wollte ich eigentlich keine Types weil ich da eher weniger durchblicke hab mir schon mehrere gute Tuts dazu angesehen jedoch verstehe ich nicht ganz wie ich das nun in einen Code umsetze, naja üben macht den Meister. so Hab nun mal angefangen: könnte das gehen so: Code: [AUSKLAPPEN] Type NPCT
Field T_ID Field T_NX Field T_NY Field T_RNX Field T_RNY Field T_NNAME$ Field T_TDROP Field T_ATTS End Type Function NNPC(NNAME$,X,Y,RX,RY ,MIDD,MADD,ATTS) For t = 1 To 1 NPC.NPCT = New NPCT NPC\T_ID = T_ID +t NPC\T_NX = X NPC\T_NY = Y NPC\T_RNX = RX NPC\T_RNY = RY NPC\T_NNAME$ = NNAME$ NPC\T_TDROP = Rand(MIDD,MADD) NPC\T_ATTS = Rand(ATTS-3,ATTS+3) Print NPC\T_ID ;ID Print NPC\T_NX Print NPC\T_NY Print NPC\T_RNX Print NPC\T_RNY Print NPC\T_NNAME$ Print NPC\T_TDROP Print NPC\T_ATTS Print "-----------" ;Kleine Linie fürs testen Next End Function NNPC("TestMob",2,2,200,200,5,10,4) |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi !
Types sind für ein Computerspiel ab einer bestimmten (schon kleinen) Größe ein Muß und es ist nicht im Geringsten schwierig. Du mußt dich einfach nur trauen. Dein NPC Type könnte zum Beispiel so aussehen : ; Type definieren. Das wird nur ein Mal am Anfang des Codes gemacht. Type NPCWERTE Field npcid% Field npcx Field npcy Field rnpcx Field rnpcy Field npc_name$ Field npc_lifen% Field npc_maxlifen% Field npc_lvl% Field npc_dmgn Field min_drop% Field max_drop% Field attacke_id% End Type ; Dann mußt du deine NPCs erschaffen. Am Besten liest du deren Werte aus einer externen Text-Datei heraus, die du am Anfang per Hand in Windows NotePad erstellst. ; Hier wird nur 1 Test NPC als Beispiel erschaffen : NPC.NPCWERTE = New NPCWERTE NPC\npcid = LastID NPC\npcx = 1 NPC\npcy = 1 NPC\rnpcx = 1 NPC\rnpcy = 1 NPC\npc_name$ = "Name" NPC\npc_lifen = 1 NPC\npc_maxlifen = 1 NPC\npc_lvl = 1 NPC\npc_dmgn = 1 NPC\min_drop = 1 NPC\max_drop = 1 NPC\attacke_id = 1 ; Wenn du dann einen bestimmten NPC behandeln möchtest, gehst du mit einem Loop alle NPCs durch und suchst den Richtigen mit Hilfe des IDs aus. For NPC = Each NPC.NPCWERTE If NPC\npcid = ID_Gesucht Then Exit Next ; Danach hast du Zugriff |
||
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mhh wie erstelle ich dan mehrere? muss ich das in einer For to Next schleifen tun oder wie tue ich das weil:
Code: [AUSKLAPPEN] NPC.NPCWERTE = New NPCWERTE
NPC\npcid = LastID NPC\npcx = 1 NPC\npcy = 1 NPC\rnpcx = 1 NPC\rnpcy = 1 NPC\npc_name$ = "test1" NPC\npc_lifen = 1 NPC\npc_maxlifen = 1 NPC\npc_lvl = 1 NPC\npc_dmgn = 1 NPC\min_drop = 1 NPC\max_drop = 1 NPC\attacke_id = 1 NPC.NPCWERTE = New NPCWERTE NPC\npcid = LastID NPC\npcx = 1 NPC\npcy = 1 NPC\rnpcx = 1 NPC\rnpcy = 1 NPC\npc_name$ = "test2" NPC\npc_lifen = 1 NPC\npc_maxlifen = 1 NPC\npc_lvl = 1 NPC\npc_dmgn = 1 NPC\min_drop = 1 NPC\max_drop = 1 NPC\attacke_id = 1 Macht ja net automatisch 2 NPCs? ![]() |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich kann nur empfehlen eure Types, Felder und zugehörigen Funktionen einheitlich und eindeutig zu benennen - und die sinnlose Doppelbennenung wie "NPC.NPC\NPC_X" zu lassen.
Code: [AUSKLAPPEN] Type TNPC
Field id% Field x Field y Field rx Field ry Field name$ Field lifen% Field lifen_max% Field lvl% Field dmgn Field drop_min% Field drop_max% Field attacke_id% End Type Function Create_NPC(anzahl%=1) Local i, npc.TNPC For i=0 To anzahl npc = New TNPC npc\name = "npc Nr."+i Next End Function Edit: New vergessen ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
- Zuletzt bearbeitet von Xeres am Do, Jun 04, 2009 18:31, insgesamt 2-mal bearbeitet
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi Xeres
naja was soll ich damit? Damit kann ich gerademal NPCs machen die alle den Selben Namen haben? Später/am anfang muss ich dann sowiso jeden Npc abrufen und ihm den Entsprechenden Namen/X/Y etc geben. Code: [AUSKLAPPEN] Type TNPC
Field id% Field x Field y Field rx Field ry Field name$ Field lifen% Field lifen_max% Field lvl% Field dmgn Field drop_min% Field drop_max% Field attacke_id% End Type Function Create_NPC(anzahl%=1) Local i npc.TNPC = New TNPC For i=0 To anzahl npc\name = "npc Nr."+i Print npc\name Next End Function Create_NPC(2) Edit: In nem RPG sollte eh nicht jeder Npc gleich sein fals du da was missverstehst. Naja oder ich etwas nicht Chek ^^ |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was du damit sollst? Es verstehen und nach dem prinzip vorgehen. | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ging mir nur um die sinnvolle Benennung, denn Ordnung ist das halbe leben ![]() Aber um etwas hilfreicher zu sein: Mit Types lassen sich viele Dinge sehr praktisch Regeln, Beispiel: Code: [AUSKLAPPEN] Type TNPC
Field name$ Field leben, mana Field Klasse.TKlasse ; Eigenschafter der Klasse... Field Target.TNPC ; Dieses Ziel hat der NPC im visier End Type Type TKlasse Field name$ Field Leben_multi# Field Mana_multi# End Type Function Create_Klasse.TKlasse(name$, LM#, MM#) Local K.TKlasse = New TKlasse K\name = name$ K\Leben_multi = LM# K\Mana_multi = MM# Return K End Function Function Create_NPC.TNPC(name$, klasse.TKlasse) Local npc.TNPC = New TNPC npc\name = name$ npc\Klasse = klasse npc\leben = 100 * npc\Klasse\Leben_multi npc\mana = 100 * npc\Klasse\Mana_multi Return npc End Function Function NPC_Info(npc.TNPC) Print("Name: "+npc\name+" ,"+npc\Klasse\name) Print("Leben: "+npc\leben+" Mana: "+npc\mana) If npc\Target <> Null Then Print(npc\name+" ziehlt auf "+npc\Target\name) Else Print(npc\name+" hat nichts im Visier") EndIf Print(String("- ",5)) End Function ;*** Klassen erstellen: Local Klasse_Zauberer.TKlasse = Create_Klasse("Zauberer", 0.5, 1.5) Local Klasse_Krieger.TKlasse = Create_Klasse("Krieger", 2.0, 0.3) ;*** Charaktere mit einer Klasse Erstellen Local Orc.TNPC = Create_NPC("Raizul", Klasse_Krieger) Local mage.TNPC = Create_NPC("Ovor der Große", Klasse_Zauberer) ;*** Am besten packt man sowas in eine Ziel-Suche Funktion oder so: mage\Target = Orc NPC_Info(Orc) NPC_Info(mage) WaitKey() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Fobsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für den sehr guten Code, hat dich sicher paar Minuten gekostet ! ![]() Naja ich stosse halt an meine Grenzen bei der ganzen Kombination mit den Types, ka warum egentlich ganz einfach nur könnte ich sowas nicht selbst in einen Code fassen oder jedenfals bräuchte ich lange oder würde es garnicht schaffen ![]() lg Fobsi, Danke allen die mir Helfen wollen ![]() ![]() ![]() ![]() |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres :
Zitat: Ich kann nur empfehlen eure Types, Felder und zugehörigen Funktionen einheitlich und eindeutig zu benennen - und die sinnlose Doppelbennenung wie "NPC.NPC\NPC_X" zu lassen.
Ja, selbstverstänlich werden bei einer Konvertierung von einfachen Variablen in Types Teile der Benennung überflüssig. Ich habe das nur nicht gemacht um den ursprünglichen Poster nicht zu verwirren und damit er seine Variablen gleich wiederfindet. Ich dachte, das würde ihm schon selber auffallen, daß man die Variablennamen nach der Konvertierung optimieren kann. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group