Автор: 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
Скопировал номна код были иероглифы)
мой вариант меня спас и ок)