.| Autor | Beitrag |
|---|---|
|
000 04.11.2000, 00:57 Ranger6 |
Hab da ein Problem... Ich hab in der cl_dll.dsw den Struct "extra_player_info_t" um den float shoots erweitert. (speichert, wie oft ein Spieler geschossen hat). Jedesmal wenn die PrimaryAttack einer Waffe aufgerufen wird, soll der Wert um 1 erhöht werden, nur wie kann ich das realisieren. Die Waffen sind in der mp.dll und der Struct & ScorePanel(wo das ganze dann angezeigt werden soll) in der cl_dll. Wie kann ich von mp.dll auf extra_player_info_t der cl_dll zugreifen???? Ach ja, wenn wir schon mal dabei sind, kann mir jemand sagen, wie ich ein Geld system aufbaue? ---=[Ranger6]=- ist da |
|
Profil || Suche |
|
001 04.11.2000, 12:33 |
zum ersten fällt mir momentan nix ein aber ich wrd mal drüber nachdenken, zum geldsystem, es ist einfacher als man denkt, du musst nur eine neue variable erstellen, zb "int m_iMoneyamount" in player.h , du gibt dem spieler dann das geld per pPlayer->m_iMoneyamount += 800 und ziehst es ihm beim kauf einer waffe mit pPlayer->m_iMoneyamount -= 800 wieder ab, um das ganze im hud anzuzeigen kopierst du am besten die health.cpp der cli-ent.dll und änderst alles um sowie du es braucht und schaffst das dann auch per MSG funktion zum client. -- |
|
Profil || Suche |
|
002 04.11.2000, 12:49 Ranger6 |
Das wär echt super! Ich habs gestern nochmal Probiert, bin aber kein Stück weiter gekommen. Hats vielleicht was mit der entvars_s (oder entvars_t) zu tun, da in der mp.dll so die frags erhöht werden. Aber jedesmal wenn ich die entvars_t(or _s) um den float "shoots" erweitere, dann Stürzt mir HalfLife beim createn eines SPiels ab. Das mit dem Money-System, werde ich mal ausprobieren. Danke im vorraus für den Tipp. ---=[Ranger6]=- ist da |
|
Profil || Suche |
|
003 04.11.2000, 21:17 TheTinySteini |
Ok, here we go: Geh nun in die vgui_teamfortressviewport.cpp (client). Erweitere die Funktion so: if ( cl > 0 && cl <= MAX_PLAYERS ) Nun musst du noch alle ScoreInfo-Server-Messages so umschreiben (nur ein Beispiel aus der CBasePlayer::AddPoints(), bitte unbedingt an die jeweilige Situation anpassen!): Kleine Anmerkung: Wenn bei dir die letzten beiden WRITE_SHORTs nicht stehen, dann brauchst du sie auch nicht einzufügen. Nun fügst du zur Player-Class noch die Variabel m_iShoots hinzu, die du bei jedem Schuss um einen erhöhst (einfach in der player.h dort deklarieren, wo auch m_iDeaths steht. In der CBasePlayer::Spawn unbedingt die Variable auf 0 setzen, sonst könnte es sein, dass dort einfach irgendwelche Daten drinstehen...). Ich hoffe ich hab alles berücksichtigt. Noch fragen? Posten! --TheTinySteini |
|
Profil || Suche |
|
004 05.11.2000, 01:17 Ranger6 |
Hi nochmal, danke TinySteini!!!!! Hatte zwar erst Probleme, aber nach ein bischen Tüffteln, ging alles wie geschmiert. Ein Problem habe ich dennoch, wie kann ich nach allen 10 Schuss die Score uppen? Bis jetzt gehts nur, wenn der Player gestorben ist. Wenn DU mir da kurz noch ein wenig Hilfe geben könntest. Wär echt super. Mercy nochmal!!!!! ---=[Ranger6]=- ist da |
|
Profil || Suche |
|
005 05.11.2000, 12:58 TheTinySteini |
Dazu bietet sich die CBasePlayer::PreThink() an, die vor jedem Frame geladen wird. Überprüf einfach hier, ob sich m_iShoots durch 10 restlos durch 10 teilen lässt. So: if( (m_iShoots != 0) && (m_iShoots % 10 == 0) ) % bedeutet: Der Rest einer Division soll angegeben werden. Also etwa 17 % 10 ist 7. TheTinySteini |
|
Profil || Suche |
|
006 05.11.2000, 12:59 TheTinySteini |
Ups, das muss natürlich nicht heißen: TheTinySteini |
|
Profil || Suche |
|
007 05.11.2000, 15:55 user3427 |
Ich glaube die obiege Lösung hat den Nachteil ,dass jedes Frame die Variable an den Client gesendet wird, wenn sie durch 10 teilbar ist(also auch dann, wenn sie sich nicht verändert hat). PS: Wenn das nicht nötig ist, wäre ich froh, wenn mit jemand erklären könnte, warum das nicht nochmal gesendet wird. -- |
|
Profil || Suche |
|
008 05.11.2000, 20:47 TheTinySteini |
Stimmt, da hast du recht. Daran hab ich gar nicht gedacht. Mir ist übrigens aufgefallen, dass man das ganze auch in die Infos reinpacken könnte, die für jedes Entity sowieso zum Client geschickt werden (das mit dieser delta.lst-Datei und so). Aber das wird kompliziert... --TheTinySteini |
|
Profil || Suche |
|
009 05.11.2000, 21:13 Ranger6 |
Hi Nochmal, danke nochmal für eure Hilfe. Selber habe ich nun die CBasePlayer um die Funktion ScorePanelUpdate(void) erweitert, wo bei jedem Aufruf das: MESSAGE_BEGIN( MSG_ALL, gmsgScoreInfo ); ausgeführt wird. Aber an den Modulo-Operator habe ich jetzt erlich nicht gedacht. Bis jetzt habe ich zwar keine Probleme mit der Netztraffic, aber vorsichthalber plane ich es mal mit ein. Danke nochmals... ---=[Ranger6]=- ist da |
|
Profil || Suche |

