Mod Вывод таймаутов

Автор темы #1
Дата рег
16 Фев 2014
Сообщения
22
Симпатии
4
Записать названия скрипта в scripts.cfg
Открываем скрипт _client_defines.fos
в начале, после
#ifndef __CLIENT_DEFINES__
#define __CLIENT_DEFINES__

вставляем
#pragma globalvar "bool __ShowTimeouts = true"
Открываем скрипт client_main.fos
Вверху после всех директив (#define, #include) вставляем
import void show_timeouts() from "название вашего скрипта";
Ищем функцию void render_iface(uint layer)
в конце блока
if(layer == 3) (после GUI_Render(); )
вставляем

if(__ShowTimeouts){
show_timeouts();
}



script
Код:
#include "_client_defines.fos"
#include "_colors.fos"
#include "_defines.fos"
#define DAY_SEC 86400
#define HOUR_SEC 3600
#define MINUTE_SEC 60
class Timeout
{
int coordX;
int coordY;
uint Indention;
uint Font;
uint FontFlags;
uint NameColor;
uint ValueColor;
 
Timeout()
{
this.coordX=10;
this.coordY=40;
this.Indention=10;
this.NameColor=COLOR_LGREEN;
this.ValueColor=COLOR_LGREEN;
this.Font= FONT_FALLOUT;
this.FontFlags= FT_BORDERED;
}
}
 
Timeout Timeouts;
 
string spelling(uint value, string opt1, string opt2, string opt3)
{
string result;
if(value==1||(value%10==1 && value!=11))
result = opt1;
else if((value>1 && value<5) || (value>20 && value%10>1 && value%10<5))
result = opt2;
else if((value>4 && value<21) || value%10>4 || value%10==0)
result = opt3;
return result;
}
 
int draw_timeouts(CritterCl&critter,uint skill,string skillname,int x,int y)
{
int timeout = critter.Timeout[skill];
timeout /= __TimeMultiplier;
 
if(timeout>0)
{
string text="";
 
uint day, hour, minute, second;
string d="", h="", m="", s="";
day = timeout/DAY_SEC;
hour = timeout%DAY_SEC/HOUR_SEC;
minute = timeout%DAY_SEC%HOUR_SEC/MINUTE_SEC;
second = timeout%DAY_SEC%HOUR_SEC%MINUTE_SEC;
if(second>0)
s=second+spelling(second, " секунда", " секунды", " секунд");
if(minute>0)
m=minute+spelling(minute, " минута", " минуты", " минут")+(second>0?", ":"");
if(hour>0)
h=hour+spelling(hour, " час", " часа", " часов")+((minute>0||second>0)?", ":"");
if(day>0)
d=day+spelling(day, " день", " дня", " дней")+((hour>0||minute>0||second>0)?", ":"");
//msg, __MouseX,__MouseY+20, 0, 0, 0,FONT_FALLOUT,FT_BORDERED
 
text = d + h + m + s;
if( skill == TO_BATTLE || skill == TO_SNEAK )
DrawText( skillname+":  "+text,x,y,__ScreenWidth,10,COLOR_LRED,Timeouts.Font,Timeouts.FontFlags);
else if( skill == TO_SK_DOCTOR || skill == TO_SK_FIRST_AID || skill == TO_SK_SCIENCE || skill == TO_SK_REPAIR )
DrawText( skillname+":  "+text,x,y,__ScreenWidth,10,COLOR_LGREEN,Timeouts.Font,Timeouts.FontFlags);
else if( skill == TO_REPLICATION )
DrawText( skillname+":  "+text,x,y,__ScreenWidth,10,COLOR_LBLUE,Timeouts.Font,Timeouts.FontFlags);
else
DrawText( skillname+":  "+text,x,y,__ScreenWidth,10,Timeouts.ValueColor,Timeouts.Font,Timeouts.FontFlags);
y+=Timeouts.Indention;
}
return(y);
}
 
void show_timeouts()
{
if( GetCurrentMapPid() == 0 )
return;
CritterCl@ critter = GetChosen();
int x = Timeouts.coordX;
int y = Timeouts.coordY;
for( uint i = 0; i < 9; ++i )
{
if(i==0&&critter.Timeout[TO_REPLICATION]>0)
y=draw_timeouts(critter,TO_REPLICATION,"Репликация",x,y);
if(i==1&&critter.Timeout[TO_SK_STEAL]>0)
y=draw_timeouts(critter,TO_SK_STEAL,"Воровство",x,y);
if(i==2&&critter.Timeout[TO_SK_LOCKPICK]>0)
y=draw_timeouts(critter,TO_SK_LOCKPICK,"Взлом",x,y);
if(i==3&&critter.Timeout[TO_SK_SCIENCE]>0)
y=draw_timeouts(critter,TO_SK_SCIENCE,"Наука",x,y);
if(i==4&&critter.Timeout[TO_SK_REPAIR]>0)
y=draw_timeouts(critter,TO_SK_REPAIR,"Ремонт",x,y);
if(i==5&&critter.Timeout[TO_SK_DOCTOR]>0)
y=draw_timeouts(critter,TO_SK_DOCTOR,"Доктор",x,y);
if(i==6&&critter.Timeout[TO_SK_FIRST_AID]>0)
y=draw_timeouts(critter,TO_SK_FIRST_AID,"Санитар",x,y);
if(i==7&&critter.Timeout[TO_SNEAK]>0)
y=draw_timeouts(critter,TO_SNEAK,"Скрытность",x,y);
if(i==8&&critter.Timeout[TO_BATTLE]>0&&!IsTurnBased())
y=draw_timeouts(critter,TO_BATTLE,"Боевой",x,y);
}
}
А также добавте в _defines.fos недостоющих констант:
например в стандартном сдк нету константы TO_SNEAK .В общем тех, что не будет добавте вручную.
 
Последнее редактирование:
Дата рег
7 Май 2014
Сообщения
10
Симпатии
1
а можете написать пример добавления скрипта в Scripts.cfg? плиз, может и глупый вопрос, но если не лень)
 
Дата рег
22 Окт 2012
Сообщения
119
Симпатии
63
во первых scripts.cfg
во вторых примеров в самом scripts.cfg полно
 
Дата рег
9 Ноя 2012
Сообщения
30
Симпатии
1
Открываеш scripts.cfg и пишеш @ client module <название скрипта без .fos> без скобок.