Автор: 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;
}
{ "et", 40,40, atcommand_eventteam }, // [nomn]
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:
{
unsigned short autobonus; //flag to indicate if an autobonus is activated. [Inkfish]
+ unsigned short event_team; // Event Team [nomn]
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]
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]
Автор: Кеник: Дата: 04.26.2011
Команду назначил.. Провел эвент.. А как обратно убрать назначение?
Автор: kadze: Дата: 04.26.2011
@et 0
Автор: nomn: Дата: 04.27.2011
Цитата imba;39890:
Сделай Фикс:
1. Когда используешь команду через "#et [A] 1" - чтобы сообщения писались игроку [A].
2. Кривое отображение ника у игроков, которые находятся в команде. (С ником появляются иероглифы)
Я до этого эти фиксы выложил, а ты взял и удалил.
Автор: 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]="";
никаких иероглифов не будет.
Можно переписать код так
[/COLOR]
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);
Автор: Sanasol: Дата: 06.17.2011
Скопировал номна код были иероглифы)
мой вариант меня спас и ок)