Назад

[mod+@] Event Team

Автор: nomn: Дата: 04.24.2011

[COLOR="Indigo"]
Представляю вашему вниманию команду, для разделения по командам xD
Можно использовать и в скриптах, вставляю присловутую atcommand "@et "+@team+""; а можно и в живых эвентах, чтоб администратор сам раскидывал команды при помощи #et Name <1-3>.

Версия: 0.1 Beta

Особенности:
Члены одной команды не могут атаковать друг друга
Члены одной команды видят НР друг друга
Перед никнеймами членов команды отображается номер их команды. Пример: [1] Вася

Требования:
Локация, где будет проводится эвент, должна иметь мапфлаги pvp и pvp_noparty.

Собственно сам мод:[/COLOR]

ea/src/map/atcommand.c


/*==========================================
* @eventteam / @et [nomn]
*------------------------------------------*/
int atcommand_eventteam(const int fd, struct map_session_data* sd, const char* command, const char* message)
{
int et;
if( !message || !*message )
return -1;

et = atoi(message);

if (et > 3) {
sprintf(atcmd_output, "Простите, но разрешены только команды 1-3", et);
clif_displaymessage(fd, atcmd_output);
return 0;
}

if (sd->state.event_team == et){
sprintf(atcmd_output, "Вы уже пренадлежите к команде №%d", et);
clif_displaymessage(fd, atcmd_output);
} else {
sd->state.event_team = et;
sprintf(atcmd_output, "Вы вступили в команду №%d.", et);
clif_displaymessage(fd, atcmd_output);
}
return 0;
}


ea/src/map/atcommand.c

{ "et", 40,40, atcommand_eventteam }, // [nomn]


ea/src/map/battle.c

state |= BCT_ENEMY; // Everything can kill it
strip_enemy = 0;
}

+ // Event Team [nomn]
+ if((map[m].flag.pvp) && s_bl != t_bl && s_bl->type == BL_PC && sd->state.event_team != 0 && sd->state.event_team == ((TBL_PC*)s_bl)->state.event_team)
+ return 0;

break;
}
case BL_MOB:
{


ea/src/map/pc.h

unsigned short autobonus; //flag to indicate if an autobonus is activated. [Inkfish]
+ unsigned short event_team; // Event Team [nomn]


ea/src/map/clif.c

if( (sd->status.party_id && dstsd->status.party_id == sd->status.party_id) || //Party-mate, or hpdisp setting.
(sd->state.bg_id && sd->state.bg_id == dstsd->state.bg_id) || //BattleGround
- (battle_config.disp_hpmeter && (gmlvl = pc_isGM(sd)) >= battle_config.disp_hpmeter && gmlvl >= pc_isGM(dstsd))
+ (battle_config.disp_hpmeter && (gmlvl = pc_isGM(sd)) >= battle_config.disp_hpmeter && gmlvl >= pc_isGM(dstsd)) ||
+ (sd->state.event_team != 0 && sd->state.event_team == dstsd->state.event_team)) // Event Team [nomn]


ea/src/map/clif.c

WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0;
break;
}

- memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH);
+ // Event Team [nomn]
+ if(ssd->state.event_team > 0) {
+ char str[10];
+ if(ssd->state.event_team == 1) {
+ strcat (str,"[1] ");
+ strcat(str,ssd->status.name);
+ memcpy(WBUFP(buf,6), str, NAME_LENGTH);
+ } else if (ssd->state.event_team == 2) {
+ strcat (str,"[2] ");
+ strcat(str,ssd->status.name);
+ memcpy(WBUFP(buf,6), str, NAME_LENGTH);
+ } else if(ssd->state.event_team == 3) {
+ strcat (str,"[3] ");
+ strcat(str,ssd->status.name);
+ memcpy(WBUFP(buf,6), str, NAME_LENGTH);
+ }
+ } else {
+ memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH);
+ }
+ // Event Team [nomn]

if( ssd->status.party_id )


Ну вот и все. Жду комментариев. Тыркаем спасибо, кому понадобилось.

Автор: nomn: Дата: 04.24.2011

Если тебе нужно, чтоб можно было бить однопартийцев - просто воспользуйся мапфлагом pvp_noparty. Позже добавлю к моду отображение НР людей в команде, если конечно кому-то вообще это все нужно

Автор: ValikDRV: Дата: 04.24.2011

если конечно кому-то вообще это все нужно

Конечно нужно :)

Автор: Gremlin: Дата: 04.24.2011

/kis

Автор: nomn: Дата: 04.25.2011

Апдейт до версии 0.5 beta

Автор: nomn: Дата: 04.26.2011

[COLOR="Indigo"]Нет предложений по улучшению?
п.с. сам мод был написан по просьбе Gamlet, идея показалась интересной.[/COLOR]

Автор: imba: Дата: 04.26.2011

Цитата nomn;39889:
[COLOR="Indigo"]Нет предложений по улучшению?
п.с. сам мод был написан по просьбе Gamlet, идея показалась интересной.[/COLOR]


Сделай Фикс:
1. Когда используешь команду через "#et [A] 1" - чтобы сообщения писались игроку [A].
2. Кривое отображение ника у игроков, которые находятся в команде. (С ником появляются иероглифы)

Я до этого эти фиксы выложил, а ты взял и удалил.

Автор: Кеник: Дата: 04.26.2011

Команду назначил.. Провел эвент.. А как обратно убрать назначение?

Автор: kadze: Дата: 04.26.2011

@et 0

Автор: nomn: Дата: 04.27.2011

Цитата imba;39890:
Сделай Фикс:
1. Когда используешь команду через "#et [A] 1" - чтобы сообщения писались игроку [A].
2. Кривое отображение ника у игроков, которые находятся в команде. (С ником появляются иероглифы)

Я до этого эти фиксы выложил, а ты взял и удалил.


так нужно было уточнять что ты там написал, т.к. на первый взгляд было похоже на кривую цитату 1ого сообщения. выкладывай снова.

Автор: imba: Дата: 04.27.2011

Цитата nomn;39971:
так нужно было уточнять что ты там написал, т.к. на первый взгляд было похоже на кривую цитату 1ого сообщения. выкладывай снова.


Корзины сообщений нету? Я просто не сохранял этого.

Автор: Sanasol: Дата: 06.17.2011

У меня выводились кракозябли перед ником когда ставил команду. Получалось †▬36[1]Sanasol.

переделал под себя

            // Event Team [nomn] 
if(ssd->state.event_team > 0) {
char str[20]="[1] ",str2[20]="[2] ",str3[20]="[3] ";

if(ssd->state.event_team == 1) {
strcat(str,ssd->status.name);
memcpy(WBUFP(buf,6), str, NAME_LENGTH);
} else if (ssd->state.event_team == 2) {
strcat(str2,ssd->status.name);
memcpy(WBUFP(buf,6), str2, NAME_LENGTH);
} else if(ssd->state.event_team == 3) {
strcat(str3,ssd->status.name);
memcpy(WBUFP(buf,6), str3, NAME_LENGTH);
}
} else {
memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH);
}
// Event Team [nomn]

Автор: ProjectRO: Дата: 06.17.2011

[COLOR="RoyalBlue"]Если правильно писать код

char str[NAME_LENGTH]="";

никаких иероглифов не будет.
Можно переписать код так

if(ssd->state.event_team > 0 && ssd->state.event_team < 4) {
char str[NAME_LENGTH];
sprintf(str, "[%d] %s", ssd->state.event_team, ssd->status.name);
memcpy(WBUFP(buf,6), str, NAME_LENGTH);
[/COLOR]

Автор: Sanasol: Дата: 06.17.2011

Скопировал номна код были иероглифы)

мой вариант меня спас и ок)