Хочу быть разработчиком!

Информация по разработке, отладке режима и др.
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7860
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1990
Ник в игре: Richard_Castle
Контактная информация:

Хочу быть разработчиком!

Сообщение Eakwarp »

Специально для желающих стать разработчиком, вынесу в отдельную тему. Ниже приведена допотопная система квестов с нашего сервера, образца двухтрехлетней давности, из нее намеренно убраны все комментарии. Задача минимум, описать что и за что отвечает, как работает, с чем связано, какие имеет ограничения, найти все ошибки, возможно, предложить лучшее решение тех или иных частей кода, досконально в виде комментариев к коду. Готовый текст - мне в личку, кто реально покажет знания, уже будем думать, что делать с вами дальше.
test  Ахтунг, 600 строк кода

Код: Выделить всё

enum squestinfo
{
	sqValid,
	sqStartUserID,
	sqQuestID,
	sqNpcID,
	sqNpcName[MAX_PLAYER_NAME],
	sqNpcSkinID,
	Float:sqNpcX,
	Float:sqNpcY,
	Float:sqNpcZ,
	Float:sqNpcRot,
	sqPrice,
	sqStartItem,// 0/1
	sqStartItemID,
	sqSteeps,
	sqName[64],
	sqText[2048],
	sqAnimUse,
	sqAnimLib[32],
	sqAnimName[32],
	sqRewardItem,
	sqRewardItemID,
	sqUseCheckpoints
}
new StartQuestInfo[8][squestinfo];
new Text3D:StartQuestLabel[sizeof(StartQuestInfo)];

enum metaquestinfo
{
	mqValid,
	mqQuestID,
	mqSteepID,//0-7
	mqNpcID,
	mqNpcName[MAX_PLAYER_NAME],
	mqNpcSkinID,
	Float:mqNpcX,
	Float:mqNpcY,
	Float:mqNpcZ,
	Float:mqNpcRot,
    mqTakeItem,// 0/1
    mqTakeItemID,
   	mqGiveItem,// 0/1
	mqGiveItemID,
	mqEndQuest,// 0/1
	mqText[2048],
	mqAnimUse,
	mqAnimLib[32],
	mqAnimName[32]
}
new MetaQuestInfo[sizeof(StartQuestInfo)][8][metaquestinfo];

new Text3D:MetaQuestLabel[sizeof(StartQuestInfo)][8];

new Quest[MAX_PLAYERS]=-1;//0-9
new Steep[MAX_PLAYERS]=-1;//0-7
stock QuestNPCConnect(p)
{
    new playername[32];
	GetPlayerName(p,playername,32);
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
	    if(StartQuestInfo[n][sqValid])
	    {
			if(!strcmp(StartQuestInfo[n][sqNpcName],playername,true))
			{
				StartQuestInfo[n][sqNpcID]=p;
				return 1;
			}
			for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
			{
			    if(MetaQuestInfo[n][i][mqValid])
			    {
				    if(!strcmp(MetaQuestInfo[n][i][mqNpcName],playername,true))
				    {
						MetaQuestInfo[n][i][mqNpcID]=p;
						return 1;
					}
				}
			}
		}
	}
	return 1;
}

stock QuestNPCSetSpawn(p)
{
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
	    if(StartQuestInfo[n][sqValid])
	    {
	        if(p==StartQuestInfo[n][sqNpcID])
	        {
	        	SetSpawnInfo(StartQuestInfo[n][sqNpcID], 0, StartQuestInfo[n][sqNpcSkinID],StartQuestInfo[n][sqNpcX], StartQuestInfo[n][sqNpcY], StartQuestInfo[n][sqNpcZ], StartQuestInfo[n][sqNpcRot], 0, 0, 0, 0, 0, 0 );
				return 1;
			}
			for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
			{
			    if(MetaQuestInfo[n][i][mqValid])
			    {
			        if(p==MetaQuestInfo[n][i][mqNpcID])
		        	{
                        SetSpawnInfo(MetaQuestInfo[n][i][mqNpcID], 0,  MetaQuestInfo[n][i][mqNpcSkinID], MetaQuestInfo[n][i][mqNpcX], MetaQuestInfo[n][i][mqNpcY], MetaQuestInfo[n][i][mqNpcZ], MetaQuestInfo[n][i][mqNpcRot], 0, 0, 0, 0, 0, 0 );
						return 1;
		        	}
			    }
			}
		}
	}
	return 1;
}
stock LoadRandomQuests()
{
	new str[255];
    samp_mysql_query("SELECT id FROM quest");
	samp_mysql_store_result();
	new quests=samp_mysql_num_rows();
	if(quests==0)
	{
        print("Error, not quest");
		return 1;
	}
	else if(quests<=sizeof(StartQuestInfo))
	{
	    for(new i = 0; i < quests; i++)
		{
		    if(!LoadQuest(i,i))continue;
		    //загрузка данных из бд по указанному иду.
		    StartQuestInfo[i][sqNpcID]=FindValidID();//свободный ид с конца
		    #if defined CBOTS
		    CreateNPC(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqNpcName]);
		    SetSpawnInfo(StartQuestInfo[i][sqNpcID], 0, StartQuestInfo[i][sqNpcSkinID],StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ], StartQuestInfo[i][sqNpcRot], 0, 0, 0, 0, 0, 0 );
		    SpawnNPC(StartQuestInfo[i][sqNpcID]);
		    SetNPCFacingAngle(StartQuestInfo[i][sqNpcID], StartQuestInfo[i][sqNpcRot]);
		    SetNPCImpregnable(StartQuestInfo[i][sqNpcID],1);
		    #else
		    ConnectNPC(StartQuestInfo[i][sqNpcName],"stand");
			#endif
		    format(str,sizeof(str),"%s[/say для разговора]",StartQuestInfo[i][sqNpcName]);
			StartQuestLabel[i] = CreateDynamic3DTextLabel(str,COLOR_WHITE,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
			if(StartQuestInfo[i][sqAnimUse])
		    {
                ApplyAnimation(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqAnimLib],StartQuestInfo[i][sqAnimName],4.1,0,0,0,1,0);
		    }
            for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
            {
                if(!LoadSteep(StartQuestInfo[i][sqQuestID],b)) continue;
                MetaQuestInfo[i][b][mqNpcID]=FindValidID();
                #if defined CBOTS
                CreateNPC(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcName]);
                SetSpawnInfo(MetaQuestInfo[i][b][mqNpcID], 0,  MetaQuestInfo[i][b][mqNpcSkinID], MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ], MetaQuestInfo[i][b][mqNpcRot], 0, 0, 0, 0, 0, 0 );
				SpawnNPC(MetaQuestInfo[i][b][mqNpcID]);
				SetNPCImpregnable(MetaQuestInfo[i][b][mqNpcID],1);
				SetNPCFacingAngle(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcRot]);
				#else
		    	ConnectNPC(MetaQuestInfo[i][b][mqNpcName],"stand");
				#endif
                format(str,sizeof(str),"%s[/say для разговора]",MetaQuestInfo[i][b][mqNpcName]);
				MetaQuestLabel[i][b] = CreateDynamic3DTextLabel(str,COLOR_WHITE,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
				if(MetaQuestInfo[i][b][mqAnimUse])
			    {
	                ApplyAnimation(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqAnimLib],MetaQuestInfo[i][b][mqAnimName],4.1,0,0,0,1,0);
			    }
            }
		}
	}
	else
	{
		for(new i = 0; i < sizeof(StartQuestInfo); i++)
		{
		    new bit1,bit2;
		    new rand;
		    while (bit1==1)
			{
	            bit2=0;
			    rand=random(quests);
	            for(new n = 0; n < i; n++)
				{
				    if(StartQuestInfo[n][sqQuestID]==rand)bit2=1;
				}
				if(bit2==0)bit1=1;
			}
		    if(!LoadQuest(rand,i))continue;
		    //загрузка данных из бд по указанному иду.
		    StartQuestInfo[i][sqNpcID]=FindValidID();//свободный ид с конца
		    #if defined CBOTS
		    CreateNPC(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqNpcName]);
		    SetSpawnInfo(StartQuestInfo[i][sqNpcID], 0, StartQuestInfo[i][sqNpcSkinID],StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ], StartQuestInfo[i][sqNpcRot], 0, 0, 0, 0, 0, 0 );
		    SpawnNPC(StartQuestInfo[i][sqNpcID]);
		    SetNPCFacingAngle(StartQuestInfo[i][sqNpcID], StartQuestInfo[i][sqNpcRot]);
		    SetNPCImpregnable(StartQuestInfo[i][sqNpcID],1);
		    #else
		    ConnectNPC(StartQuestInfo[i][sqNpcName],"stand");
		    #endif
		    format(str,sizeof(str),"%s[/say для разговора]",StartQuestInfo[i][sqNpcName]);
			StartQuestLabel[i] = CreateDynamic3DTextLabel(str,COLOR_WHITE,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
			if(StartQuestInfo[i][sqAnimUse])
		    {
                ApplyAnimation(StartQuestInfo[i][sqNpcID],StartQuestInfo[i][sqAnimLib],StartQuestInfo[i][sqAnimName],4.1,0,0,0,1,0);
		    }
			for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
            {
                if(!LoadSteep(StartQuestInfo[i][sqQuestID],b)) continue;
                MetaQuestInfo[i][b][mqNpcID]=FindValidID();
                #if defined CBOTS
                CreateNPC(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcName]);
                SetSpawnInfo(MetaQuestInfo[i][b][mqNpcID], 0,  MetaQuestInfo[i][b][mqNpcSkinID], MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ], MetaQuestInfo[i][b][mqNpcRot], 0, 0, 0, 0, 0, 0 );
				SpawnNPC(MetaQuestInfo[i][b][mqNpcID]);
				SetNPCFacingAngle(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqNpcRot]);
				SetNPCImpregnable(MetaQuestInfo[i][b][mqNpcID],1);
				#else
		    	ConnectNPC(MetaQuestInfo[i][b][mqNpcName],"stand");
				#endif
                format(str,sizeof(str),"%s[/say для разговора]",MetaQuestInfo[i][b][mqNpcName]);
				MetaQuestLabel[i][b] = CreateDynamic3DTextLabel(str,COLOR_WHITE,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]+1.0,15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1);
				if(MetaQuestInfo[i][b][mqAnimUse])
			    {
	                ApplyAnimation(MetaQuestInfo[i][b][mqNpcID],MetaQuestInfo[i][b][mqAnimLib],MetaQuestInfo[i][b][mqAnimName],4.1,0,0,0,1,0);
			    }
            }
		}
	}
	return 1;
}

stock LoadQuest(qid,idto)
{
	new query[255],Field[2048];
    format(query, sizeof(query), "SELECT * FROM quest WHERE id = %d LIMIT 1", qid);
	samp_mysql_query(query);
	samp_mysql_store_result();
	if(samp_mysql_num_rows() != 0)
	{
		samp_mysql_fetch_result();
	//	samp_mysql_fetch_next(Field);
		new rcnt=0;
		StartQuestInfo[idto][sqValid]=1;
		StartQuestInfo[idto][sqQuestID]=qid;
		while (samp_mysql_fetch_next(Field)==1)
		{
		    switch(rcnt)
		    {
		        case 1: strmid(StartQuestInfo[idto][sqNpcName], Field, 0, strlen(Field), 255);
		        case 2: StartQuestInfo[idto][sqNpcSkinID] = strval(Field);
				case 3: StartQuestInfo[idto][sqNpcX] = floatstr(Field);
				case 4: StartQuestInfo[idto][sqNpcY] = floatstr(Field);
				case 5: StartQuestInfo[idto][sqNpcZ] = floatstr(Field);
				case 6: StartQuestInfo[idto][sqNpcRot] = floatstr(Field);
				case 7: strmid(StartQuestInfo[idto][sqName], Field, 0, strlen(Field), 255);
				case 8: strmid(StartQuestInfo[idto][sqText], Field, 0, strlen(Field), 2048);
				case 9: StartQuestInfo[idto][sqPrice] = strval(Field);
				case 10: StartQuestInfo[idto][sqStartItem] = strval(Field);
				case 11: StartQuestInfo[idto][sqStartItemID] = strval(Field);
				case 12: StartQuestInfo[idto][sqSteeps] = strval(Field);
				case 13: StartQuestInfo[idto][sqAnimUse] = strval(Field);
				case 14: strmid(StartQuestInfo[idto][sqAnimLib], Field, 0, strlen(Field), 255);
				case 15: strmid(StartQuestInfo[idto][sqAnimName], Field, 0, strlen(Field), 255);
				case 16: StartQuestInfo[idto][sqRewardItem] = strval(Field);
				case 17: StartQuestInfo[idto][sqRewardItemID] = strval(Field);
				case 18: StartQuestInfo[idto][sqUseCheckpoints] = strval(Field);
			}
			rcnt++;
		}
		return 1;
	}
	printf("Error, quest %d - not loaded",qid);
	return 0;
}

stock LoadSteep(questid,steep)
{
	new query[255],Field[2048];
    format(query, sizeof(query), "SELECT * FROM questmeta WHERE QuestID=%d AND SteepID=%d LIMIT 1", questid,steep);
	samp_mysql_query(query);
	samp_mysql_store_result();
	if(samp_mysql_num_rows() != 0)
	{
		samp_mysql_fetch_result();
	//	samp_mysql_fetch_next(Field);
		new rcnt=0;
        MetaQuestInfo[questid][steep][mqValid]=1;
		while (samp_mysql_fetch_next(Field)==1)
		{
		    switch(rcnt)
		    {
		        case 1: MetaQuestInfo[questid][steep][mqQuestID]= strval(Field);
		        case 2: MetaQuestInfo[questid][steep][mqSteepID]= strval(Field);
		        case 3: strmid(MetaQuestInfo[questid][steep][mqNpcName], Field, 0, strlen(Field), 255);
		        case 4: MetaQuestInfo[questid][steep][mqNpcSkinID] = strval(Field);
		        case 5: MetaQuestInfo[questid][steep][mqNpcX] = floatstr(Field);
				case 6: MetaQuestInfo[questid][steep][mqNpcY] = floatstr(Field);
				case 7: MetaQuestInfo[questid][steep][mqNpcZ] = floatstr(Field);
				case 8: MetaQuestInfo[questid][steep][mqNpcRot] = floatstr(Field);
				case 9: MetaQuestInfo[questid][steep][mqTakeItem]= strval(Field);
				case 10: MetaQuestInfo[questid][steep][mqTakeItemID]= strval(Field);
				case 11:MetaQuestInfo[questid][steep][mqGiveItem]= strval(Field);
				case 12:MetaQuestInfo[questid][steep][mqGiveItemID]= strval(Field);
				case 13:MetaQuestInfo[questid][steep][mqEndQuest]= strval(Field);
				case 14:strmid(MetaQuestInfo[questid][steep][mqText], Field, 0, strlen(Field), 2048);
				case 15: MetaQuestInfo[questid][steep][mqAnimUse] = strval(Field);
				case 16: strmid(MetaQuestInfo[questid][steep][mqAnimLib], Field, 0, strlen(Field), 255);
				case 17: strmid(MetaQuestInfo[questid][steep][mqAnimName], Field, 0, strlen(Field), 255);
				
			}
			rcnt++;
		}
		return 1;
	}
	printf("Error, steep %d for quest %d - not loaded",steep,questid);
	return 0;
}

stock SayToQuestPlayer(playerid)
{
    for(new i = 0; i < sizeof(StartQuestInfo); i++)
	{
		if(IsPlayerInRangeOfPoint(playerid,3.0,StartQuestInfo[i][sqNpcX], StartQuestInfo[i][sqNpcY], StartQuestInfo[i][sqNpcZ]))
		{
		    if(Quest[playerid]==-1)//начать квест
			{
			    new query[255];
			    format(query,sizeof(query),"SELECT id FROM questcomplete WHERE Name='%s' AND QuestID=%d",oGetPlayerName(playerid),StartQuestInfo[i][sqQuestID]);
				samp_mysql_query(query);
				samp_mysql_store_result();
				new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
				if(samp_mysql_num_rows() != 0)
				{
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
				}
				if(IsACop(playerid))return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
				Quest[playerid]=i;
			    ShowPlayerDialog(playerid,199,DIALOG_STYLE_MSGBOX,str,StartQuestInfo[i][sqText],"Взять","Не взять");
			    return 1;
		    }
		    else
		    {
		        new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
		        return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
		    }
		}
		for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
		{
		    if(IsPlayerInRangeOfPoint(playerid,3.0,MetaQuestInfo[i][b][mqNpcX], MetaQuestInfo[i][b][mqNpcY], MetaQuestInfo[i][b][mqNpcZ]))
			{
			    if(Quest[playerid]!=i)
			    {
    				new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
			        return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
			    }
			    if(Steep[playerid]==b)
			    {
					if(MetaQuestInfo[i][b][mqTakeItem])
					{
						if(FindItem(playerid,MetaQuestInfo[i][b][mqTakeItemID])) DeleteOneItem(playerid,MetaQuestInfo[i][b][mqTakeItemID]);
						else EndQuest(playerid,0);
					}
					new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
				    ShowPlayerDialog(playerid,200,DIALOG_STYLE_MSGBOX,str,MetaQuestInfo[i][b][mqText],"Ок","Ок");
				    return 1;
			    }
			    else
			    {
			        new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[i][sqName]);
					return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Прости, у меня для тебя ничего нет","Ок","Ок");
			    }
		    }
		}
	}
	return 1;
}
stock QuestDialogResponse(playerid, dialogid, response)
{
	switch(dialogid)
	{
	    case 199:
	    {
			if(response)
			{
			    if(StartQuestInfo[Quest[playerid]][sqStartItem])
				{
				    if(!SetItem(playerid,StartQuestInfo[Quest[playerid]][sqStartItemID],1))
					{
					    new str[255];
						format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
						Quest[playerid]=-1;
						Steep[playerid]=-1;
					    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
					}
			    }
			    Steep[playerid]=0;
			    new str[255];
				format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
				if(StartQuestInfo[Quest[playerid]][sqUseCheckpoints])
				{
					SetPlayerCheckpoint(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcX], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcY], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcZ],4.0);
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"На вашем радаре отображен чекпоинт с указанным NPC.","OK","OK");
			    }
			    return 1;
			}
			else
			{
			    Quest[playerid]=-1;
			}
	    }
		case 200:
		{
		    if(MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqGiveItem])
			{
			    if(!SetItem(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqGiveItemID],1))
				{
				    new str[255];
					format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
				    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
				}
		    }
			if(MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqEndQuest]) return EndQuest(playerid, 1);
			new str[255];
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
			Steep[playerid]++;
			if(StartQuestInfo[Quest[playerid]][sqUseCheckpoints])
			{
				SetPlayerCheckpoint(playerid,MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcX], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcY], MetaQuestInfo[Quest[playerid]][Steep[playerid]][mqNpcZ],4.0);
			    return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"На вашем радаре отображен чекпоинт с указанным NPC.","OK","OK");
		    }
		    return 1;
		}
	}
	return 1;
}
stock EndQuest(playerid, type)
{
	switch(type)
	{
		case 0://провал
		{
		    new str[255];
		    DisablePlayerCheckpoint(playerid);
		    ClearQuestItems(playerid);
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
			Quest[playerid]=-1;//0-9
			Steep[playerid]=-1;//0-7
			return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы провалили квест","Ок","Ок");
		}
		case 1://выигрыш
		{
		    new str[255];
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[playerid]][sqName]);
		    if(StartQuestInfo[Quest[playerid]][sqRewardItem])
		    {
		        if(!SetItem(playerid,StartQuestInfo[Quest[playerid]][sqRewardItemID],1))
		        {
		            return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Вы не сможете унести это, уберите что нибуть из своих вещей и подойдите ко мне снова.","OK","OK");
				}
		    }
			new str1[255];
			format(str1,sizeof(str1),"Вы прошли квест, награда %d",StartQuestInfo[Quest[playerid]][sqPrice]);
			new reason[255];
			format(reason,sizeof(reason),"Прошел квест %s",StartQuestInfo[Quest[playerid]][sqName]);
			DisablePlayerCheckpoint(playerid);
            TransferMoney(0,0,playerid,1,StartQuestInfo[Quest[playerid]][sqPrice],reason);
            new query[255];
            format(query,sizeof(query),"INSERT INTO questcomplete SET Name='%s', QuestID=%d",oGetPlayerName(playerid),StartQuestInfo[Quest[playerid]][sqQuestID]);
			samp_mysql_query(query);
            Quest[playerid]=-1;//0-9
			Steep[playerid]=-1;//0-7
			ClearQuestItems(playerid);
			return ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,str1,"Ок","Ок");
		}
	}
	return 1;
}
stock QuestPlayerConnect(playerid)
{
    Quest[playerid]=-1;//0-9
	Steep[playerid]=-1;//0-7
	return 1;
}
stock QuestPlayerDisconnect(playerid)
{
    Quest[playerid]=-1;//0-9
	Steep[playerid]=-1;//0-7
	return 1;
}
enum equestinfo
{
	eqType,
	eqStage,
	eqQuest,
    eqText[2048]
};
new EditQuestInfo[MAX_PLAYERS][equestinfo];
stock StartEditTextForQuest(playerid)
{
    for(new n = 0; n < sizeof(StartQuestInfo); n++)
	{
		if(IsPlayerInRangeOfPoint(playerid,3.0,StartQuestInfo[n][sqNpcX], StartQuestInfo[n][sqNpcY], StartQuestInfo[n][sqNpcZ]))
		{
			new str[255];
			format(str,sizeof(str),"Изменение квеста %d, вы сейчас на старте, введите название:",n);
			format(EditQuestInfo[playerid][eqText],2048," ");
			EditQuestInfo[playerid][eqType]=-1;
			EditQuestInfo[playerid][eqQuest]=n;
			ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
			return 1;
		}
		for(new i = 0; i < StartQuestInfo[n][sqSteeps]; i++)
		{
		    if(IsPlayerInRangeOfPoint(playerid,3.0,MetaQuestInfo[n][i][mqNpcX], MetaQuestInfo[n][i][mqNpcY], MetaQuestInfo[n][i][mqNpcZ]))
			{
                EditQuestInfo[playerid][eqType]=1;
                EditQuestInfo[playerid][eqQuest]=n;
                EditQuestInfo[playerid][eqStage]=i;
                new str[255];
				format(str,sizeof(str),"Изменение квеста %d, этап %d",n,i);
				format(EditQuestInfo[playerid][eqText],2048," ");
				ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
				return 1;
			}
		}
	}
	return 0;
}
stock EditQuestDialogResponse(playerid, dialogid, response, inputtext[])
{
	switch(dialogid)
	{
	    case 221:
	    {
	        if(response)
	        {
	            new str[255];
	            switch(EditQuestInfo[playerid][eqType])
	            {
					case -1:
					{
						new query[255];
					    format(query,sizeof(query),"UPDATE quest SET Name=' %s' WHERE id=%d",inputtext,StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqQuestID]);
					    samp_mysql_query(query);
					    format(StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqName],64,"%s",inputtext);
						format(str,sizeof(str),"Изменение квеста %d, текст квеста:",EditQuestInfo[playerid][eqQuest]);
						format(EditQuestInfo[playerid][eqText],2048," ");
						EditQuestInfo[playerid][eqType]=0;
						ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
						return 1;
					}
	                case 0:format(str,sizeof(str),"Изменение квеста %d",EditQuestInfo[playerid][eqQuest]);
					case 1:format(str,sizeof(str),"Изменение квеста %d, этап %d",EditQuestInfo[playerid][eqQuest],EditQuestInfo[playerid][eqStage]);
	            }
				format(EditQuestInfo[playerid][eqText],2048," %s\n%s",EditQuestInfo[playerid][eqText],inputtext);
				ShowPlayerDialog(playerid,221,DIALOG_STYLE_INPUT,str,EditQuestInfo[playerid][eqText],"Добавить строку","Конец");
	        }
	        else
	        {
	            new str[255];
	            new query[2048];
	            switch(EditQuestInfo[playerid][eqType])
	            {
	                case 0:
					{
					    format(query,sizeof(query),"UPDATE quest SET QuestText='%s' WHERE id=%d",EditQuestInfo[playerid][eqText],StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqQuestID]);
					    samp_mysql_query(query);
					    format(StartQuestInfo[EditQuestInfo[playerid][eqQuest]][sqText],2048,"%s",EditQuestInfo[playerid][eqText]);
					   	format(str,sizeof(str),"Изменение квеста %d",EditQuestInfo[playerid][eqQuest]);
					}
					case 1:
					{
					    format(query,sizeof(query),"UPDATE questmeta SET QuestText='%s' WHERE QuestID=%d AND SteepID=%d",EditQuestInfo[playerid][eqText],MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqQuestID],MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqSteepID]);
					    samp_mysql_query(query);
					    format(MetaQuestInfo[EditQuestInfo[playerid][eqQuest]][EditQuestInfo[playerid][eqStage]][mqText],2048,"%s",EditQuestInfo[playerid][eqText]);
					    format(str,sizeof(str),"Изменение квеста %d, этап %d",EditQuestInfo[playerid][eqQuest],EditQuestInfo[playerid][eqStage]);
					}
	            }
	            ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,str,"Сохранено","Ок","Ок");
				return 1;
	        }
	    }
	}
	return 1;
}
stock UnloadQuests()
{
	foreach(Player,i)
	{
	    if(Quest[i]>=0)
		{
	    	new str[255];
		    DisablePlayerCheckpoint(i);
		    ClearQuestItems(i);
			format(str,sizeof(str),"Квест: %s",StartQuestInfo[Quest[i]][sqName]);
			Quest[i]=-1;//0-9
			Steep[i]=-1;//0-7
			return ShowPlayerDialog(i,0,DIALOG_STYLE_MSGBOX,str,"Квесты были выгружены, и ваше участие отменено","Ок","Ок");
	    }
	}
    for(new i = 0; i < sizeof(StartQuestInfo); i++)
	{
	    if(StartQuestInfo[i][sqValid])
	    {
	        #if defined CBOTS
	    	DestroyNPC(StartQuestInfo[i][sqNpcID]);
	    	#else
			Kick(StartQuestInfo[i][sqNpcID]);
			#endif
            DestroyDynamic3DTextLabel(StartQuestLabel[i]);
            StartQuestInfo[i][sqValid]=0;
	    	for(new b = 0; b < StartQuestInfo[i][sqSteeps]; b++)
	        {
	            if(MetaQuestInfo[i][b][mqValid])
	            {
	                #if defined CBOTS
	            	DestroyNPC(MetaQuestInfo[i][b][mqNpcID]);
	            	#else
					Kick(MetaQuestInfo[i][b][mqNpcID]);
	            	#endif
	            	DestroyDynamic3DTextLabel(MetaQuestLabel[i][b]);
	            	MetaQuestInfo[i][b][mqValid]=0;
	            }
        	}
        }
    }
	return 1;
}
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Аватара пользователя
MyatKO
Писатель
Сообщения: 865
Зарегистрирован: 31 мар 2012, 08:19
Репутация: -4
Ник в игре: Valentin_Litvinov
Откуда: Казань
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение MyatKO »

Извините за флуд, но хотелось бы узнать до какого числа / времени нужно выполнить данное задание?
test  Биографии и истории
Valentin Litvinov(биография, кликабельно)[25 lvl]
Nguyen Cung [10 lvl]
Carry Sanders [4 lvl]
Victor Corbet (кликабельно) [переименован]
Меня зовут не Валентин. Никнеймы персонажей взяты из книг / фильмов / игр / Википедии.

Изображение
Изображение

Изображение
Аватара пользователя
Oliver
Команда проекта
Сообщения: 3843
Зарегистрирован: 25 мар 2012, 16:33
Репутация: 464
Ник в игре: Frank Lawson

Re: Хочу быть разработчиком!

Сообщение Oliver »

Мне кажется, главное сделать, едва ли есть жесткие ограничения по времени :)
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7860
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1990
Ник в игре: Richard_Castle
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение Eakwarp »

Ограничений по времени нет, меня интересует качество выполнения, и именно знания выполнявшего, а не коллективные.
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7860
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1990
Ник в игре: Richard_Castle
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение Eakwarp »

Ну что, кто нибудь решился?)
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Enr1k
Местный
Сообщения: 284
Зарегистрирован: 30 июл 2010, 17:18
Репутация: 10
Ник в игре: Enrico Ormanni
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение Enr1k »

Eakwarp писал(а):Ну что, кто нибудь решился?)
Нету смельчаков :(
Тут была говнореклама, убрал нахер © DiZet
Kolarsi
Форумчанин
Сообщения: 370
Зарегистрирован: 21 апр 2012, 20:07
Репутация: 0
Ник в игре: Andrey_Kolarsi

Re: Хочу быть разработчиком!

Сообщение Kolarsi »

Enr1k писал(а):
Eakwarp писал(а):Ну что, кто нибудь решился?)
Нету смельчаков :(
Думаю скорее проблема не в смелости, а в нехватке знаний.
test  Мои персонажи
Andrey Kolarsi Тел. 12340 31lvl
Помощник Федерального Маршала
Изображение
Andrew Song Тел. 123400 16lvl
Член банды Grove Street
Изображение
test  Обязан знать каждый!
Eakwarp писал(а):
NoRemorse писал(а):Сонг и Эскобар, стрельба по подозреваемому, нарушавшего ПДД, отлично.
Ну да, только есть разница, между человеком нарушившим пдд, и уезжающим от полиции, продолжая их злостно нарушать.
test  Да, бывает играю...
Изображение
test  Если дровишек подкинуть и не такое может
Изображение
Изображение
Enr1k
Местный
Сообщения: 284
Зарегистрирован: 30 июл 2010, 17:18
Репутация: 10
Ник в игре: Enrico Ormanni
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение Enr1k »

Kolarsi писал(а):
Enr1k писал(а):
Eakwarp писал(а):Ну что, кто нибудь решился?)
Нету смельчаков :(
Думаю скорее проблема не в смелости, а в нехватке знаний.
понятно что нет, я образно высказался.
Тут была говнореклама, убрал нахер © DiZet
slickstars
Новичок
Сообщения: 1
Зарегистрирован: 21 янв 2013, 17:53
Репутация: 0
Ник в игре: Matt_Foster

Re: Хочу быть разработчиком!

Сообщение slickstars »

Думаю врятли такие найдутся, те кто разбираются - имеют много других дел..
Dany_FabiaNi
Новичок
Сообщения: 1
Зарегистрирован: 31 янв 2013, 18:57
Репутация: 0
Ник в игре: Dany_FabiaNy

Re: Хочу быть разработчиком!

Сообщение Dany_FabiaNi »

На мапера найдется местечко вам?
Аватара пользователя
Stimorol
Гуру
Сообщения: 1277
Зарегистрирован: 29 авг 2012, 13:56
Репутация: -48
Ник в игре: Andrey_Frolov
Откуда: #Kazan#

Re: Хочу быть разработчиком!

Сообщение Stimorol »

Dany_FabiaNi писал(а):На мапера найдется местечко вам?
У нас тут пол сервера Мапперы.
Дата регистрации: 02.05.2012
Изображение
Изображение
Изображение
Изображение
test  
Изображение
Здесь была ini.
ini а что ты тут делала?
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7860
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1990
Ник в игре: Richard_Castle
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение Eakwarp »

Dany_FabiaNi писал(а):На мапера найдется местечко вам?
Зачем? О_о У нас весь "маппинг", если его таким можно назвать, происходит из игры, и им заведуют соответствующие фирмы и организации. А вот толковые программисты нам всегда нужны.

К слову, с момента вывода данного в отдельную тему, мне постучалось в личку 3 человека(кто стучался - знает), к сожалению знания каждого оказались практически нулевыми, такие дела.
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Аватара пользователя
MyatKO
Писатель
Сообщения: 865
Зарегистрирован: 31 мар 2012, 08:19
Репутация: -4
Ник в игре: Valentin_Litvinov
Откуда: Казань
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение MyatKO »

Я там тоже начал что-то разбирать, но завис где-то на середине.
test  Биографии и истории
Valentin Litvinov(биография, кликабельно)[25 lvl]
Nguyen Cung [10 lvl]
Carry Sanders [4 lvl]
Victor Corbet (кликабельно) [переименован]
Меня зовут не Валентин. Никнеймы персонажей взяты из книг / фильмов / игр / Википедии.

Изображение
Изображение

Изображение
Аватара пользователя
Kabanello
Житель
Сообщения: 582
Зарегистрирован: 30 июл 2010, 09:57
Репутация: 5
Ник в игре: Sergey_Kabanov
Откуда: От туда
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение Kabanello »

Eakwarp писал(а):
Dany_FabiaNi писал(а):На мапера найдется местечко вам?
Зачем? О_о У нас весь "маппинг", если его таким можно назвать, происходит из игры, и им заведуют соответствующие фирмы и организации. А вот толковые программисты нам всегда нужны.

К слову, с момента вывода данного в отдельную тему, мне постучалось в личку 3 человека(кто стучался - знает), к сожалению знания каждого оказались практически нулевыми, такие дела.
А разве такому разрабу, нужна помощь? :)
Позже тоже посмотрю.. :)
Форум с русскоязычными сотрудниками американской полиции
test  Персы
Алекс Стрейф - Коммисар полиции в отставке. В звании Полковник.[active]
Сергей Кабанов - Легендарный Сергей Михалыч. [dead]
Аватара пользователя
АнтиКиллер
С пропиской
Сообщения: 126
Зарегистрирован: 04 фев 2013, 12:49
Репутация: 0
Ник в игре: David_Mainstone
Откуда: Москва
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение АнтиКиллер »

Вопрос: описывать дей-ие каждой строчки?
А можно какое-нибудь другое задание? Ибо описывать дей-ие каждой из 600 строки тяжело и "занудно". :D
test  David Mainstone
Дэвид Мейнстоун [Актив]
Изображение
Афро-американец. На вид 24-29 лет. Накачан. Носит оливковые шорты, синюю футболку с надписью на спине "Mainstone", очки с эмблемой LSPD. На левой брови поперечный шрам от пореза, хромает на левую ногу. Имеет несколько татуировок на теле: Татуировка с надписью DEVGRU на левом предплечье, надписи на кулаках: K-Dee, Wayne. Часто перебинтовывает левое предплечье и носит байкерские перчатки. Безработный на данный момент. Имеет судимость за хранение оружия и разбойное нападение, также на нём "висит" 3 замороженных дела. Вспыльчивый, часто не контролирует своё поведение, справедливый, не любит врать. Из-за частого преследования полиции Дэвид стал параноиком. Передвигается на различных ТС, после того, как был подорван его Садлер. Также любит чопперы. Служил в Вайс Сити, позже был переброшен в Афганистан в отряд DEVGRU. Через несколько лет в следствии ранения был отправлен в Лос-Сантос в звании Капитана 1 ранга. Имеет 6 братьев, является самым старшим. Мастерски владеет штурмовыми винтовками из семейства AR-10, неплохо метает ножи. Мейнстоун старший хранит пистолет своего погибшего брата - "Беретта 92". Профессиональный боксёр в прошлом. Среди боевых искусств, Дэвид также владеет АРБ.

"Прибежать можно только в тюрьму"
Изображение
Изображение
Аватара пользователя
MyatKO
Писатель
Сообщения: 865
Зарегистрирован: 31 мар 2012, 08:19
Репутация: -4
Ник в игре: Valentin_Litvinov
Откуда: Казань
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение MyatKO »

David_Mainstone писал(а):Вопрос: описывать дей-ие каждой строчки?
А можно какое-нибудь другое задание? Ибо описывать дей-ие каждой из 600 строки тяжело и "занудно". :D
Разработка игрового мода / режима вообще дело не из легких. Тебе комментировать тяжело, а придумывать / реализовывать будет еще тяжелее.
test  Биографии и истории
Valentin Litvinov(биография, кликабельно)[25 lvl]
Nguyen Cung [10 lvl]
Carry Sanders [4 lvl]
Victor Corbet (кликабельно) [переименован]
Меня зовут не Валентин. Никнеймы персонажей взяты из книг / фильмов / игр / Википедии.

Изображение
Изображение

Изображение
Аватара пользователя
neeson
Новичок
Сообщения: 1
Зарегистрирован: 20 мар 2013, 09:48
Репутация: 0
Ник в игре: Lionel_Neeson
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение neeson »

А в веб-разработчиках или дизайнерах Ваш чудной «Валакас» не нуждается? :)
Аватара пользователя
Eakwarp
Команда проекта
Сообщения: 7860
Зарегистрирован: 29 июл 2010, 22:46
Репутация: 1990
Ник в игре: Richard_Castle
Контактная информация:

Re: Хочу быть разработчиком!

Сообщение Eakwarp »

neeson писал(а):А в веб-разработчиках или дизайнерах Ваш чудной «Валакас» не нуждается? :)
Их есть у нас.
test  Персонажи
Ричард Касл - богатый, престарелый холостяк, как следствие ведет довольно развязный образ жизни. Полиции известен как президент галактики крутотень.
Кейв Джонсон - политик, демократ, глава правительства штата Сан Андреас. Прислан в штат Вашингтоном. Из биографии известна его деятельность в Вирджинии и Юте. Несколько раз помогал Сан Андреас в критических политических ситуациях. В юности проживал в Техасе.
test  Важно к прочтению
Заявки на регистрацию проверяю сугубо в порядке общей очереди и по мере наличия на них свободного времени, убедительная просьба, не просить меня проверить вашу заявку.

Игровой уровень - ООС единица, какие к черту "лет в штате"? Одумайтесь.

Давайте, все уже окончательно уяснят, что Лос Сантос - это Лос Сантос, не Лос Анджелес, не Нью-Йорк (как думают "особо одаренные"), а Лос Сантос, выдуманный город. Туризмо - это туризмо, не феррари, не ваз 2106 и не та "ваша любимая машина", мод которой вы поставили взамен туризмо. У нас самобытный игровой мир, который зачастую бывает как крайне близок к реальности, так и в равной степени и крайне от нее далек.

Научитесь играть РП исходя из ООС ограничений, а не пытайтесь обойти ООС ограничения, аргументируя это своим РП. Направляя свой отыгрыш на пересечение этих рамок, вы будете лишь вызывать конфликты как с другими игроками, так и с администрацией.

Q: Никто не играет со мной больших РП, бытовуху играть не умею/ни хочу/не буду, ЧТО ДЕЛАТЬ?!?
A: Поставьте IC цель своему персонажу и ищите IC пути для ее достижения.
Вопреки распространенному мнению, я ненавижу банить людей.

С вами очень сложно.

Конвертирую плюсики в модификации.
Gary_Ralium
Зашедший
Сообщения: 6
Зарегистрирован: 15 мар 2013, 19:43
Репутация: 0
Ник в игре: Gary_Ralium

Re: Хочу быть разработчиком!

Сообщение Gary_Ralium »

Eakwarp, отправил в личные сообщения.
Аватара пользователя
EvilThomas
Местный
Сообщения: 219
Зарегистрирован: 01 июн 2012, 15:22
Репутация: 13
Ник в игре: Fredrick
Откуда: Абакан

Re: Хочу быть разработчиком!

Сообщение EvilThomas »

Вопрос по форуму. Недавно ведь был модератор в теме Банды и Мафии, где он сейчас? За этой темой тчательный присмотр нужен, хочу посодействовать.
Ответить

Вернуться в «Разработка»