Добро пожаловать на форум, Гость, это ваша панель
  • Страница 1 из 1
  • 1
Как создать магазин(крафт магазин)?
KinD
Дата: Понедельник, 24.12.2012, 22:55 | Сообщение # 1
офлайн

  • Сообщения: 1148
  • Награды: 22
  • Замечания:
 
1)Зайти в исходник .sma
Добавить
Код
register_clcmd( "craftshop"   , "CMD_Handler"  , -1 );      
register_clcmd( "craftinfo"   , "CMD_Handler"  , -1 );

2)Зайти в .txt(ланг файл)
Добавить
Код
WC3_CRAFT_SHOP_TITLE = Меню крафта
WC3_CRAFT_SHOP_TITLE_HELP = Меню помощи по крафту
WC3_CRAFT_ITEM1 = \rМаска Бога ^n\yТребуется[Ботинки + Полет]
WC3_CRAFT_ITEM2 = \rОжерелье Вампира ^n\yТребуется[Когти + Маска Смерти]
WC3_CRAFT_ITEM1_INFO = Ваш Текст
WC3_CRAFT_ITEM2_INFO = Ваш Текст
WC3_CRAFT_NO_ITEMS = Вы не можете скрафтить вещь,т.к у вас нету нужных предметов
WC3_CRAFT_ALREADY_BUY = Ты не можеь купить этот предмет,т.к у тебя есть крафт предмет

3)Зайти в clientcommands.inl
Добавить в CMD_Handle( idUser, szCmd[], bool:bThroughSay )
Код
else if ( CMD_Equal( idUser,  szCmd, "craftshop" ) )
    {
     craftshops(idUser)
    }
    else if ( CMD_Equal( idUser,  szCmd, "craftinfo" ) )
    {
     craftinfos(idUser)
    }


4)Зайти в menus.inl
Добавить
Код
public craftshops(idUser)
{
    if(is_user_alive(idUser))
    {
      new msg[500]
               formatex(msg, charsmax(msg), "%L",LANG_PLAYER,"WC3_CRAFT_SHOP_TITLE")
      new menu = menu_create(msg,"craft_handler")    
      formatex(msg, charsmax(msg), "%L",LANG_PLAYER,"WC3_CRAFT_ITEM1")
      menu_additem(menu, msg, "1")
      formatex(msg, charsmax(msg), "%L",LANG_PLAYER,"WC3_CRAFT_ITEM2")
      menu_additem(menu, msg, "2")

         
      menu_setprop(menu, MPROP_NEXTNAME, "Next")
      menu_setprop(menu, MPROP_BACKNAME, "Back")
      menu_setprop(menu, MPROP_EXITNAME, "Exit")
      menu_display(idUser,menu, 0)    
    }
}
public craftinfos(idUser)
{
    if(is_user_alive(idUser))
    {
      new msg[500]
               formatex(msg, charsmax(msg), "%L",LANG_PLAYER,"WC3_CRAFT_SHOP_TITLE_HELP")
      new menu = menu_create(msg,"craftinfo_handler")    
      formatex(msg, charsmax(msg), "%L",LANG_PLAYER,"WC3_CRAFT_ITEM1")
      menu_additem(menu, msg, "1")
      formatex(msg, charsmax(msg), "%L",LANG_PLAYER,"WC3_CRAFT_ITEM2")
      menu_additem(menu, msg, "2")
         
      menu_setprop(menu, MPROP_NEXTNAME, "Next")
      menu_setprop(menu, MPROP_BACKNAME, "Back")
      menu_setprop(menu, MPROP_EXITNAME, "Exit")
      menu_display(idUser,menu, 0)    
    }
}
public craftinfo_handler( id, menu, item )    
{    
       if( item == MENU_EXIT )    
       {    
           menu_destroy( menu );    
           return PLUGIN_HANDLED;    
       }    
    new idUser = id
       new data[6], iName[64];    
       new access, callback;    
           
       menu_item_getinfo( menu, item, access, data,5, iName, 63, callback );    
       new key = str_to_num( data );    
       switch( key )    
       {    
     case 1:    
           {     
         
      format(szMessage, sizeof(szMessage) - 1, "^x01%L^x03%L^x01%L ^x04%L",    
      LANG_PLAYER,"WC3_BRACKET_LEFT",LANG_PLAYER,"WC3_MODCLIENT",LANG_PLAYER,"WC3_BRACKET_RIGHT",    
      LANG_PLAYER,"WC3_CRAFT_ITEM1_INFO");     
             
      cssbColoredPrint(idUser, szMessage);    
     }
     case 2:
     {
      format(szMessage, sizeof(szMessage) - 1, "^x01%L^x03%L^x01%L ^x04%L",    
      LANG_PLAYER,"WC3_BRACKET_LEFT",LANG_PLAYER,"WC3_MODCLIENT",LANG_PLAYER,"WC3_BRACKET_RIGHT",    
      LANG_PLAYER,"WC3_CRAFT_ITEM2_INFO");     
             
      cssbColoredPrint(idUser, szMessage);
     }
    }
    return PLUGIN_HANDLED
}    

public craft_handler( id, menu, item )    
{    
       if( item == MENU_EXIT )    
       {    
           menu_destroy( menu );    
           return PLUGIN_HANDLED;    
       }    
       new data[6], iName[64];    
       new access, callback;    
           
       menu_item_getinfo( menu, item, access, data,5, iName, 63, callback );    
       new key = str_to_num( data );    
       switch( key )    
       {    
     case 1:    
           {     
      if(is_user_item(id,ITEM_BOOTS,ITEM_SOCK)==1)
      {
       show_cssb_message(id,"WC3_CRAFT_ITEM1_INFO")
       items_slot_remove(id,ITEM_BOOTS,ITEM_SOCK)
       ITEM_GiveItem(id,CRAFT_ITEM1)
      }
      else
      {
       show_cssb_message(id,"WC3_CRAFT_NO_ITEMS")
      }    
     }
     case 2:
     {
      if(is_user_item(id,ITEM_CLAWS,ITEM_MASK)==1)
      {
       show_cssb_message(id,"WC3_CRAFT_ITEM2_INFO")
       items_slot_remove(id,ITEM_CLAWS,ITEM_MASK)
       ITEM_GiveItem(id,CRAFT_ITEM2)
      }
      else
      {
       show_cssb_message(id,"WC3_CRAFT_NO_ITEMS")
      }
     }
    }
    return PLUGIN_HANDLED
}


5)зайти в stocks.inl
Добавить
Код
//Есть ли у игрока два нужных предмета
stock is_user_item(idUser,Item1,Item2)
{
    new item = 0
       
    if(g_iShopMenuItems[idUser][ITEM_SLOT_ONE] ==Item1 || g_iShopMenuItems[idUser][ITEM_SLOT_TWO] ==Item1 || g_iShopMenuItems[idUser][ITEM_SLOT_THREE] ==Item1)
    {
     if(g_iShopMenuItems[idUser][ITEM_SLOT_ONE] ==Item2 || g_iShopMenuItems[idUser][ITEM_SLOT_TWO] ==Item2 || g_iShopMenuItems[idUser][ITEM_SLOT_THREE] ==Item2)
     {
      item = 1
     }
    }
    return item;
}    
//Удаляет предметы из слота(необходимые для крафта)
stock items_slot_remove(idUser,Item1,Item2)
{
    if(g_iShopMenuItems[idUser][ITEM_SLOT_ONE] ==Item1 && g_iShopMenuItems[idUser][ITEM_SLOT_TWO] ==Item2 || g_iShopMenuItems[idUser][ITEM_SLOT_ONE] ==Item2 && g_iShopMenuItems[idUser][ITEM_SLOT_TWO] ==Item1)
    {
     g_iShopMenuItems[idUser][ITEM_SLOT_ONE] = -1
     g_iShopMenuItems[idUser][ITEM_SLOT_TWO] = -1
    }
    else if(g_iShopMenuItems[idUser][ITEM_SLOT_ONE] ==Item1 && g_iShopMenuItems[idUser][ITEM_SLOT_THREE] ==Item2 || g_iShopMenuItems[idUser][ITEM_SLOT_ONE] ==Item2 && g_iShopMenuItems[idUser][ITEM_SLOT_THREE] ==Item1)
    {
     g_iShopMenuItems[idUser][ITEM_SLOT_ONE] = -1
     g_iShopMenuItems[idUser][ITEM_SLOT_THREE] = -1
    }
    else if(g_iShopMenuItems[idUser][ITEM_SLOT_TWO] ==Item1 && g_iShopMenuItems[idUser][ITEM_SLOT_THREE] ==Item2 || g_iShopMenuItems[idUser][ITEM_SLOT_TWO] ==Item2 && g_iShopMenuItems[idUser][ITEM_SLOT_THREE] ==Item1)
    {
     g_iShopMenuItems[idUser][ITEM_SLOT_TWO] = -1
     g_iShopMenuItems[idUser][ITEM_SLOT_THREE] = -1
    }
    WC3_ShowBar( idUser );
}    
//Ланг сообщение
stock show_cssb_message(idUser,LANG[])
{
      format(szMessage, sizeof(szMessage) - 1, "^x01%L^x03%L^x01%L ^x04%L",    
      LANG_PLAYER,"WC3_BRACKET_LEFT",LANG_PLAYER,"WC3_MODCLIENT",LANG_PLAYER,"WC3_BRACKET_RIGHT",    
      LANG_PLAYER,LANG);     
             
      cssbColoredPrint(idUser, szMessage);
}


6)Зайти в items.inl
Найти ITEM_CanBuy( idUser, iItem )
Добавить
Код
else if ( ( iItem == ITEM_BOOTS && ITEM_Has( idUser, CRAFT_ITEM1 ) > ITEM_NONE ) || ( iItem == ITEM_SOCK && ITEM_Has( idUser, CRAFT_ITEM1 ) > ITEM_NONE ) )
    {
     show_cssb_message(idUser,"WC3_CRAFT_ALREADY_BUY")

     return false;
    }
    else if ( ( iItem == ITEM_CLAWS && ITEM_Has( idUser, CRAFT_ITEM2 ) > ITEM_NONE ) || ( iItem == ITEM_MASK && ITEM_Has( idUser, CRAFT_ITEM2 ) > ITEM_NONE ) )
    {
     show_cssb_message(idUser,"WC3_CRAFT_ALREADY_BUY")

     return false;
    }


7)Зайти в items.h
Изменить
Код
#define    MAX_SHOPMENU_ITEMS Ваше число + 2
#define CRAFT_ITEM1 18,19 etc...
#define CRAFT_ITEM2 18,19 etc...


8)Дописать функции для CRAFT вещей.

P.S Все упростил,чтобы было легче добавлять новые комбо вещи(крафт вещи)

Примеры:
Код
is_user_item(id,ITEM_BOOTS,ITEM_SOCK) , проверяет наличие предметов : BOOTS и SOCK. Если возвращает 1,то предметы есть у игрока,если 0,то у него нету этих предметов

items_slot_remove(id,ITEM_BOOTS,ITEM_SOCK), удаляет из слотов нужные предметы для крафта(те,которые не нужны для крафта оставляет)


Skype:daywerok

Сообщение отредактировал KinD - Понедельник, 24.12.2012, 23:02
 
Contra63
Дата: Понедельник, 24.12.2012, 23:39 | Сообщение # 2
офлайн

  • Сообщения: 830
  • Награды: 7
  • Замечания:
 
KinD, обеднение 2 свойств предметов в 1 ? surprised

 
KinD
Дата: Вторник, 25.12.2012, 00:33 | Сообщение # 3
офлайн

  • Сообщения: 1148
  • Награды: 22
  • Замечания:
 
Contra63, Нет.
К примеру:
CLAW + mask = Усиление одного из предметов .
У меня в моде:
FROST+ Armor ice = Ледяной клык(суть:с неба "падает" лед и не дает двигатся)
Короче,все в фантазию упирается.


Skype:daywerok
 
AlienRobben
Дата: Вторник, 25.12.2012, 01:04 | Сообщение # 4
офлайн

  • Сообщения: 72
  • Награды: 0
  • Замечания:
 
KinD, не разжевал))
 
Contra63
Дата: Вторник, 25.12.2012, 09:33 | Сообщение # 5
офлайн

  • Сообщения: 830
  • Награды: 7
  • Замечания:
 
KinD, функций на выполнение действий нет sad

 
KinD
Дата: Вторник, 25.12.2012, 10:09 | Сообщение # 6
офлайн

  • Сообщения: 1148
  • Награды: 22
  • Замечания:
 
AlienRobben, Если это "не разжевал",то можно даже и не пытатся встраивать это дополнение в "свой" мод.
Contra63, Я еще должен свои крафт итемы разглашать?Я сделал работу за вас,осталось ДОПИСАТЬ что вам нужно от крафт итемов.


Skype:daywerok
 
AlienRobben
Дата: Вторник, 25.12.2012, 12:50 | Сообщение # 7
офлайн

  • Сообщения: 72
  • Награды: 0
  • Замечания:
 
KinD, интересное дополнение
 
BABAZORO4450
Дата: Четверг, 01.01.2015, 17:46 | Сообщение # 8
офлайн

  • Сообщения: 42
  • Награды: 0
  • Замечания:
 
Я не получаю и делать все так, как описано
 
  • Страница 1 из 1
  • 1
Поиск: