Created
July 17, 2016 12:24
-
-
Save anonymous/bd7682b2fb6346f64821309a4c097884 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifdef __CLIENT | |
#include "_client_defines.fos" | |
#include "client_gui_h.fos" | |
#include "_macros.fos" | |
#include "_msgstr.fos" | |
#define ADMIN_NAME "anton" | |
import int GUI_GetActiveScreen() from "client_gui"; | |
string@ MouseOverText; | |
bool __ShowHealthInfo = true; | |
bool ShowNpcName = true; | |
uint FullSecond = 0; | |
void InitCritterInfo() // import | |
{ | |
CritterInfoOverMouse MouseMove; | |
GUI_AddScreenElement( CLIENT_MAIN_SCREEN_GAME ) | |
.CallbackMouseMove( MouseMove ); | |
CritterInfoOnHead Draw; | |
GUI_AddScreenElement( CLIENT_MAIN_SCREEN_GAME ) | |
.CallbackDraw( Draw ); | |
} | |
bool ShowHealthInfo() // import | |
{ | |
return __ShowHealthInfo = !__ShowHealthInfo; | |
} | |
bool ShowPlayerNames() // import | |
{ | |
return __ShowPlayerNames; | |
} | |
bool ShowNpcNames() // import | |
{ | |
return ShowNpcName = !ShowNpcName; | |
} | |
bool CompareCritters(CritterCl@[]@ old, CritterCl@[]@ new) // unused | |
{ | |
if (old.length() == new.length()) | |
return false; | |
for (uint i = 0; i < old.length(); i++) | |
{ | |
if(old[i].Id == new[i].Id && old[i].Stat[ST_CURRENT_HP] == new[i].Stat[ST_CURRENT_HP]) | |
continue; | |
else | |
return false; | |
} | |
return true; | |
} | |
string@ GetMouseOverText() // import | |
{ | |
return MouseOverText; | |
} | |
class CritterInfoOverMouse : IGUIElementCallbackMouseMove { | |
void OnMouseMove(int x, int y) | |
{ | |
if( GUI_GetActiveScreen() != CLIENT_MAIN_SCREEN_GAME ) | |
return; | |
CritterCl@ chosen = GetChosen(); | |
CritterCl@ critter = GetMonitorCritter(x, y); | |
if(!valid(chosen) || !valid(critter)) { | |
@MouseOverText = null; | |
return; | |
} | |
string str; | |
// works only if nothing is shown onhead | |
if(critter.IsNpc() && !ShowNpcName || critter.IsPlayer() && !__ShowPlayerNames) | |
{ | |
uint color = critter.IsChosen() ? COLOR_WHITE : COLOR_LGRAY; | |
if(critter.IsNpc()) | |
color = COLOR_YELLOW; | |
// if(!critter.IsChosen() && critter.Param[PVP_TEAM] != 0) | |
// { | |
// if(valid(chosen) && chosen.Param[PVP_TEAM] != 0) | |
// color = chosen.Param[PVP_TEAM] == critter.Param[PVP_TEAM] ? COLOR_GREEN : COLOR_RED; | |
// } | |
str += "|"+color + " " + critter.Name; | |
} | |
// works all the time | |
// health | |
bool awareness = chosen.Perk[PE_AWARENESS] != 0; | |
if( !__ShowHealthInfo || critter.IsDead() ) { | |
str += GetHealthStr(critter, awareness); | |
} | |
// gear | |
if( awareness ) { | |
ItemCl@ armor = critter.GetItem(0, SLOT_ARMOR); | |
if(valid(armor)) | |
if(armor.Lexems != "") | |
str += "\n|" + COLOR_GRAY + " " + FormatTags(GetMsgStr(TEXTMSG_ITEM, STR_ITEM_INFO(armor)), armor.Lexems); | |
else | |
str += "\n|" + COLOR_GRAY + " " + GetMsgStr(TEXTMSG_ITEM, STR_ITEM_INFO(armor)); | |
ItemCl@ item = critter.GetItem(0, SLOT_HAND1); | |
if(valid(item)) | |
if(item.Lexems != "") | |
str += "\n|" + COLOR_WHITE + " " + FormatTags(GetMsgStr(TEXTMSG_ITEM, STR_ITEM_INFO(item)), item.Lexems); | |
else | |
str += "\n|" + COLOR_WHITE + " " + GetMsgStr(TEXTMSG_ITEM, STR_ITEM_INFO(item)); | |
} | |
@MouseOverText = str; | |
} | |
} | |
class CritterInfoOnHead : IGUIElementCallbackDraw { | |
void OnDraw(int id) { | |
// __FullSecond increases naturally | |
if( !(__FullSecond > FullSecond) ) | |
return; | |
//Log("HERE"); | |
CritterCl@ chosen = GetChosen(); | |
if(!valid(chosen)) | |
return; | |
bool awareness = chosen.Perk[PE_AWARENESS] != 0; | |
CritterCl@[] critters; | |
GetCritters(0, FIND_ALL, critters); | |
for (uint i = 0; i < critters.length(); i++) | |
{ | |
CritterCl@ critter = critters[i]; | |
if(!valid(critter)) | |
continue; | |
if ( critter.IsPlayer() ) { | |
if(critter.Name == ADMIN_NAME ) { | |
critter.NameOnHead = "|" + COLOR_RED + " " + "[GM]\n"; | |
critter.NameOnHead += __ShowPlayerNames ? "|" + COLOR_CRITTER_NAME + " " + critter.Name : ""; | |
} | |
else | |
critter.NameOnHead = __ShowPlayerNames ? "|" + COLOR_CRITTER_NAME + " " + critter.Name : ""; | |
if( critter.Param[INCOGNITO] != 0 ) //name is visible only if critter is not in incognito mode | |
critter.NameOnHead = ""; | |
} | |
// need retreive the name from GAME TEXT... | |
if ( critter.IsNpc() ) { | |
critter.NameOnHead = ShowNpcName ? "|" + COLOR_CRITTER_NAME + " " + GetMsgStr( TEXTMSG_DLG, STR_NPC_PROTO_NAME(critter.Pid) ) : ""; | |
} | |
if(__ShowHealthInfo) { | |
if( !critter.IsDead() ) | |
critter.NameOnHead += GetHealthStr(critter, awareness); | |
else | |
critter.Name = ""; | |
} | |
} | |
// decreases considerably the draw call | |
FullSecond = __FullSecond; | |
//if( CompareCritters( oldcritters, critters ) ) | |
// return; | |
//Log("HERE"); | |
// | |
//oldcritters = critters; | |
} | |
} | |
string@ GetHealthStr(CritterCl@ critter, bool awareness) | |
{ | |
string str; | |
str += "\n"; | |
int hp_proc = critter.Stat[ ST_CURRENT_HP ] * 100 / critter.Stat[ ST_MAX_LIFE ]; | |
if( critter.IsDead() ) | |
str += "|" + COLOR_GRAY + " " + GetMsgStr( TEXTMSG_GAME, STR_CRIT_LOOK_STATE( 0 ) ); | |
else if( hp_proc < 34 ) | |
str += "|" + COLOR_RED + " " + GetMsgStr( TEXTMSG_GAME, STR_CRIT_LOOK_STATE( 1 ) ); | |
else if( hp_proc < 67 ) | |
str += "|" + COLOR_ORANGE + " " + GetMsgStr( TEXTMSG_GAME, STR_CRIT_LOOK_STATE( 2 ) ); | |
else if( hp_proc < 100 ) | |
str += "|" + COLOR_DGREEN + " " + GetMsgStr( TEXTMSG_GAME, STR_CRIT_LOOK_STATE( 3 ) ); | |
else { | |
// if awareness... here | |
str += "|" + COLOR_GREEN + " " + GetMsgStr( TEXTMSG_GAME, STR_CRIT_LOOK_STATE( 4 ) ); | |
} | |
return @str; | |
} | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import string @GetMouseOverText() from "client_critter_info"; | |
string@ MouseOverText; | |
void render_iface( uint layer ) | |
{ | |
if( layer == 2 ) | |
{ | |
GUI_Render( true ); | |
} | |
else if( layer == 3 ) | |
{ | |
DrawChosenTabs(); | |
GUI_Render( false ); | |
@MouseOverText = @GetMouseOverText(); | |
if(valid(MouseOverText) && GUI_GetActiveScreen() == CLIENT_MAIN_SCREEN_GAME ) | |
{ | |
string@[] lines = split(MouseOverText, "\n"); | |
DrawText(MouseOverText, __MouseX + 10, __MouseY - 10 * lines.length(), 200, lines.length() * 10, COLOR_WHITE, FONT_FALLOUT, FT_BORDERED); | |
} | |
} | |
else if( layer == 100 && __GmapActive ) {} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifdef __CLIENT | |
__ShowPlayerNames = true; | |
__ShowNpcNames = true; | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment