2015年11月13日 星期五

ZigBee TI CC2530 程式筆記hal_board_cfg.h

hal_board_cfg.h 主要設定CC2530與ZDK開發版之間的關係,包含了pin腳位的對應、clock、PA等。如果是自家的開發版,則也是需要從這邊修改。Sample code主要是針對ZDK的。



程式版本2.5.1.a,cc2530晶片規格

/* ------------------------------------------------------------------------------------------------
 *                                          Clock Speed
 * ------------------------------------------------------------------------------------------------
 */

#define HAL_CPU_CLOCK_MHZ     32

/* This flag should be defined if the SoC uses the 32MHz crystal
 * as the main clock source (instead of DCO).
 */
#define HAL_CLOCK_CRYSTAL

/* 32 kHz clock source select in CLKCONCMD */
#if !defined (OSC32K_CRYSTAL_INSTALLED) || (defined (OSC32K_CRYSTAL_INSTALLED) && (OSC32K_CRYSTAL_INSTALLED == TRUE))
  #define OSC_32KHZ  0x00 /* external 32 KHz xosc */
#else
  #define OSC_32KHZ  0x80 /* internal 32 KHz rcosc */
#endif

#define HAL_CLOCK_STABLE()    st( while (CLKCONSTA != (CLKCONCMD_32MHZ | OSC_32KHZ)); )


/* ------------------------------------------------------------------------------------------------
 *                                       LED Configuration
 * ------------------------------------------------------------------------------------------------
 */

#if defined (HAL_BOARD_CC2530EB_REV17) && !defined (HAL_PA_LNA) && !defined (HAL_PA_LNA_CC2590)
  #define HAL_NUM_LEDS            3
#elif defined (HAL_BOARD_CC2530EB_REV13) || defined (HAL_PA_LNA) || defined (HAL_PA_LNA_CC2590)
  #define HAL_NUM_LEDS            1
#else
  #error Unknown Board Indentifier
#endif

預設好像是Run HAL_BOARD_CC2530EB_REV17的樣子,這是TI開發版的版本號,基本上是使用cc2530ZDK,cc2530ZDK才有下面多定義的LED燈。

#define HAL_LED_BLINK_DELAY()   st( { volatile uint32 i; for (i=0; i<0x5800; i++) { }; } )

/* 1 - Green */
#define LED1_BV           BV(0)
#define LED1_SBIT         P1_0
#define LED1_DDR          P1DIR
#define LED1_POLARITY     ACTIVE_HIGH

#if defined (HAL_BOARD_CC2530EB_REV17)
  /* 2 - Red */
  #define LED2_BV           BV(1)
  #define LED2_SBIT         P1_1
  #define LED2_DDR          P1DIR
  #define LED2_POLARITY     ACTIVE_HIGH

  /* 3 - Yellow */
  #define LED3_BV           BV(4)
  #define LED3_SBIT         P1_4
  #define LED3_DDR          P1DIR
  #define LED3_POLARITY     ACTIVE_HIGH
#endif

P1_0表示的是 P1.0的pin腳,P1_1表示的是P1.1,以此類推。
/* ------------------------------------------------------------------------------------------------
 *                                    Push Button Configuration
 * ------------------------------------------------------------------------------------------------
 */

#define ACTIVE_LOW        !
#define ACTIVE_HIGH       !!    /* double negation forces result to be '1' */

/* S1 */
//#define PUSH1_BV          BV(1)
//#define PUSH1_SBIT        P0_1
#define PUSH1_BV          BV(7)
#define PUSH1_SBIT        P0_7

同樣的P0_1表示的是 P0.1的pin腳,P0_7表示的是P0.7。ps:註解掉0.1,是想把他換成0.7。

#if defined (HAL_BOARD_CC2530EB_REV17)
  #define PUSH1_POLARITY    ACTIVE_HIGH
#elif defined (HAL_BOARD_CC2530EB_REV13)
  #define PUSH1_POLARITY    ACTIVE_LOW
#else
  #error Unknown Board Indentifier
#endif

/* Joystick Center Press */
/*#define PUSH2_BV          BV(0)
#define PUSH2_SBIT        P2_0
#define PUSH2_POLARITY    ACTIVE_HIGH*/

#define PUSH2_BV          BV(6)
#define PUSH2_SBIT        P0_6
#define PUSH2_POLARITY    ACTIVE_HIGH

ps:註解掉2.0,是想把他換成0.6。
/* ------------------------------------------------------------------------------------------------
 *                         OSAL NV implemented by internal flash pages.
 * ------------------------------------------------------------------------------------------------
 */
// Flash is partitioned into 8 banks of 32 KB or 16 pages.
#define HAL_FLASH_PAGE_PER_BANK    16
// Flash is constructed of 128 pages of 2 KB.
#define HAL_FLASH_PAGE_SIZE        2048
#define HAL_FLASH_WORD_SIZE        4

// CODE banks get mapped into the XDATA range 8000-FFFF.
#define HAL_FLASH_PAGE_MAP         0x8000

// The last 16 bytes of the last available page are reserved for flash lock bits.
// NV page definitions must coincide with segment declaration in project *.xcl file.
#if defined NON_BANKED
#define HAL_FLASH_LOCK_BITS        16
#define HAL_NV_PAGE_END            30
#define HAL_NV_PAGE_CNT            2
#else
#define HAL_FLASH_LOCK_BITS        16
#define HAL_NV_PAGE_END            126
#define HAL_NV_PAGE_CNT            6
#endif

// Re-defining Z_EXTADDR_LEN here so as not to include a Z-Stack .h file.
#define HAL_FLASH_IEEE_SIZE        8
#define HAL_FLASH_IEEE_PAGE       (HAL_NV_PAGE_END+1)
#define HAL_FLASH_IEEE_OSET       (HAL_FLASH_PAGE_SIZE - HAL_FLASH_LOCK_BITS - HAL_FLASH_IEEE_SIZE)
#define HAL_INFOP_IEEE_OSET        0xC

#define HAL_FLASH_DEV_PRIVATE_KEY_OSET     0x7D2
#define HAL_FLASH_CA_PUBLIC_KEY_OSET       0x7BC
#define HAL_FLASH_IMPLICIT_CERT_OSET       0x78C

#define HAL_NV_PAGE_BEG           (HAL_NV_PAGE_END-HAL_NV_PAGE_CNT+1)

// Used by DMA macros to shift 1 to create a mask for DMA registers.
#define HAL_NV_DMA_CH              0
#define HAL_DMA_CH_RX              3
#define HAL_DMA_CH_TX              4

#define HAL_NV_DMA_GET_DESC()      HAL_DMA_GET_DESC0()
#define HAL_NV_DMA_SET_ADDR(a)     HAL_DMA_SET_ADDR_DESC0((a))

待續...

2015年11月3日 星期二

ZigBee TI CC2530 程式筆記-UART 程式流程 hal_uart.c hal_uart.h _hal_uart_dma.c

1.HalUARTRead和HalUARTWrite程式碼寫在hal_uart.c內,程式如下:

---------------------------------------程式分隔--------------------------------------------------
uint16 HalUARTRead(uint8 port, uint8 *buf, uint16 len)
{
  (void)port;
  (void)buf;
  (void)len;

#if (HAL_UART_DMA == 1)
  if (port == HAL_UART_PORT_0)  return HalUARTReadDMA(buf, len);
#endif
#if (HAL_UART_DMA == 2)
  if (port == HAL_UART_PORT_1)  return HalUARTReadDMA(buf, len);
#endif
#if (HAL_UART_ISR == 1)
  if (port == HAL_UART_PORT_0)  return HalUARTReadISR(buf, len);
#endif
#if (HAL_UART_ISR == 2)
  if (port == HAL_UART_PORT_1)  return HalUARTReadISR(buf, len);
#endif

#if HAL_UART_USB
  return HalUARTRx(buf, len);
#else
  return 0;
#endif
}
---------------------------------------程式分隔--------------------------------------------------
uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len)
{
  (void)port;
  (void)buf;
  (void)len;

#if (HAL_UART_DMA == 1)
  if (port == HAL_UART_PORT_0)  return HalUARTWriteDMA(buf, len);
#endif
#if (HAL_UART_DMA == 2)
  if (port == HAL_UART_PORT_1)  return HalUARTWriteDMA(buf, len);
#endif
#if (HAL_UART_ISR == 1)
  if (port == HAL_UART_PORT_0)  return HalUARTWriteISR(buf, len);
#endif
#if (HAL_UART_ISR == 2)
  if (port == HAL_UART_PORT_1)  return HalUARTWriteISR(buf, len);
#endif

#if HAL_UART_USB
  HalUARTTx(buf, len);
  return len;
#else
  return 0;
#endif
}
port基本上使用的是HAL_UART_PORT_0,所以會進入到HalUARTReadDMA和HalUARTWriteDMA。

---------------------------------------我是分隔線--------------------------------------------------

2.HalUARTReadDMA和HalUARTWriteDMA程式碼寫在_hal_uart_dma.c內,程式如下:

---------------------------------------程式分隔--------------------------------------------------

static uint16 HalUARTWriteDMA(uint8 *buf, uint16 len)
{
  uint16 cnt;
  halIntState_t his;
  uint8 txSel;
  txIdx_t txIdx;

  // Enforce all or none.
  if ((len + dmaCfg.txIdx[dmaCfg.txSel]) > HAL_UART_DMA_TX_MAX)
  {
    return 0;
  }
//注意一下HAL_UART_DMA_TX_MAX,預設為256,所以一次資料量最大不能超過256,否則沒辦法給UART資料。

  HAL_ENTER_CRITICAL_SECTION(his);
  txSel = dmaCfg.txSel;
  txIdx = dmaCfg.txIdx[txSel];
  HAL_EXIT_CRITICAL_SECTION(his);

  for (cnt = 0; cnt < len; cnt++)
  {
    dmaCfg.txBuf[txSel][txIdx++] = buf[cnt];
  }
//將要寫入的資料存近dmaCfg.txBuf,這是TI寫好的,別亂改。

  HAL_ENTER_CRITICAL_SECTION(his);
  if (txSel != dmaCfg.txSel)
  {
    HAL_EXIT_CRITICAL_SECTION(his);
    txSel = dmaCfg.txSel;
    txIdx = dmaCfg.txIdx[txSel];

    for (cnt = 0; cnt < len; cnt++)
    {
      dmaCfg.txBuf[txSel][txIdx++] = buf[cnt];
    }
    HAL_ENTER_CRITICAL_SECTION(his);
  }

  dmaCfg.txIdx[txSel] = txIdx;

  if (dmaCfg.txIdx[(txSel ^ 1)] == 0)
  {
    // TX DMA is expected to be fired
    dmaCfg.txDMAPending = TRUE;//TRUE表示有資料要送入UART,才會驅動到控制UART的程式碼。
  }
  HAL_EXIT_CRITICAL_SECTION(his);

  dmaCfg.txDMAPending = TRUE;
  這行是我自己加入的,因為會進入到HalUARTWriteDMA表示一定有資料,何必像上面一樣再次判斷。
 return cnt;
}

---------------------------------------程式分隔--------------------------------------------------

static uint16 HalUARTReadDMA(uint8 *buf, uint16 len)
{
  uint16 cnt;

  for (cnt = 0; cnt < len; cnt++)
  {
    if (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))
    {
      break;
    }
    *buf++ = HAL_UART_DMA_GET_RX_BYTE(dmaCfg.rxHead);
    HAL_UART_DMA_CLR_RX_BYTE(dmaCfg.rxHead);
//#if HAL_UART_DMA_RX_MAX == 256
//    (dmaCfg.rxHead)++;
//#else
    if (++(dmaCfg.rxHead) >= HAL_UART_DMA_RX_MAX)
    {
      dmaCfg.rxHead = 0;
    }
//#endif
  }
  PxOUT &= ~HAL_UART_Px_RTS;  // Re-enable the flow on any read.
//基本上就是將讀到的資料,寫入到你指定的buf。
//黃色的註解,是我個人會修改成使用
//if (++(dmaCfg.rxHead) >= HAL_UART_DMA_RX_MAX)
//    {
//      dmaCfg.rxHead = 0;
//    }這段進行計算,我個人認為讀的時候比較順。
  return cnt;
}

---------------------------------------我是分隔線--------------------------------------------------

3.HalUARTReadDMA和HalUARTWriteDMA並沒有寫入UART,只是寫入到TI指定的buf,實際上寫入的function是static void HalUARTPollDMA(void)。程式如下:

---------------------------------------程式分隔--------------------------------------------------

static void HalUARTPollDMA(void)
{
  uint16 cnt = 0;
  uint8 evt = 0;

  if (HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))
  {
    rxIdx_t tail = findTail();

    // If the DMA has transferred in more Rx bytes, reset the Rx idle timer.
    if (dmaCfg.rxTail != tail)
    {
      dmaCfg.rxTail = tail;

      // Re-sync the shadow on any 1st byte(s) received.
      if (dmaCfg.rxTick == 0)
      {
        dmaCfg.rxShdw = ST0;
      }
      dmaCfg.rxTick = HAL_UART_DMA_IDLE;
    }
    else if (dmaCfg.rxTick)
    {
      // Use the LSB of the sleep timer (ST0 must be read first anyway).
      uint8 decr = ST0 - dmaCfg.rxShdw;

      if (dmaCfg.rxTick > decr)
      {
        dmaCfg.rxTick -= decr;
        dmaCfg.rxShdw = ST0;
      }
      else
      {
        dmaCfg.rxTick = 0;
      }
    }
    cnt = HalUARTRxAvailDMA();
  }
  else
  {
    dmaCfg.rxTick = 0;
  }

  if ((cnt >= HAL_UART_DMA_FULL)||(cnt > 10))
  {
    evt = HAL_UART_RX_FULL;
  }
  else if (cnt >= HAL_UART_DMA_HIGH)
  {
    evt = HAL_UART_RX_ABOUT_FULL;
    PxOUT |= HAL_UART_Px_RTS;  // Disable Rx flow.
  }
  else if (cnt && !dmaCfg.rxTick)
  {
    evt = HAL_UART_RX_TIMEOUT;
  }
//這個if可以觀察到,UART事件處理是在這邊決定的。

/************************************************************/
/****************上面是Read,下面是Wirte。*******************/
/************************************************************/

  if (dmaCfg.txMT)
  {
    dmaCfg.txMT = FALSE;
    evt |= HAL_UART_TX_EMPTY;
  }

  if (dmaCfg.txShdwValid)
  {
    uint8 decr = ST0;
    decr -= dmaCfg.txShdw;
    if (decr > dmaCfg.txTick)
    {
      // No protection for txShdwValid is required
      // because while the shadow was valid, DMA ISR cannot be triggered
      // to cause concurrent access to this variable.
      dmaCfg.txShdwValid = FALSE;
    }
  }
 // dmaCfg.txShdwValid = FALSE;
  if (dmaCfg.txDMAPending && !dmaCfg.txShdwValid)
  {
    //以下就是寫入UART程式碼
    // UART TX DMA is expected to be fired and enough time has lapsed since last DMA ISR
    // to know that DBUF can be overwritten
    halDMADesc_t *ch = HAL_DMA_GET_DESC1234(HAL_DMA_CH_TX);
    halIntState_t intState;

    // Clear the DMA pending flag
    dmaCfg.txDMAPending = FALSE;
 
    HAL_DMA_SET_SOURCE(ch, dmaCfg.txBuf[dmaCfg.txSel]);
    HAL_DMA_SET_LEN(ch, dmaCfg.txIdx[dmaCfg.txSel]);
    dmaCfg.txSel ^= 1;
    HAL_ENTER_CRITICAL_SECTION(intState);
    HAL_DMA_ARM_CH(HAL_DMA_CH_TX);
    do
    {
      asm("NOP");
    } while (!HAL_DMA_CH_ARMED(HAL_DMA_CH_TX));
    HAL_DMA_CLEAR_IRQ(HAL_DMA_CH_TX);
    HAL_DMA_MAN_TRIGGER(HAL_DMA_CH_TX);
    HAL_EXIT_CRITICAL_SECTION(intState);
  }
  else
  {
    halIntState_t his;

    HAL_ENTER_CRITICAL_SECTION(his);
    if ((dmaCfg.txIdx[dmaCfg.txSel] != 0) && !HAL_DMA_CH_ARMED(HAL_DMA_CH_TX)
                                          && !HAL_DMA_CHECK_IRQ(HAL_DMA_CH_TX))
    {
      HAL_EXIT_CRITICAL_SECTION(his);
      HalUARTIsrDMA();
    }
    else
    {
      HAL_EXIT_CRITICAL_SECTION(his);
    }
  }

  if (evt && (dmaCfg.uartCB != NULL))
  {
    dmaCfg.uartCB(HAL_UART_DMA-1, evt);
  }
}

2015年7月30日 星期四

ZigBee TI CC2530 程式筆記-UART(RS-232) 使用方式 IAR

我主要開發的是SampleAPP,版本2.5.1a。

一.初始化(在SampleAPP.c內設定UART的相關參數)

#include "hal_uart.h" //include UART的function

在Init內增加UART的code。

void SampleApp_Init( uint8 task_id )
{
  halUARTCfg_t uartConfig;
  uartConfig.configured           = TRUE;
  uartConfig.baudRate             =   HAL_UART_BR_38400;  
  uartConfig.flowControl          = FALSE;
  uartConfig.flowControlThreshold = 64;
  uartConfig.rx.maxBufSize        = 128;
  uartConfig.tx.maxBufSize        = 128;
  uartConfig.idleTimeout          = 6;  
  uartConfig.intEnable            = TRUE;            
  uartConfig.callBackFunc         = SerialApp_CallBack;
  HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
}

簡單介紹一下相關參數
1.uartConfig.baudRate 設定Data Rate

Data Rate的定義在hal_uart.h裡面,總共有5種可以選擇。

     #define HAL_UART_BR_9600   0x00
     #define HAL_UART_BR_19200  0x01
     #define HAL_UART_BR_38400  0x02
     #define HAL_UART_BR_57600  0x03
     #define HAL_UART_BR_115200 0x04

2.uartConfig.flowControl 流量控制,我是設定關。

3.uartConfig.rx.maxBufSize 和 uartConfig.tx.maxBufSize,就是當你收資料和送資料的時候,最大值是多少,小於等於可以送,不能超過。

4.uartConfig.callBackFunc 指定一個function給UART用,這很好用。請參考第二點。

5.HalUARTOpen 開啟Port
如果是使用TI CC2530 ZDK的開發版,都是用HAL_UART_PORT_0。
定義在hal_uart.h
/* Ports */
#define HAL_UART_PORT_0   0x00
#define HAL_UART_PORT_1   0x01
#define HAL_UART_PORT_MAX 0x02


---------------------------------------我是分隔線--------------------------------------------------
二.Call Back Function

當設備收到UART資料的時候,就會執行指定的function,做後續的處理。
SerialApp_CallBack是自定義的,也可以不用,看需求。

宣告
void SerialApp_CallBack( uint8 port, uint8 event );

程式內容
void SerialApp_CallBack( uint8 port, uint8 event ){

 if (event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))
  {
     //UART收到資料後續處理
  }
}

注意並不是function寫上去,有資料進入UART,才會執行。
事實上它會一直執行,所以function內用 if 是判斷是否有資料進入UART,有就做後續的處理。

---------------------------------------我是分隔線--------------------------------------------------
三.Write and Read

UART收到資料後,就可以讀出資料。下面有一個簡單範例

首先新增兩個Array,一個用來收資料,另一個送資料。
其實也可以一個就好,但是分開比較清楚。
1.定義 Array
static uint8 SerialApp_TxBuf[128];
static uint8 SerialApp_RxBuf[128];
static uint8 SerialApp_RxLen;

2.Read
void SerialApp_CallBack( uint8 port, uint8 event ){

 if (event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT))
  {
     //UART收到資料後續處理
     SerialApp_RxLen=HalUARTRead(HAL_UART_PORT_0, SerialApp_RxBuf, 127);
    //讀UART資料,儲存到SerialApp_RxBuf,SerialApp_RxLen為實際資料長度。
    //設定127是因為array max 128的關係,UART傳送最好比128小。
  }
}

3.Write

SerialApp_TxBuf[0]=0;
SerialApp_TxBuf[1]=1;
SerialApp_TxBuf[2]=2;
SerialApp_TxBuf[3]=3;

HalUARTWrite(HAL_UART_PORT_0, SerialApp_TxBuf, 4);

2015年5月20日 星期三

金庸1.0 免費版 三轉 日月星大魔王 筆記

日月星三洞任務


任務過程請參考香香

任務補充
1.三個任務都必須要自己去找地圖,所以霸主是移動不到的。
2.在三洞地圖移動的時候,可以利用展開事件,這樣比較好移動。













日月星大魔王

魔教大長老 
    血量120W
波斯神女      
    血量88W
長老            
    血量99W

九奧+神照+攻1400+狂暴+鐵血 攻擊8000(沒開內丹)

開快速集氣,2~3分鐘就可以殺死。

三轉任務很吃功,內功是不是攻擊型,我倒覺得不是重點。攻越高越痛,就算你學防禦型內功也是。

如果真的沒裝備,少說也要1000以上。

角色攻擊200+二轉武器330+武神100+氣力倍增200+七彩200+內丹100~200。
這樣只少會有1000多,在加超級狂暴丹,至少這樣才打得動。

注意-魔王會休息。

防很重要,因為被打會很痛,你可能還沒殺死他就先被幹掉了。

防3500 日600 月600 星600 左右 就不痛了。但是還是要補血,只是比較不會死。

打帶跑+補也是種方式。

我補師防

防1400  日150 月150 星150 易經101 檔格220 印象中一次差不多1~2W,但是沒有被魔教大長老打,應該只有被波斯神女或長老打。

魔王主要會先打解三轉的角色,角色分散點,魔王是個體攻擊不是全體。

所以三轉標準檔格270 ,基本防1200+鎧神200,日月星230左右,若被三隻打,推測是可以補回來的。(但是還是要看你本身血量夠多給你緩衝)

ps:帶補師的朋友,注意自己血量要夠撐到補師走到你旁邊補,若沒裝,推測15W是足夠的,但是越多越好,記得別傻傻把補師走去給他們打,你會看到很刺激的血量跳動。

狀態

會中狀態,封穴、凍傷、流血不止等等。帶顆正露丸去就好,3分鐘搞定。
會被吸內,我被吸了大約9000內力就停了,記得帶小孩去,50顆馬力達夠他吸的。
防禦型內功比較不會被吸。

ps:失敗死掉三旗還會留著,請放心。


星洞重點

本人花2個小時,有記錄地圖。地圖筆記方式 ,請參考日洞筆記。

第一點

    可以解兩個關卡08 力量與12 吊人

    因為可以不用跑來跑去 只需要找到星宮11和星宮02就好

    其他關卡都需要兩個地圖以上,不然就是材料難取得。

    關卡08 力量 是需要定力石的,這打點的時候就有了。

    所以在找尋地圖時就可以找星宮11或星宮02,就可以完成此任務。

星洞補充

     本人解任務的時候,運氣很差的一直找不到星宮11,所以才說星宮02也一起找,加快速度。

霸主地圖 2000(表示在野外)--->44(表示進入華山水井)--->3(表示進入星洞)--->25(占卜紀錄)表示你要解的任務是12吊人

  • 占卜紀錄標記都一樣,記得記錄你按了什麼。
  • 占卜紀錄刷到之後,開始進行任務。
如果懶得湊材料,找到15811,就刷六次12吊人。20分鐘解決星洞,但是請慢慢刷。


月洞重點

本人花3個小時,沒有記錄地圖,隨便走。

第一點

    熔化的寒冰其實很久,不像上面寫的五分鐘,因為戰鬥時間不算在內。

第二點

    守護者冤魂 月攻大約56左右,本人月防224,被打5000系傷。

                         一般攻擊,防500+檔格270就不痛了,被打50左右。

                         攻900+神照139+九奧330+內丹 打2萬多。
                         攻1050以上+易經140+六脈330+內丹 打2萬多。

第三點

    多帶點睡袋,記得抓岳不群檔凍傷,可以打30分鐘。
    就算你開掛,凍傷打很容易就miss,鬼氣你會打很久,所以竟可能不要凍傷。

第四點

    熔化的寒冰越多,站著遇敵就好。可以先去收集多一點,在一次打。
    我是收集5~6個一次打。但這前提是要有岳不群防凍傷。

第五點

    我是上線收集熔化的寒冰,並不是用刷的,因為上線收集比較快,用刷的太慢。
    除非你剩下一兩個沒有收集到,才去找地圖用刷的。
    我是全程都上線找15個,運氣不錯1個多小時就全部打到了,抓了兩次岳不群。

日洞重點

本人花4個小時解完,重點在於記錄地圖的方式,一次約花30分鐘記完,總共會記錄2次。

你會記錄地圖,這關根本很簡單。最難的還是月洞,比較麻煩。

華山助力包8元,我用到三包,主要銀鑰匙很缺,運氣不好都失敗。

流程 1.收集18顆召喚石,約2個小時。
         2.取得護心鏡和匕首,在去換6顆火炎珠,約2個小時。

第一點

    若玄日護心鏡,材料很少的朋友,要先去解,若都有就沒差。
    特殊原料用霸主掛

                 飛去龍宮40,打馮錫範 38097,都會掉,記得回城休息,我是去衡山商人。

第二點

    記得從子時開始記錄地圖,才有充裕的時間。
    記得得到一個召換石,刷的時候,要自己記錄編號多少,因為在物品欄裡面不會有記錄,名稱會是一樣的。

第三點

    任務有寫錯 是 尋找日宮18 - > 事件6 (得到提水桶)

第四點

    在刷移動的過程中,若看到要材料,刷有材料,雖然會失敗,但是人已經過去了。

第五點
    霸主刷移動 進入點1是上 進入點2是左 進入點3是下 進入點4是右(1上2左3下4右)


    地圖筆記方式  開一個excel記錄 

     第一步 1是起始點 然後往走繞一圈
                                       
                                       1
                                       ↑
                                       o
                                       ↑
                                       o
                                       ↑
                                       o
                                       ↑
                                        1

      第二步 1是起始點 然後往走繞一圈


                                       1
                                       ↑
                                       o
                                       ↑
                                       o
                                       ↑
                                       o
                                       ↑
              1← x←x←x←1

      第三步 o是起始點 然後往走繞一圈


                                       1
                                       ↑
                                       o
                                       ↑
                                       o
                                       ↑
             o← x←x←x← o
                                       ↑
              1← x←x←x←1

     第四步 全部的o往走繞一圈


                                       1
                                       ↑
              o← x←x←x←o
                                       ↑
             o← x←x←x← o
                                       ↑
             o← x←x←x← o
                                       ↑
              1← x←x←x←1

   這樣就完成一個地圖,然後隨便挑一個x或o,當起始點同樣的開始記錄,直到你需要的所有地圖都找到。

    另外有可能會遇到隨機的地方,只會有一個地方。

例如:

                                       1
                                       ↑
                       15←14←7
                                       ↑
       6← 13←12←11← 6
                                       ↑
           5← 10←9←8← 5
                                       ↑
              1← 4←3←2←1
     
    
                                       1
                                       ↑
                       23←14←7
                                       ↑
       6← 13←12←11← 6
                                       ↑
           5← 10←9←8← 5
                                       ↑
              1← 4←3←2←1                                     
                                       

每次14向左邊走,都會出現不同的地圖。
最後要找日宮08,出現在這邊的機率非常高,幾乎100%會這在排。
  例如:
                                       1
                                       ↑
               日宮0814←7
                                       ↑
       6← 13←12←11← 6
                                       ↑
           5← 10←9←8← 5
                                       ↑
              1← 4←3←2←1

2015年4月30日 星期四

二階屍體編號(獵人)

編號(動物)

40151(羳羊)
40152(白山羊)
40153(黑山羊)
40154(石羊)
40155(菜牛)
40156(犉牛)
40157(犎牛)
40158(乳牛)
40159(巴蛇)
40160(蟒蛇)
40161(赤練蛇)
40162(海蛇)
40163(麋鹿)
40164-麛鹿
40165-麝鹿
40166(水鹿)
40167(野豬)
40168(山豬)
40169(黑貂)
40170(獾貂)
40171(野貂)
40172(獵豹)
40173(黑豹)
40174(山豹)
40175(白狐)
40176(赤狐)
40177(玄狐)
40178(棕熊)
40179(野熊)
40180(浣熊)
40181(綴星鹿)
40182(望月蛇)
40183(獵日羊)

2015年4月9日 星期四

金庸 免費版 霸主腳本 生啤酒*3

顏奇莫大生啤酒任務
生啤酒 在戰鬥中打開物品欄就可以直接喝,跟九九不一樣要用補的,但是不能用在小孩子身上。
條件:金幣1萬、臘肉5個、紅茶5個、實戰1萬、名歷1000、正善1000

腳本會自動購買"臘肉5個、紅茶5個"。(注意身上金錢與負重)

等待顏奇莫大時間標紀消失(8小時),可重解。

MoveTo(2822:270,390)
CallBoss(59)
BuyItem(32010,0,5)
BuyItem(33002,0,5)
MoveTo(3000:500,500)
ExecuteEvent(3000:80)
ExecuteEvent(3000:82)
MoveTo(4500:500,500)
ExecuteEvent(4500:0)
ExecuteEvent(4501:2)
ExecuteEvent(4503:6)
ExecuteEvent(4503:7)
ExecuteEvent(4503:11)
ExecuteEvent(4503:0)
ExecuteEvent(4501:0)
MoveTo(5301:500,500)
ExecuteEvent(5301:8)
ExecuteEvent(5302:8)
ExecuteEvent(5302:11)
ExecuteEvent(5302:0)
ExecuteEvent(5304:7)
MoveTo(4500:500,500)
ExecuteEvent(4500:0)
ExecuteEvent(4501:2)
ExecuteEvent(4503:13)
Delay(1)
Delay(1)

2015年3月28日 星期六

金庸筆記

1.打千年蛇皮

    移動到(9124.500.500),打40129。

2.打魔羽 等材料

    移動到龍宮40,打38097 馮錫範,不用絕,要回城休息,裝備可以存錢莊。

2015年3月25日 星期三

金庸免費版 視窗化 一台電腦 雙開 同時出招

一台電腦全部帳號同時出招的方法:


比如你開3隻正常畫面 我分為A,B,C來解釋比較了解


1.進入戰鬥過後A那隻就放自動出招。


2.然後你的螢幕下面不是有JYOnline,也就是工具列,就把A那隻的JYOnline,點一下,

A畫面就會縮下去到工具列,A自動出招就不會中斷。


3.接下來就看B那隻畫面,放了自動出招,然後同樣的手法點一次JYOnline,畫面縮下去,B自動出招。


4.然後你可以用C那隻看畫面自動出招! 你要開10隻同時出招都可以 方法也一樣,但是會浪費很多記憶體 

   電腦一定要好! 拉霸活動也可以使用這個方法拉!!


PS: 一定要使用視窗化登入


5.win7 預設會將相同檔案程式合併,必須要解開才可以。

解開方法,在工具列,右鍵→內容→工具列按鈕(選擇不要合併),完成。

資訊來源 http://www.ucspace.com/forum/forum.php?mod=viewthread&tid=14060

2015年3月7日 星期六

金庸免費版 絕內 名門 108 定值參考

提供血洗雁門關或各名門定值參考
以下摘自金庸官網討論區、遊戲基地等論壇,攻內定值整理
-------------名門基本定值--------------


血洗雁門關 基本定值 沒意外應該是0
煙雨樓         基本定值 大約3400~3500


-------------內丹計算--------------
內丹計算方式(用65%計算) 自己推測 非官方

假設煙雨基本定值3451*0.65=2243.15
所以開內丹攻擊等於3451+2243=5694

5694+內功定值=實際攻擊

例如:
神照139 定值為3109
打煙雨5694+3108=8802

所以血洗開內丹 "沒用",因為基本定值是0

-------------108關--------------
108 精要200 攻擊600以上 就可以打基本定值

基本定值約 46000~47000
內功定值 3109
內丹(0.65)=46000*0.65=29900

基本定值+內功定值+內丹(0.65)=
攻擊值=79009
(實際測試:內丹倍率0.71 則打出83000)

-------------以下內功定值參考--------------

各攻內定值
太玄250級 = 15600
神照250級 = 9800
蛤蟆250級 = 5700
龍象250級 = 5200


資料來源:九天劍盟

太玄

124/4001
125/4075
126/4150
127/4226
128/4303
130/4472
132/4596
136/4955 8406(煙雨)
139/5217
141/5398
143/5580
145/5767
146/5863
147/5959
148/6056
149/6154 9606(煙雨)
150/6253
151/6353 9801(煙雨)
152/6454
153/6556
154/6659
155/6763
156/6868
157/6974
158/7081
159/7189
160/7298
161/7408
162/7519
165/7900~8800 雁門關朋友實際測試
174/9500左右

神照
111/1743
119/2093
120/2139
121/2185
122/2232
124/2328
126/2425
127/2475
128/2525
131/2678
132/2730
133/2782
134/2835
135/2889(實際測過 雁門關約2900~3000左右)
136/2943
137/2997
138/3052
139/3108
140/3164
147/3570
148/3630
149/3690
154/4000
156/4250
159/4323
160/4389
161/4455
162/4522
163/4590
164/4658
165/4726
166/4795 8246(煙雨)
167/4865
168/4935
169/5005
170/5076
171/5148
172/5220
173/5292
174/5365
175/5439
176/5513
177/5587
178/5662
179/5738
180/5814
181/5890
182/5967
183/6045
184/6123
185/6201
186/6280
187/6360
188/6440
189/6520
190/6601

200/10871(煙雨) 預測定值為7500左右
224/8000左右(本人測試)
228/8600~8800(本人測試) 爆擊11000左右

蛤蟆
100/637
102/663
123/945 4396(煙雨)
130/1072
135/1175
140/1356
157/2056
167/2522
169/2626
200/7951(煙雨)
201/7973(煙雨)

龍象
100/637
121/950
124/1025實際測過
130/1072
140/1244
150/1463
152/1540
153/1580
154/1620
156/1704
157/1746
158/1788
159/1830
160/1872
161/1917
162/1961
163/2005
164/2050
165/2096
166/2142
167/2188
168/2235 實際測過
169/2283
177/2687

215/7751(煙雨)

小無
126/451
132/493
133/495
135/517
138/540
140/540
152/640

2015年2月25日 星期三

TortoiseCVS 使用教學(win7)

第一章 TortoiseCVS 安裝

1.到TortoiseCVS官方下載 TortoiseCVS-1.8.32.exe 進行安裝。
  
2.安裝完成後,在win7任何一個資料夾點選滑鼠右鍵,就可以看到CVS的命令。

第二章 創建新模組

動作:在自己的CVS Server /home/cvsroot/底下新增一個test模組資料夾。

1.在win7的test資料夾滑鼠右鍵,選擇創建新模組,這樣就可以在/home/cvsroot/底下新增一個模組資料夾。(test資料夾名稱可更改成你想要的)








































第三章  模組資料夾內新增檔案或資料夾

等同於#cvs add test  /加入到server 會幫你查詢看看是否有重複的檔名 這個步驟

1. 選取test底下的所有資料夾,右鍵選擇新增或add contents,新增檔案到cvs server。

選擇新增只有單一檔案或單一資料夾,選擇add contents會順便將所有資料夾內的資料新增上去。



第四章 提交(Check In)

1.選取所有資料夾,選擇提交,填寫注解,就完成Check In動作














第五章 Check Out

1.在win7新增一個資料夾,右鍵點選CVS取出



























2.在點選獲取列表,找尋自己需要的模組,確認,就可以Check Out。